Konfiguracja DDNS (DynDNS, Dynamic DNS)
Ostatnia zmiana: 2015-08-16 11:18

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://ipecho.net/plain
    # 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 predefiniowane 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.

Chaos Calmer

W nowym wydaniu zestaw skryptów wchodzących w skład pakietu ddns-scripts został dość poważnie przebudowany. Zmienił się także plik konfiguracyjny /etc/config/ddns który zwiera nową sekcję konfiguracyjną ddns definiującą ogóle zachowanie skryptów. Ustawienie sekcji konfiguracji service nie zmieniło się zbytnio, zostały dodane opcje use_syslog, use_logfile które odpowiadają na logowanie informacji. Domyślnie więc można znaleźć logi z działania procesu w pliku /var/log/ddns/nazwa_sekcji_konfiguracyjnej.log co jest bardzo przydatne do diagnozowania ew. problemów. Jeżeli z jakiegoś powodu chcemy uruchomić ręcznie aktualizację adresu można posłużyć się jawnym wywołaniem polecenia:


    # /usr/lib/ddns/dynamic_dns_updater.sh nazwa_sekcji_konfiguracyjnej

Przykładowy zawartość konfiguracji dla serwisu no-ip.pl:


    config ddns 'global'
        option date_format '%F %R'
        option log_lines '250'
        option allow_local_ip '0'

    config service 'myddns_ipv4'
        option interface 'wan'
        option ip_source 'web'
        option ip_network 'http://ipecho.net/plain'
        option enabled '1'
        option service_name 'no-ip.pl'
        option domain '<host>.noip.pl'
        option username '<username>'
        option password '<password>'
        option use_syslog '2'
        option use_logfile '1'

Dodatkową zmianą jest wydzielenie osobnych pakietów do aktualizacji niektórych serwisów:

  • ddns-scripts_cloudflare: serwis CloudFire
  • ddns-scripts_no-ip_com: serwis no-ip.com
  • ddns-scripts_nsupdate: bezpośrednia aktualizacja serwerów Bind i PowerDNS
Wymieniony pakiety należy zainstalować jeżeli posługujemy się jednym z wymienionych serwisów.