DNS Dinamico con DHCP

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.

Definizione

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.

DNS Dinamico

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.

Creare una chiave dnssec

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.

Modifiche a named.conf

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; };
};

Testing con nsupdate

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

DHCP

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";
  }
Last modified: 2008/08/31 03:23