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
Przed instalacją i konfiguracją pakietu należy najpierw założyć i skonfigurować konto w danym serwisie oraz dodać nazwę hosta którego będziemy aktualizować.
Standardowo polscy operatorzy 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 komórkowy (3G/4G/5G). Niektórzy operatorzy oferują odpłatną usługę "publicznego adresu IP" lub "vpn", dzięki której można uzyskać dostęp do routera.
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").
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:
# 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.
# 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.
# 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ć...
# 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ę.