OpenWrt - Dynamic DNS
Konfiguracja DDNS (DynDNS, Dynamic DNS)
Ostatnia zmiana: 2013-01-05 18:55

1. Instalacja
2. Konfiguracja
 2.1. Okres aktualizacji danych
 2.2. Źródła adresu
 2.3. Własna metoda aktualizacji
3. Zakończenie


Dynamic DNS jest usługą pozwalającą przypisanie (czy raczej aktualizację) adresu IP do nazwy. Dzięki temu jeżeli jesteśmy podłączeni do sieci która za każdym razem przydziela inny adres IP, możemy mieć stałą nazwę rutera i nie musimy pamiętać tego adresu. W sieci istnieje wiele serwisów które umożliwiają rejestrację adresu, wystarczy skorzystać z jednego z nich i uruchomić swoje konto. Najpopularniejszy jest serwis dyndns.org oferujący możliwość rejestracji w kilkunastu różnych domenach.

W OpenWrt dostępne jest kilka różnych pakietów realizujących tą funkcję; w OpenWrt oficjalnie używany jest pakiet ddns-scripts. W chwili pisania tego poradnika skrypt obsługiwał aktualizację domen w następujących serwisach:
  • dyndns.org
  • changeip.com
  • zoneedit.com
  • no-ip.com
  • noip.com
  • freedns.afraid.org
  • dnsmax.com
  • thatip.com
  • he.net
  • dnsdynamic.org
  • ovh.com
  • dnsomatic.com
  • 3322.org
  • namecheap.com
  • easydns.com
UWAGA: przed instalacją i konfiguracją pakiety należy najpierw założyć i skonfigurować konto w danym serwisie. W przypadku dyndns.org oznacza to także dodane nazwy hosta którą będziemy aktualizować!
UWAGA2: standardowo polscy operatory komórkowi blokują porty wejściowe, więc nawet przy poprawnym ustawieniu DDNS nie będzie można dostać się do routera/komputera jeżeli połączeniem WAN jest modem 3G. Niektórzy operatorzy oferują odblokowanie portów za dodatkową opłatą.
Instalacja

    # opkg update
    # opkg install ddns-scripts

Konfiguracja
Plik konfiguracyjny umieszczony w /etc/config/ddns. Pierwsza ustawienie to podanie danych niezbędnych do aktualizacji serwisu

    # uci set ddns.myddns.enabled=1
    # uci set ddns.myddns.service_name=dyndns.org
    # uci set ddns.myddns.domain=host.dyndns.org
    # uci set ddns.myddns.password=password
    # uci set ddns.myddns.username=username
    # uci commit ddns

Generalnie to już wystarczy do prawidłowego działania serwisu. Przy każdym uruchomieniu interfejsu wan powinna nastąpić aktualizacja (jeżeli jest wymagana) adresu.
Okres aktualizacji danych
Sam skrypt ddns-scripts ma dużo większą funkcjonalność. Można określić np. częstotliwość aktualizacji

    # uci set ddns.myddns.force_interval=72
    # uci set ddns.myddns.force_unit=hours
    # uci set ddns.myddns.check_interval=10
    # uci set ddns.myddns.check_unit=minutes
    # uci commit ddns

Czyli okres sprawdzania (10 minut) oraz wymuszenie aktualizacji (3 dni) - to są wartości domyślne. Jednostki można podawać w sekundach ("seconds"), minutach ("minutes"), godzinach ("hours") oraz dniach ("day").
UWAGA: Zbyt częsta aktualizacja danych może spowodować zablokowanie konta w serwisie dyndns.org. Domyślne wartości są zwykle właściwe i raczej nie powinno ich się zmieniać.
Źródła adresu
Dostępna jest także metoda pozyskania adresu:
  • z sekcji konfiguracyjnej

    # uci set ddns.myddns.ip_source=network
    # uci set ddns.myddns.ip_network=wan
    # uci commit ddns

To domyślne ustawienia (sekcja wan), właściwe dla większości przypadków. Jeżeli nie znamy nazwy interfejsu sieciowego (np. przy połączeniach ppp) to ta opcja jest właściwa.
  • z interfejsu

    # uci set ddns.myddns.ip_source=interface
    # uci set ddns.myddns.ip_network=eth0.2
    # uci commit ddns

Jawnie określamy nazwę interfejsu sieciowego z którego zostanie pobrany adres ip.
  • ze skryptu

    # uci set ddns.myddns.ip_source=script
    # uci set ddns.myddns.ip_script=/usr/bin/get_my_ip.sh
    # uci commit ddns

W przypadku kiedy żaden z interfejsów sieciowych nie ma właściwego adresu, a można go pozyskać odpowiednim skryptem np. ze strony konfiguracyjnej modemu. Oczywiście odpowiedni skrypt trzeba sobie napisać...
  • z internetu

    # uci set ddns.myddns.ip_source=web
    # uci set ddns.myddns.ip_network=http://www.whatismyip.com/automation/n09230945.asp
    # uci commit ddns

Wykorzystywane w przypadku kiedy jesteśmy za kilkoma natami lub w sieci lokalnej bez wiedzy o adresie ip rutera.
Własna metoda aktualizacji
Skrypt ddns-script posiada predefiowane metody aktualizacji danych dla kilku popularnych serwisów (patrz wyżej). Jeżeli jednak korzystamy z innego serwisu można samodzielnie napisać odpowiednie polecenie, które będzie potrafiło zaktualizować adres. Poniżej przykładowa opcja dla serwisu dyndns:

    # uci set ddns.myddns.update_url="http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
    # uci commit ddns

gdzie USERNAME,PASSWORD,DOMAIN,IP to predefiniowane stałe pobrane z innych zdefiniowanych wcześniej parametrów.
Zakończenie
A tak naprawdę, każdy z w/w serwisów umożliwia aktualizację przez wywołanie odpowiedniego skonstruowanego adresu URL. Więc można wywołanie wget z takim URL umieścić po prostu w cronie.