miércoles, 14 de diciembre de 2016

Actualizaciones dinamicas de DNS mediante DHCP



DNS Dinamico

Es el mecanismo mediante el cual modificamos la información contenida en los ficheros de registros de recursos de las zonas definidas como primarias en un servidor DNS, mientras este se encuentra en ejecución, sin tener que editar ningún fichero de zona.

Mediante este sistema podemos configurar el servidor DNS para que reciba actualizaciones dinámicas que el servidor DHCP le enviará cuando asigne una direccion IP a un cliente.

El cliente informará al servidor DHCP de su cual es su nombre y el servidor DHCP le cede una IP. Por tanto, el servidor DHCP cuenta con la información tanto de la IP como del nombre del equipo cliente, y puede entonces solicitar al sercidor DNS que incluya un registro tipo A que asocie ese nombre con la IP en el dominio de resolucion directa y la IP con el nombre en un registro PTR en la zona de resolución inversa.

Por ejemplo, si el cliente se llama portatil y la IP que le ha sido asignada dinamicamente mediante DHCP es 192.168.100.199 dentro de la red 192.168.100.0/24 y el dominio aulaser.com entonces se deberia añadir un registro de tipo A a la zona de resolucion directa del dominio y un registro de tipo PTR en la zona de resolcion inversa.


En aulaser.com.

portatil IN A 192.168.100.199

En 100.168.192.in-addr.arpa.

199 IN PTR portatil.aulaser.com.

Para que una zona sea dinamica basta con configurar que permite actualizaciones como opcion en la definicion de la zona.

allow-update { }

Si la zona es dinamica estará sufriendo modificaciones, y para asegurarnos que no se pierden cuando queramos realizar nuevas modificaciones manuales en el fichero debemos previamente congelar la zona.

Paso 1. Crear una clave dnssec

Mediante el siguiente comando:

sudo dnssec-keygen -K /etc/bind -a HMAC-MD5 -b 128 -n USER dhcpupdate

opciones:
K - directorio donde guarda los ficheros con las claves
a - algoritmo
b - tamaño en bits
n - tipo de clave
y finalmente el nombre de la clave

Cuando termina nos hará un eco del nombre del fichero .key

Kdhcpupdate.+157+05787.key

Lo abrimos para ver la clave y el token

dhcpupdate. IN KEY 0 3 157 isgrJD32SZV0f0zaWIS7pw==


Paso 2. Configurar BIND

Ahora configuraremos el named.conf de BIND

Añadimos la siguiente entrada

key dhcpupdate {
    algorithm hmac-md5;
    secret "isgrJD32SZV0f0zaWIS7pw==";
    };

Podemos hacerlo desde la opcion DNS Keys en Webmin

Paso 3. Permitir actualizacion a las zonas

En el fichero named.conf.local añadir la opcion

allow-update { dhcpupdate };

dentro de la configuracion de la zona



zone "aulaser.com" {
    type master;
    file "/var/lib/bind/aulaser.com.hosts";
    allow-transfer {
        192.168.100.11;
        };
    allow-update {
        key dhcpupdate;
        };
    };

zone "100.168.192.in-addr.arpa" {
    type master;
    file "/var/lib/bind/192.168.100.rev";
    allow-update {
        key dhcpupdate;
        };
    };

No olvidarse de actualizar la configuracion del servidor

Paso 4. Prueba

Para probar que el servidor DNS permite actualizaciones automaticas de DNS
tenemos el comando

nsupdate

lo usaremos en modo interactivo y le iremos enviando comandos

>server servidor.aulaser.com
>key dhcpupdate isgrJD32SZV0f0zaWIS7pw==
>zone aulaser.com
>update add prueba.aulaser.com. 3600 IN A 192.168.100.199
>send
>zone 100.168.192.in-addr.arpa
>update add 199.100.168.192.in-addr.arpa. 3600 IN PTR prueba.aulaser.com.
>send

Salimos del programa nsupdate  con el commando
>quit

y hacemos un

>dig prueba.aulaser.com

y un

>dig -x 192.168.100.199


Paso 5. Configuración de DHCP

En dhcpd.conf

ddns-update-style interim;
update-static-leases on;

key dhcpupdate {
    secret isgrJD32SZV0f0zaWIS7pw==;
    algorithm hmac-md5;
    }

# Zona de resolucion directa aulaser.com
zone aulaser.com. {
    primary servidor.aulaser.com;
    key dhcpupdate;
    }

# Zona de resolucion inversa de aulaser.com - red 192.168.100.0/24
zone 100.168.192.in-addr.arpa. {
    primary servidor.aulaser.com;
    key dhcpupdate;
    }


# Aula de SER
subnet 192.168.100.0 netmask 255.255.255.0 {
    allow unknown-clients;
    allow client-updates;
    ddns-rev-domainname "in-addr.arpa";
    ddns-domainname "aulaser.com.";
    default-lease-time 60;
    ddns-updates on;
    option domain-name-servers 192.168.100.254;
    option domain-name "aulaser.com";
    option broadcast-address 192.168.100.255;
    option subnet-mask 255.255.255.0;
    option routers 192.168.100.254;
    pool {
        range 192.168.100.101 192.168.100.150;
        }

    }


Los cambios de IP no surtiran efecto inmediato ya que se guardan las resoluciones en cache local de los equipos, para vaciar/limpiar la cache ejecutamos el comando

>sudo systemd-resolve --flush-caches


Fuentes:

http://www.semicomplete.com/articles/dynamic-dns-with-dhcp/#id2255993

https://lani78.com/2012/07/23/make-your-dhcp-server-dynamically-update-your-dns-records-on-ubuntu-12-04-precise-pangolin/

https://lani78.com/2008/08/12/dhcp-server-update-dns-records/

http://www.zytrax.com/books/dns/ch9/dhcp.html

http://www.cyberciti.biz/faq/howto-linux-renew-dhcp-client-ip-address/

https://askubuntu.com/questions/2219/how-do-i-clear-the-dns-cache