DHCP com Dynamic DNS Updates

O Dynamic Host Configuration Protocol é o serviço que trata de distribuir endereços IP por um conjunto de hosts.
Como estes IP's mudam frequentemente torna-se importante manter o DNS coerente ou poderiamos ter nomes a apontar para os hosts errados. Como fazemos isso?
Configuramos o servidor de DHCP para fazer essas actualizações no DNS de cada vez que houver alterações nos leases.

Para instalar o servidor de DHCP e DNS:

apt-get install bind9 dhcp3-server

colocar os interfaces relevantes para o servidor de DHCP:

/etc/default/dhcp3-server

INTERFACES="eth0 tap0"

/etc/dhcp3/dhcpd.conf

# activar o DDNS
ddns-updates on;
ddns-update-style interim;
# zona DNS Forward em que vai actualizar os nomes
ddns-domainname "joao.o-meu-dominio.whatever.";
# zona DNS Reverse em que vai actualizar os PTR's
ddns-rev-domainname "in-addr.arpa.";
# Esta linha inibe resposta aos pedidos de actualização DDNS dos clientes, usa-se em zonas inseguras
#ignore client-updates;
# Chave para aceder ao servidor de DNS
include "/etc/dhcp3/rndc.key";
option domain-name "joao.o-meu-dominio.whatever.";
option domain-name-servers 10.0.0.254;
default-lease-time 3600;
max-lease-time 17200;
authoritative;
log-facility local7;
zone joao.o-meu-dominio.whatever. {
primary 127.0.0.1;
key rndc-key;
}
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.10 10.0.0.50;
option routers 10.0.0.254;
option broadcast-address 10.0.0.255;
allow unknown-clients;
filename "pxelinux.0";
next-server 10.0.0.1;
zone 0.0.10.in-addr.arpa. {
primary 127.0.0.1;
key "rndc-key";
}
}
subnet 172.31.0.0 netmask 255.255.255.0 {
range 172.31.0.60 172.31.0.70;
option routers 172.31.0.1;
option broadcast-address 172.31.0.255;
allow unknown-clients;
filename "pxelinux.0";
next-server 172.31.0.254;
zone 0.31.172.in-addr.arpa. {
primary 127.0.0.1;
key "rndc-key";
}
}

Na configuração do bind colocar a linha allow-update { key "rndc-key"; }; nas zonas respectivas:

/etc/bind9/named.conf.local


zone "joao.o-meu-dominio.whatever" {
type master;
file "/etc/bind/db.farm";
allow-update { key "rndc-key"; };
notify yes;
};
zone "0.0.10.in-addr.arpa" {
type master;
file "/etc/bind/db.10.0.0";
allow-update { key "rndc-key"; };
notify yes;
};
zone 0.31.172.in-addr.arpa. {
type master;
file "/etc/bind/db.172.32.0";
allow-update { key "rndc-key"; };
notify yes;
};

Arrancar os serviços e voilá...

/etc/init.d/dhcp3-server start
/etc/init.d/bind9 start