DNS notas VGB
Notas de instalación de Víctor González Barbone (VGB) 2011-11-21 10:43:34
Instalación
Instalar: bind9, bind9utils (dependencia), bind9-doc (opcional) En tasksel es la tarea dns-server, instala estos paquetes.
Arrancar y detener bind9
Forma actual:
sudo rndc start sudo rndc stop sudo rndc reload rndc
muestra ayuda y opciones. Después de hacer un cambio, deberá darse reload o stop, start.
Monitoreo del proceso de arranque y carga de zonas. Puede monitorarse el proceso abriendo otra terminal y dando el comando
tail -f /var/log/daemon.log
Va mostrando la carga de las zonas y eventuales errores.
Forma anterior ("deprecated"):
sudo /etc/init.d/bind9 { start | stop | restart | reload }
rndc
rndc es un utilitario de control del servidor DNS; se comunica con el servidor de nombres por TCP enviando los comandos autenticados con firma digital. Esta precaución de seguridad puede dar algunos problemas.
ERROR posible: no valida la clave de autenticación
bind9 arranca con la máquina pero no responde a "rndc stop".
cd /etc/bind9 sudo rm rndc.key # si existe, borrarlo sudo rm rndc.conf # si existe, borrarlo sudo rndc-confgen -r /dev/urandom -a
genera la clave, crea el archivo /etc/bind/rndc.key y habilita rndc para controlar el DNS desde la máquina local:
rndc start rndc stop rndc status rndc dumpdb
El dispositivo /dev/urandom es un generador aleatorio; colocar el -r /dev/urandom en el comando rndc-confgen acelera el proceso de generación de las claves.
rndc, generación de claves, administración remota
Crear archivo con clave para manejo seguro.
cd /etc/bind rm rndc.key # si existe, borrarlo rm rndc.conf # si existe, borrarlo rndc-confgen -r /dev/urandom
produce esta salida:
# Start of rndc.conf key "rndc-key" { algorithm hmac-md5; secret "NRhoMuJz483Jh15KY3WD/w=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; }; # End of rndc.conf # Use with the following in named.conf, adjusting the allow list as needed: # key "rndc-key" { # algorithm hmac-md5; # secret "NRhoMuJz483Jh15KY3WD/w=="; # }; # # controls { # inet 127.0.0.1 port 953 # allow { 127.0.0.1; } keys { "rndc-key"; }; # }; # End of named.conf
Creando rndc.conf y cambiando el named.conf como indica funciona.
sudo rndc start
Otras operaciones con rndc:
rndc stop rndc status rndc stat rndc dumpdb
descarga toda la base de datos del DNS.
Para administración remota (desde otra máquina), puede ser necesario colocar la interfaz de acceso de esta máquina: en /etc/bind/named/conf, agregar el IP de esta máquina, por ejemplo 192.168.1.13
controls { inet 127.0.0.1 port 953 allow { 127.0.0.1, 192.168.1.13; } keys { "rndc-key"; };
ERROR de clave, reinstalar
Cuando el procedimiento anterior no funciona se puede probar reinstalar el bind:
- cambiar de nombre el /etc/bind, o borrarlo para que no interfiera.
- Con aptitude, buscar bind9 con ^bind9, marcar para purgar usando la tecla "_" (purgar, borra todo, incluido archivos de configuración), teclas g, g, para ejecutar el borrado.
- buscar de nuevo bin9, marcar para instalar, instalar. Con esto ya empieza a funcionar el DNS.
- colocar o modificar el archivo named.local.conf como corresponda.
- hacer un reload o un restar del DNS, con "rndc reload" o "rndc stop; rndc start", el "rndc restart" puede no estar implementado.
- ver logs con "tail -f /var/log/daemon.log"; se debe ver la carga de las zonas, dice si hay errores.
Crear un servidor de nombres primario
Los archivos de configuración están en /etc/bind. Agregar una zona:
cd /var/cache/bind mkdir nsk # nombre directorio para archivos zona nsk
Crear archivos de configuración de zona:
db.nsk db.192
Ingresar las zonas en el archivo named.conf.local:
// Do any local configuration here // zone "192.in-addr.arpa" { type master; file "/var/cache/bind/nsk/db.192"; }; zone "nsk.com.uy." { type master; file "/var/cache/bind/nsk/db.nsk"; };
Recargar los archivos modificados con
sudo rndc reload
Para colocar la máquina actual como DNS: Editar el archivo /etc/resolv.conf para que diga:
search nsk.com.uy nameserver 127.0.0.1
Pueden agregarse dos líneas más con otros "nameserver ...".
Monitorear arranque y parada, en otra terminal:
tail -f /var/log/daemon.log
muestra en continuado la carga de zonas, mensajes de error, etc. Para terminar de visualizar, Ctrl-C.
Para probar el DNS en la zona: Pedir resolución por nombre y por IP de máquinas de la zona servida por este DNS.
host nautilus host nautilus.nsk.com.uy host 192.168.1.2
Para probar todo el DNS: Instalar paquete dlint.
dlint nsk.com.uy dlint 192.in-addr.arpa
Recorre todas las zonas, da mensajes de error y de lo que encuentra. Requiere un dominio real en Internet, arranca desde los root servers.
Otros comandos de prueba (ver páginas man correspondientes):
$ named-checkconf $ named-checkconf /etc/bind/named.conf $ named-checkconf /etc/bind/named.conf.options $ named-checkconf /etc/bind/named.conf.local $ named-checkzone nsk.com.uy /var/cache/bind/nsk/db.nsk $ named-checkzone 192.in-addr.arpa /var/cache/bind/nsk/db.192 $ named-compilezone -o /tmp/dnsnsk.txt nsk.com.uy /var/cache/bind/nsk/db.nsk $ less /tmp/dnsnsk.txt $ named-compilezone -o /tmp/dns192.txt 192.in-addr.arpa /var/cache/bind/nsk/db.192 $ less /tmp/dns192.txt
Archivos de configuración de zona
; archivo db.nsk para zona nsk.com.uy $TTL 604800 @ IN SOA localhost. root.localhost. ( 5 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. @ IN MX 0 localhost. nautilus IN A 192.168.1.2 lyria IN A 192.168.1.3 hum IN A 192.168.2.3 www IN CNAME nautilus
; archivo db.192 para zona 192.in-addr.arpa $TTL 604800 @ IN SOA localhost. root.localhost. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. 2.1.168 IN PTR nautilus.nsk.com.uy. 3.1.168 IN PTR lyria.nsk.com.uy. 3.2.168 IN PTR hum.nsk.com.uy.
Crear un servidor de nombres secundario
1) Declarar servidor secundario en el servidor DNS primario. En el servidor de nombres primario, nautilus: Agregar en los archivos db.nsk y db.192 la línea:
@ IN NS lyria.nsk.com.uy.
debajo de una línea igual que indica 'NS localhost.'.
sudo rndc reload
para reiniciar el servidor y tomar el nuevo NS. También
sudo /etc/init.d/bind9 reload
2) En el servidor de nombres secundario: Crear directorio para archivos del secundario en /var/cache/bind:
sudo mkdir -p /var/cache/bind/nsk sudo chown root:bind /var/cache/bind/nsk sudo chmod g+ws /var/cache/bind/nsk
Fija dueños y permisos en directorio donde guarda las tablas copiadas del primario.
3) Agregar las zonas en /etc/named.conf.local. El número IP en 'masters' debe ser el IP del servidor primario.
// zonas para servidor de nombres secundario zone "192.in-addr.arpa" { type slave; file "/var/cache/bind/nsk/db.192"; masters { 192.168.1.2; }; }; zone "nsk.com.uy." { type slave; file "/var/cache/bind/nsk/db.nsk"; masters { 192.168.1.2; }; };
Propagar cambios a servidores secundarios: Se hace solo luego al aumentar el número serial en los archivos del servidor primario.
Delegar una zona
Datos del ejemplo:
Dominio: nsk.com.uy Servidor: lyria.nsk.com.uy, 192.168.1.3 Red: 192.168.1.0/24 sobre eth0:0 Ruta: 192.168.3.0 por eth0:0 Subdominio: salatres.nsk.com.uy Servidor: hum.salatres.nsk.com.uy, 192.168.3.1 Red: 192.168.3.0/24 sobre eth0:0 Ruta: 192.168.3.0 por eth0:0
¡Verificar conectividad entre servidores de las zonas!
Dominio nsk.com.uy, en lyria, master
// archivo /etc/bind/named.conf.local ... // zona nsk.com.uy zone "1.168.192.in-addr.arpa" { type master; file "/var/cache/bind/nsk/db.1.168.192"; }; zone "nsk.com.uy." { type master; file "/var/cache/bind/nsk/db.nsk"; }; ...
; archivo db.nsk para zona nsk.com.uy. $TTL 604800 $ORIGIN nsk.com.uy. @ IN SOA ns1.nsk.com.uy. root.nsk.com.uy. ( 100 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns1.nsk.com.uy. @ IN MX 0 ns1.nsk.com.uy. nautilus IN A 192.168.1.2 ns1 IN A 192.168.1.3 www IN CNAME ns1 lyria IN CNAME ns1 ; zona delegada salatres.nsk.com.uy. $ORIGIN salatres.nsk.com.uy. @ IN NS ns3.salatres.nsk.com.uy. ns3.salatres.nsk.com.uy. IN A 192.168.3.13
; archivo db.1.168.192 para zona 1.168.192.in-addr.arpa $TTL 604800 @ IN SOA ns1.nsk.com.uy. root.nsk.com.uy. ( 100 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. 2 IN PTR nautilus.nsk.com.uy. 3 IN PTR ns1.nsk.com.uy.
Verificación:
- indicar localhost en comando host, si no está en /etc/resolv.conf
- nombre sin dominio puede no responder según contenido de /etc/resolv.conf
host lyria localhost host hum localhost host www localhost host 192.168.1.2 localhost host 192.168.1.3 localhost host 192.168.1.13 localhost
Zona salatres.nsk.com.uy en hum, master:
// archivo /etc/bind/named.conf.local ... // zona salatres.nsk.com.uy zone "3.168.192.in-addr.arpa" { type master; file "/var/cache/bind/salatres/db.3.168.192"; }; zone "salatres.nsk.com.uy." { type master; file "/var/cache/bind/salatres/db.salatres"; //allow-transfer { 192.168.3.3; }; };
; archivo /var/cache/bind/db.salatres para zona salatres.nsk.com.uy. $TTL 604800 @ IN SOA ns3.salatres.nsk.com.uy. root.salatres.nsk.com.uy. ( 100 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS ns3.salatres.nsk.com.uy. @ IN MX 0 ns3.salatres.nsk.com.uy. ns3 IN A 192.168.3.13 mya IN A 192.168.3.12 www IN CNAME ns3 hum IN CNAME ns3
; archivo db.3.168.192 para zona 3.168.192.in-addr.arpa $TTL 604800 @ IN SOA ns3.salatres.nsk.com.uy. root.salatres.nsk.com.uy. ( 100 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns3.salatres.nsk.com.uy. 13 IN PTR ns3.salatres.nsk.com.uy. 12 IN PTR mya.salatres.nsk.com.uy.
Verificación:
- poner localhost si no está en /etc/resolv.conf
- nombre sin dominio puede no responder según contenido de /etc/resolv.conf.
host hum.salatres.nsk.com.uy localhost host mya.salatres.nsk.com.uy localhost host 192.168.3.13 localhost host 192.168.3.12 localhost host www.salatres.nsk.com.uy localhost host www localhost