Creazione di un sistema DDNS con Bind
E' possibile creare un sistema DDNS di aggiornamento dinamico dei nomi DNS con Bind 9.x, usando l'utility nsupdate da linux.
Preparazione del Server
Il server deve essere già configurato e funzionante con la gestione completa di una zona.
Generazione della chiave di aggiornamento
Questa chiave permetterà ai client di aggiornare il nome DNS sul server.
Si genera la chiave per un utente fittizio, usando un indirizzo email fittizio tipo gal-alert@rvmgroup.it:
dnssec-keygen -a HMAC-MD5 -b 512 -n USER gal-alert.rvmgroup.it.
Questo genera due files:
Kgal-alert.rvmgroup.it.+157+31772.key Kgal-alert.rvmgroup.it.+157+31772.private
Queste due chiavi andranno SPOSTATE poi sul client. I files non dovranno essere presenti sul server.
La .key è la chiave pubblica e la .private è quella privata, che per questo tipo di cifratura HMAC-MD5 sono le stesse, e cioè:
Comando per stampare la chiave:
cat Kgal-alert.rvmgroup.it.+157+31772.private | grep Key | cut -b6-
Chiave:
rD3UJquI5r1Rvd9MblnoMCc7uS9ZYgC49Z/fgS0QwGaLBMHgPPdjYZVAIqpZGHAg+NDulKhJ2d5Sf4na+Tkzng==
Configurazione della Zona sul DNS Server
- Creazione del file di configurazione delle chiavi:
cat | sudo tee /etc/bind/ddns-keys.conf > /dev/null <<EOFile
key gal-alert.rvmgroup.it. {
algorithm HMAC-MD5;
secret "rD3UJquI5r1Rvd9MblnoMCc7uS9ZYgC49Z/fgS0QwGaLBMHgPPdjYZVAIqpZGHAg+NDulKhJ2d5Sf4na+Tkzng==";
};
sudo chown root:bind ddns-keys.conf
sudo chmod 640 ddns-keys.conf
- Inclusione del file nella configurazione di bind:
sudoedit /etc/bind/named.conf.local
include "/etc/bind/ddns-keys.conf";
- Riavvio di bind
sudo sudo /etc/init.d/bind9 restart
Configurazione del Client
Installazione delle chiavi
Cancellare le chiavi dal Server e copiarle sul client in /etc/bind/ddns-keys:
sudo mkdir -p /etc/bind/ddns-keys sudo mv Kgal-alert.rvmgroup.it.+157+31772.key /etc/bind/ddns-keys sudo mv Kgal-alert.rvmgroup.it.+157+31772.private /etc/bind/ddns-keys sudo chown root:bind /etc/bind/ddns-keys/* sudo chmod 640 /etc/bind/ddns-keys/*
Configurazione dello script di aggiornamento
Creaiamo lo script che ad ogni collegamento di PPP, aggiorni il nome DNS:
cat | sudo tee /etc/ppp/ip-up.d/05-sendipaddress > /dev/null <<'EOFscript'
#!/bin/sh -e
NAME=$(hostname | cut -b5-)
nsupdate -k /etc/bind/ddns-keys/Kgal-alert.rvmgroup.it.+157+31772.private -v <<EOFile
server ns1.quindicirighe.com
zone quindicirighe.com
update delete ${NAME}.quindicirighe.com. A
update add ${NAME}.quindicirighe.com. 60 A $PPP_LOCAL
show
send
EOFile
EOFscript
chmod +x /etc/ppp/ip-up.d/05-sendipaddress
Provare ad eseguirlo, (NON TRAMITE SUDO PERCHE' NON FUNZIONA, quindi cambiando le permission delle chiavi) e se tutto è corretto, il nome verrà aggiornato al valore indicato:
sudo chmod a+r /etc/bind/ddns-keys/*
PPP_LOCAL=62.11.253.159 /etc/ppp/ip-up.d/05-sendipaddress
Outgoing update query: ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0 ;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 ;; UPDATE SECTION: pv.quindicirighe.com. 0 ANY A pv.quindicirighe.com. 60 IN A 62.11.253.159
Risistemare le permission delle chiavi:
sudo chmod 640 /etc/bind/ddns-keys/*
Testare:
host pv.quindicirighe.com
pv.quindicirighe.com has address 62.11.253.159
- Script di scollegamento
Se esistesse la possibilità di eseguire uno script di PRE-DOWN, si potrebbe fare un delete del nome dns, ma non esiste ...