DNS dinámico (DDNS) y DHCP en ubuntu

Características del montaje

Vamos a utilizar un equipo que va a actuar como servidor DHCP y DNS, por lo que la comunicación entre estos dos servicios será a través de localhost. Configuraremos inicialmente DNS con RNDC, para la sincronización entre los dos servicios a través del puerto 953/tcp.

Utilizaremos el dominio de pruebas “patagonia.es” y el segmento 192.168.1.0 para la red local de direcciones privadas.
Software utilizado

* Distribución: Ubuntu Server 8.10
* Servidor DNS: Bind 9
* Servidor DHCP: Dhcp3-server

Instalar el servidor DNS (Bind9)

aptitude install bind9

El directorio /etc/bind/ contiene los siguientes ficheros:

-rw-r--r-- 1 root root  237 oct  7 23:47 db.0
-rw-r--r-- 1 root root  271 oct  7 23:47 db.127
-rw-r--r-- 1 root root  237 oct  7 23:47 db.255
-rw-r--r-- 1 root root  353 oct  7 23:47 db.empty
-rw-r--r-- 1 root root  270 oct  7 23:47 db.local
-rw-r--r-- 1 root root 2878 oct  7 23:47 db.root
-rw-r--r-- 1 root bind  907 oct  7 23:47 named.conf
-rw-r--r-- 1 root bind  165 oct  7 23:47 named.conf.local
-rw-r--r-- 1 root bind  572 oct  7 23:47 named.conf.options
-rw-r----- 1 bind bind   77 nov 13 13:57 rndc.key
-rw-r--r-- 1 root root 1317 oct  7 23:47 zones.rfc1918

Los ficheros named.conf.* eran originalmente sólo uno, ahora se modifican principalmente named.conf.options y named.conf.local, para incluir respectivamente las opciones de bind y la definición de las zonas locales.

El fichero rndc.key contiene una clave para el rndc, que será muy importante en la sincronización con el servidor DHCP.

Habrá que cambiar los permisos del fichero rndc.key con la siguiente instrucción:

chmod o+r rndc.key

Y nos quedaría como:

-rw-r--r-- 1 bind bind   77 2008-12-20 20:44 rndc.key

O nos daría el error siguiente:

Can't open /etc/bind/rndc.key: Permission denied

Y añadir el usuario dhcpd al grupo bind, con la siguiente orden:

adduser dhcpd bind

Los ficheros a configurar serían:

  1. /etc/bind/named.conf
  2. /etc/bind/named.conf.local
Fichero named.conf

Añadimos lo siguiente al fichero:

controls {
        inet 127.0.0.1 allow{localhost;} keys {"rndc-key";};
};

Fichero named.conf.local

Supongamos que queremos resolver las direcciones de nuestra red local, y que pertenecen al dominio patagonia.es. Para ello editamos el fichero named.conf.local que inicialmente sólo tiene algunas líneas comentadas e incluimos las siguientes entradas:

zone "patagonia.es" {
        type master;
        file "/etc/bind/db.patagonia";
        allow-update {key "rndc-key";};
        notify yes;
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168.1";
        allow-update {key "rndc-key";};
        notify yes;
};

include "/etc/bind/rndc.key";

Es decir, crearemos dos ficheros que incluirán las entradas para la resolución directa (db.patagonia) e inversa (db.192.168.1), además se incluye la directiva “allow-update” para que puedan actualizarse las entradas DNS a través de rndc y se indica el nombre de la clave.

Los ficheros db.patagonia y db.192.168.1 se deben crear en el directorio /etc/bind como indicamos con la directiva file.

Y su contenido podría ser (incluyendo sólo el propio servidor DNS de forma estática, ya que estará fuera del rango de direcciones IP que reparte el servidor DHCP):

db.patagonia

$ORIGIN patagonia.es.
$TTL 86400 ; 1 day
@       IN      SOA     ushuaia   postmaster (
        200811132 ; serial
        21600 ; refresh (6 hours)
        3600 ; retry (1 hour)
        604800 ; expire (1 week)
        21600 ; minimum (6 hours)
)
            NS      ushuaia.
ushuaia   A       192.168.1.2

db.192.168.1

