Jeżeli nie posiadasz statycznego adresu IP w domu, a potrzebujesz dostęp do nich stały dostęp w łatwy sposób możesz osiągnać swój cel posiadając serwer DNS.
Po stronie klienta generujemy klucze:
# zastąp keyname dowolną nazwą dnssec-keygen -a HMAC-MD5 -b 512 -r /dev/urandom -n HOST keyname
Spowoduje to utworzenie plików Kkeyname.***.key i Kkeyname.***.private, z pliku*.private należy skopiować klucz, który będzie wyglądać podobny:
Key: pRP5FapFoJ95JEL06sv4PQ==
Po stronie serwera, należy wyedytować plik konfiguracyjny BIND (np. named.conf or named.conf.local) i dodać:
key "keyname." { algorithm hmac-md5; secret "pRP5FapFoJ95JEL06sv4PQ=="; };
Następnie zezwalamy na aktualizację stref poprzez dodanie do pliku konfiguracyjnego strefy wpis dotyczący allow-update
:
zone "example.com" { type master; file "master/db.example.com"; allow-update { key "keyname."; }; };
Na koniec restartujemy usługę BIND.
Po stronie klienta potrzebujemy czegoś co będzie w stanie wysyłać prośby o aktualizację wpisu dns (np. nsupdate). Poniżej przykładowany scrypt. Należy pamiętać o edycji KEY
oraz SERVER
#!/bin/bash # Script to update DNS zones on a remote server # Copyright © 2005-2007 - Julien Valroff <julien@kirya.net> # Parts of the script Copyright © 2001-2002 - Dag Wieers <dag@wieers.com> KEY="/root/Kkeyname.+157+29630.private" SERVER="ns.domain.com" LOGFILE="/var/log/syslog" PPP_IFACE="ppp0" if [ "$PPP_LOCAL" != '' ]; then if [ "$PPP_IFACE" != "$PPP_IFACE" ]; then echo "$(LANG=C date +'%b %e %X') $(hostname) ddupdate[$$]: ABORTED: Not updating dynamic IP \ address $PPP_LOCAL (already done for $(ip addr show $PPP_IFACE | awk '/inet/ { print $2 }'))" >>$LOGFILE 2>&1 exit 0 fi IPADDR=$PPP_LOCAL sleep 3 else IPADDR=$(ip addr show $PPP_IFACE | awk '/inet/ { print $2 }') fi ( cat <<EOF | nsupdate -k "$KEY" server $SERVER zone example.com update delete example.com. A update add example.com. 60 A $IPADDR update delete mail.example.com. A update add mail.example.com. 60 A $IPADDR send EOF RC=$? if [ $RC != 0 ]; then echo "$(LANG=C date +'%b %e %X') $(hostname) ddupdate[$$]: FAILURE: Updating dynamic IP $IPADDR on $SERVER failed (RC=$RC)" ( echo "Subject: DDNS update failed" echo echo "Updating dynamic IP $IPADDR on $SERVER failed (RC=$RC)" ) | /usr/sbin/sendmail root else echo "$(LANG=C date +'%b %e %X') $(hostname) ddupdate[$$]: SUCCESS: Updating dynamic IP $IPADDR on $SERVER succeeded" fi ) >>$LOGFILE 2>&1 exit $RC