Setup del DNS con aggiornamenti dinamici attraverso la configurazione del server DHCP per la propagazione modifiche.
Questa guida è praticamente la traduzione di http://www.semicomplete.com/articles/dynamic-dns-with-dhcp/.
La configurazione si basa su Bind 9 ed ISC DHCPD v3.
DNS dinamico significa la propagazione di nuovi record nel server dns in esecuzione senza l'editing dei file di zona. Spesso è accoppiato con DHCP oer fornire servizi dinamici di rete.
Per impostare il DNS dinamico in modo sicuro è necessario per prima cosa creare una chiave segreta (nel senso di: segreto condiviso). La chiave segreta sarà usata per autenticare i clienti di aggiornamento con il server DNS.
Si utilizza un tool chiamato dnssec-keygen. È necessario indicare un
nome, in questo caso computer:
[root@zion ~]# dnssec-keygen -a hmac-md5 -b 128 -n USER computer Kcomputer.+157+08501 [root@zion ~]# ls Kcomputer.+157+08501.key Kcomputer.+157+08501.private [root@zion ~]# cat Kcomputer.+157+08501.key computer. IN KEY 0 3 157 5Q3sU4X2lq9o14ZOziRyRQ==
Con queste istruzioni si creata un file HMAC-MD5 a 128bit dal nome computer.
L'ultima sequenza in questo file (5Q3sU4X2lq9o14ZOziRyRQ==) è la chiave
segreta.
Nella sezione globale del named.conf è necessario indicare la chiave:
key computer {
algorithm hmac-md5;
secrete "5Q3sU4X2lq9o14ZOziRyRQ==";
};
Inoltre per ogni zona di cui consentire l'aggiornamento bisogna aggiungere uno statement:
allow-update { key computer; };
Ad esempio:
zone "example.com" {
type master
file "master/example.com"
allow-update { key computer; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "master/example.com-rev";
allow-update { key computer; };
};
Esiste un tool che consente di effettuare manualmente
comandi di aggiornamento (o per particolari esigenze di script):
nsupdate.
[root@zion ~]# nsupdate >
sono a disposizione i seguenti comandi:
server server-address | server a cui indirizzare i comandi aggiornamento |
key keyname secret | comunica il secret necessario per l'aggiornamento |
zone zonename | zona da aggiornare |
update … | richiede l'aggiornamento di un record |
send | spedisce gli aggiornamenti da inserire |
show | mostra gli aggiornamenti che non sono stati spediti |
Esempio:
[root@zion ~]# nsupdate > server ns.example.com > key computer 5Q3sU4X2lq9o14ZOziRyRQ== > zone example.com > update add nebuchadnezzar.example.com. 600 IN A 192.168.1.1 > send > zone 1.168.192.in-addr.arpa > update add 1.1.192.168.in-addr.arpa 600 IN PTR nebuchadnezzar.example.com. > send
Se tutto va bene:
[root@zion ~]# host nebuchadnezzar.example.com nebuchadnezzar.example.com has address 192.168.1.1 [root@nzion ~]# host 192.168.1.1 1.1.168.192.in-addr.arpa domain name pointer nebuchadnezzar.example.com
È possibile cancellare il record con nsupdate:
[root@zion ~]# nsupdate > update delete nebuchadnezzar.example.com
Nel caso ci fossero problemi:
| update failed: NOZONE | manca la definizione di zona per l'hostname |
| TSIG error with server | tsig indica il tipo di errore |
| update failed: NOTAU(BADSIG) | la chiave segreta è errata |
| update failed: SEVERFAIL | in genere mancanza di permesso in scrittura sul file |
Una volta che il DNS è configurato è necessario passare al DHCP. Per prima cosa nella parte globale:
ddns-update-style interim; # se ci sono indirizzi fixed-address è necessario utilizzare: update-static-leases on;
Inoltre è necessario informare il dhcp server del segreto condiviso:
key computer {
algorithm hmac-md5;
secrete "5Q3sU4X2lq9o14ZOziRyRQ==";
}
zone 1.168.192.in-addr.arpa {
primary ns.example.com;
key computer;
}
zone example.com {
primary ns.example.com;
key computer;
}
A questo punto:
host logos {
hardware ethernet 01:23:45:67:89:02;
option host-name "logos";
option domain-name "example.com";
ddns-hostname "logos";
ddns-domain-name "example.com";
}
oppure:
group {
option domain-name "example.com";
ddns-domain-name "example.com";
host logos {
hardware ethernet 01:23:45:67:89:02;
option host-name "logos";
ddns-hostname "logos";
}
host vigilant {
hardware ethernet 01:23:45:67:89:03;
option host-name "vigilant";
ddns-hostname "vigilant";
}
}
ed anche:
host pequod {
hardware ethernet 01:23:45:67:89:04;
fixed-address 192.168.1.254;
option host-name "pequod";
option domain-name "example.com";
ddns-hostname "pequod";
ddns-domain-name "example.com";
}