Konfiguracja DDNS (DynDNS, Dynamic DNS)
Ostatnia zmiana: 2021-08-21 10:05

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ę, a oficjalnie używany jest pakiet ddns-scripts. Przedstawione poniżej rozwiązanie przetestowano na OpenWrt 21.02-rc4

Instalacja



    # opkg update
    # opkg install ddns-scripts

Pakiet zawiera domyślne definicje dla określonych serwisów DDNS. Jednakże niektóre serwisy wymagają instalacji dodatkowego pakietu (lista pakietów i ich nazwy zależą od wydania OpenWrt i może być różna):

  • ddns-scripts-cloudflare: serwis cloudflare.com
  • ddns-scripts-cnkuai: serwis cnkuai.cn
  • ddns-scripts-digitalocean: serwis godaddy.com
  • ddns-scripts-freedns: serwis freedns.42.pl
  • ddns-scripts-gandi: serwis gandi.net
  • ddns-scripts-godaddy: serwis godaddy.com
  • ddns-scripts-noip: serwis no-ip.com
  • ddns-scripts-nsupdate: bezpośrednia aktualizacja bind nsupdate
  • ddns-scripts-noip: serwis no-ip.com
  • ddns-scripts-route53: serwis route53

Konfiguracja

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


    # uci set ddns.myddns_ipv4.enabled=1
    # uci set ddns.myddns_ipv4.service_name=<nazwa_serwisu>
    # uci set ddns.myddns_ipv4.domain=<host>.<nazwa_domeny>
    # uci set ddns.myddns_ipv4.password=<password>
    # uci set ddns.myddns_ipv4.username=<username>
    # uci commit ddns

Listę obsługiwanych serwisów można zobaczyć wykonując polecenie:


    # ls /usr/share/ddns/default/

Generalnie to jest wystarczająca ilość danych 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_ipv4.force_interval=72
    # uci set ddns.myddns_ipv4.force_unit=hours
    # uci set ddns.myddns_ipv4.check_interval=30
    # uci set ddns.myddns_ipv4.check_unit=minutes
    # uci commit ddns

Czyli okres sprawdzania (30 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").

Źródła adresu

Dostępna jest także metoda pozyskania adresu:

  • z sekcji konfiguracyjnej


    # uci set ddns.myddns_ipv4.ip_source=network
    # uci set ddns.myddns_ipv4.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_ipv4.ip_source=interface
    # uci set ddns.myddns_ipv4.ip_interface=eth0.2
    # uci commit ddns

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

  • ze skryptu


    # uci set ddns.myddns_ipv4.ip_source=script
    # uci set ddns.myddns_ipv4.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_ipv4.ip_source=web
    # uci set ddns.myddns_ipv4.ip_url='http://checkip.dyndns.com'
    # 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. 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_ipv4.update_url="http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]"
    # uci commit ddns

gdzie USERNAME, PASSWORD, DOMAIN, IP to predefiniowane stałe pobrane ze 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.
Dostępne są logi z działania procesu w pliku /var/log/ddns/myddns_ipv4.log co jest bardzo przydatne do diagnozowania ew. problemów. Jeżeli z jakiegoś powodu chcemy uruchomić ręcznie aktualizację adresu można jawnie wywołać polecenie:


    # /usr/lib/ddns/dynamic_dns_updater.sh -v 1 -S myddns_ipv4 start

Jeżeli używamy innej sekcji konfiguracyjnej to należy zamienić myddns_ipv4 na odpowiednią nazwę.