$ORIGIN 1.168.192.in-addr.arpa.
$TTL 86400 ; 1 day
@       IN      SOA     ushuaia   postmaster (
        200811131 ; serial
        21600 ; refresh (6 hours)
        3600 ; retry (1 hour)
        604800 ; expire (1 week)
        21600 ; minimum (6 hours)
)
        NS      ushuaia.patagonia.es.
2     PTR     ushuaia.patagonia.es.

Prueba de funcionamiento del servidor DNS

Utilizando algún cliente DNS (preferentemente dig), haremos consultas al servidor DNS local y comprobaremos si responde correctamente, por ejemplo:

root@ushuaia:~# dig @127.0.0.1 ushuaia.patagonia.es

; <<>> DiG 9.5.0-P2 <<>> @127.0.0.1 ushuaia.patagonia.es
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37674
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;ushuaia.patagonia.es.          IN      A

;; ANSWER SECTION:
ushuaia.patagonia.es.   604800  IN      A       192.168.1.2

;; AUTHORITY SECTION:
patagonia.es.           604800  IN      NS      ushuaia.patagonia.es.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Dec 20 22:02:54 2008
;; MSG SIZE  rcvd: 68

Instalar el servidor DHCP (dhcp3-server)
aptitude install dhcp3-server

No se inicia y nos indica que busquemos el motivo en syslog, editamos el fichero /var/log/syslog y encontramos la línea:

dhcpd: Not configured to listen on any interfaces!

Editamos el fichero /etc/default/dhcp3-server y suponiendo que este equipo debe ofrecer las direcciones IP a la red a la que está conectado por la interfaz eth0, ponemos:

INTERFACES="eth0"

Además editamos el fichero /etc/dhcp3/dhcpd.conf que debe ser como sigue:

server-identifier       ushuaia;
ddns-updates            on;
ddns-update-style       interim;
ddns-domainname         "patagonia.es.";
ddns-rev-domainname     "in-addr.arpa.";
ignore                  client-updates;

include                 "/etc/bind/rndc.key";

zone patagonia.es. {
        primary 127.0.0.1;
        key rndc-key;
}

option domain-name              "patagonia.es.";
option domain-name-servers      192.168.1.2, 192.168.1.1;
option ntp-servers              192.168.1.2;
option ip-forwarding            off;

default-lease-time              600;
max-lease-time                  7200;
authoritative;

log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.200;
        option broadcast-address 192.168.1.255;
        option routers  192.168.1.2;
        allow           unknown-clients;

        zone 1.168.192.in-addr.arpa. {
                primary 192.168.1.2;
                key "rndc-key";
        }

        zone localdomain. {
                primary 192.168.1.2;
                key "rndc-key";
        }
}

host impresora {
  hardware ethernet 00:11:85:d2:5c:c6;
  fixed-address 192.168.1.33;
}

Como vemos, reservamos la IP para la impresora.

Puesta en marcha

Lo primero que haremos será parar ambos servidores y vaciar los ficheros de peticiones dhcp que se pudiesen haber generado:

/etc/init.d/bind9 stop
/etc/init.d/dhcp3-server stop
echo "" > /var/lib/dhcp3/dhcpd.leases
echo "" > /var/lib/dhcp3/dhcpd.leases~

Ponemos en marcha de nuevo los dos servidores y realizamos una petición DHCP desde un cliente de la red, y si todo va bien se generarán en el fichero de trabajo del bind (etc/bind/) dos nuevos ficheros, db.patagonia.jnl y db.192.168.1.jnl.
Ahora si hacemos desde el servidor, un nslookup a dicho cliente nos debe aparecer algo así:

root@ushuaia:/etc/bind# nslookup 192.168.1.102
Server:         127.0.0.1
Address:        127.0.0.1#53

102.1.168.192.in-addr.arpa      name = yamana.patagonia.es.

Y de forma inversa:

root@ushuaia:/etc/bind# nslookup yamana.patagonia.es
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   yamana.patagonia.es
Address: 192.168.1.102


Comentarios

Add a New Comment
or Sign in as Wikidot user
(will not be published)
- +
Referencias

http://www.debian-administration.org/articles/343
http://albertomolina.wordpress.com/2008/11/14/dns-dinamico/

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License