DNS

DNS es un servicio básico que ,como ya vimos en el texto "el arbol de 13 raíces", si faltase se liaría una buena en Internet. Para empezar, vamos a ver estas transparencias sobre el servicio: Teoría sobre DNS.

BIND

BIND (Berkeley Internet Name Domain) es el servidor de DNS más comúnmente usado en Internet, especialmente en sistemas Unix, en los cuales es un Estándar de facto.

Los clientes

Cada cliente tiene un resolutor que se encarga de realizar la consulta DNS a la DNS definida en los parámetros de red del equipo. En sistemas Windows podemos definir la DNS primaria y secundaria en el diálogo de configuración de la red. En un sistema GNU/Linux, debemos modificar el archivo resolv.conf ubicado en /etc. Allí escribiremos lo siguiente:

domain mydominio.com nameserver a.b.c.d ;; donde a.b.c.d es la ip de nuestra DNS.

Si estamos en Windows debemos cambiar la configuración de red y agregar también estos datos. Por un lado, indicaremos la DNS en el apartado "servidor DNS preferido" y "alternativo". Para el sufijo DNS, debemos tocar en "opciones avanzadas", pestaña "DNS" (campo "sufijo DNS para esta conexión").

En el servidor DNS

Para poder tener una DNS, necesitamos un servidor GNU/Linux, con los binarios de bind instalados. Para un servidor GNU/Linux basado en Debian, ya sea una Debian o no, debemos hacer lo siguiente:

sudo apt-get update sudo apt-get upgrade sudo apt-get install bind9

Una vez instalado bind9, debemos configurarlo. Los archivos de configuración que tendremos que modificar en el servidor DNS son los siguientes:

/etc/bind/named.conf /etc/bind/named.conf.options /etc/bind/named.conf.local /etc/bind/db.midominio.com /etc/bind/db.192.168.1
NOTA: cambia midominio por el nombre de dominio real

El fichero principal es el llamado named.conf que llama al resto de ellos, y es en éste donde nosotros tomaremos el control creando otros ficheros para establecer nuestra configuración local, por lo que comenzaremos por editar el fichero named.conf. El contenido debe ser el siguiente:

include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default­zones";

En realidad lo que hacemos es distribuir las diferentes configuraciones por diferentes ficheros, para organizar mejor la configuración, y que sea más comprensible (aunque al principio parezca lo contrario).

  • Named.conf.options: contiene la configuración del demonio named.
  • Named.conf.local: contiene la configuración de las zonas.
  • Named.conf.default­zones: contiene la configuración de zonas por defecto, como las raíces o el host local.

En named.conf.local, declararemos la zona directa de nuestro dominio "midominio.com" y su zona inversa (para resolver el nombre de dominio a partir de una IP). Así pues el script de configuración que llamaremos "named.conf.local" debe quedar como sigue:

zone "midominio.com" { type master; file "/etc/bind/db.midominio.com"; }; // Zona inversa DNS zone "192.in­-addr.arpa" { type master; file "/etc/bind/zones/db.192"; };

Como podemos ver, hemos definido el fichero db.midominio.com para escribir en él la configuración de la zona.

Ahora debemos crear estos archivos. Vamos a empezar por /etc/bind/db.midominio.com. Debemos definir en él, tres partes diferenciadas:

  • El TTL (Time to live)
  • El registro SOA (Start Of Authority)
  • Los RR de la zona(Resource Records).

Su contenido debería quedar como lo siguiente:

; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns1.midominio.com. root.localhost. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.midominio.com. @ IN NS ns2.midominio.com. ns1 IN A 192.168.1.250 ns2 IN A 192.168.1.251 @ IN A 192.168.1.250 @ IN MX 10 midominio.com. www IN A 192.168.1.250 ftp IN CNAME www // Cambia las direcciones IP y los nombres para cada una // de las máquinas locales que tengas en la red local. pc1 IN A 192.168.1.10 pc2 IN A 192.168.0.11 pc3 IN A 192.168.0.12

NOTA: El carácter "@" al principio de los RR es equivalente a poner el nombre de la zona (en este caso "midominio.com")

El significado de los parámetros del RR SOA es el siguiente:

  • Absolute TTL: Es el tiempo que el fichero de zona se da por bueno (no caducado). Una vez transcurrido este tiempo, el servidor esclavo debe volver a solicitar la transferencia de zona.
  • SOA: el campo SOA permite la descripción del servidor de nombre de dominio con autoridad en la zona, así como la dirección de correo electrónico del contacto técnico (en donde el carácter "@" es reemplazado por un punto).
  • Serial: es un identificador del archivo, puede tener un valor arbitrario pero se recomienda que tenga la fecha con una estructura AAAA­MM­DD y un consecutivo.
  • Refresh: número de segundos que un servidor de nombres secundario debe esperar para comprobar de nuevo los valores de un registro.
  • Retry: número de segundos que un servidor de nombres secundario debe esperar después de un intento fallido de recuperación de datos del servidor primario.
  • Expire: Cantidad de tiempo que un esclavo debería intentar contactar con el maestro antes de que los datos que contiene caduquen. Indica el tiempo que el servidor DNS puede manejar los datos caducados.
  • Negative Cache TTL: Significa Time To Live y es el número de segundos por defecto que los RR que no especifican su propio ttl, se mantienen activos en los servidores NS caché antes de volver a preguntar su valor real.

En el fichero "named.conf.local" habíamos definimos la zona directa del dominio y su zona inversa. Hemos configurado la zona directa del dominio, por lo que ahora es el turno de la zona inversa. Vamos a crear el fichero /etc/bind/db.192. Su contenido debe quedar como sigue:

; ; BIND reverse data file for local loopback interface ; $TTL 604800 ; Absolute TTL @ IN SOA midominio.com. root.midominio.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.mydominio.com. 250.0.168 IN PTR ns1.mydominio.com.

Y nos queda configurar Bind propiamente dicho, en named.conf.options

options { directory "/var/cache/bind"; forwarders { 1.2.3.4; 1.2.3.4; }; auth­nxdomain no; # conform to RFC1035 listen­on­v6 { any; }; };

Esta es una configuración muy básica. Sin embargo, hay muchas configuraciones adicionales que se pueden hacer.

Práctica 1. Inventa un nombre de dominio y un subdominio. Configura en una máquina virtual un servidor DNS bind9 como servidor primario del dominio. Cubre los siguientes apartados:

  1. Define la zona.
  2. Configura la zona de búsqueda directa, creando al menos un registro de tipo SOA, NS, A y CNAME.
    1. TTL absoluto: 12 horas.
    2. Parámetros del registro SOA:
      • Serial: número que indica año, més, día, hora y minuto.
      • Refresco cada hora
      • Reintentos cada media hora
      • Los datos expiran en un día
      • El TTL por defecto de los RR es de 12 horas.
    3. Utiliza un RR de tipo A para definir el host www que apunta a tu máquina física.
    4. Utiliza un RR de tipo NS para definir al servidor ns1
    5. Utiliza un RR de tipo CNAME para definir el host ssh que apunta a www
  3. Configura la zona de búsqueda inversa, creando un RR de tipo PTR para los host definidos anteriormente, esto es, ns1, www y ssh.
  4. Reinicia BIND. Configura tu máquina para que utilice la DNS que has configurado. Comprueba que las consultas se resuelven correctamente.

Maestros y esclavos

En la terminología informática, se utiliza a menudo los términos "maestro" y "esclavo", o "primario" y "secundario" para describir una filosofía de funcionamiento en la que una entidad tiene la autoridad, mientras que la otra actúa según los designios de la primera. En el caso de DNS, la idea es la siguiente:

  • La DNS primaria es la poseedora de los registros de la zona.
  • La DNS secundaria solicida periódicamente una transferencia de zona de la DNS primaria. Al recibir los registros, los guarda temporalmente, y los vuelve a pedir según lo indicado en los parámetros del registro SOA.
  • Si la DNS primaria cae, la DNS secundaria asumirá el trabajo mientras pueda (hasta que caduquen los registros). Una vez que los registros sean obsoletos, la DNS secundaria no podrá resolver las consultas.
  • El administrador tiene un margen de tiempo (Absolute TTL) para volver a dejar la DNS primaria operativa, antes de los registros de la DNS secundaria queden invalidados.

Plantilla de configuración ejemplo

Lo que voy a presentar a continuación es una configuración modelo para una zona llamada "ejemplo.com", donde participan una DNS primaria y otra secundaria

CASO1: El servidor ns1.ejemplo.com (maestro) hace transferencias de zona a ns2.ejemplo.com (esclavo).

  • ns1.ejemplo.com: 192.168.1.250
  • ns2.ejemplo.com: 192.168.1.251
  • www.ejemplo.com: 192.168.1.2
  • pc.ejemplo.com: 192.168.1.3

SERVIDOR MAESTRO: ns1.ejemplo.com

### ARCHIVO: named.conf.local ### zone "ejemplo.com" { type master; file "/etc/bind/db.ejemplo.com"; }; zone "192.in-­addr.arpa" { type master; file "/etc/bind/db.192.168.1"; };

### ARCHIVO: named.conf.options ### options { directory "/var/cache/bind"; }; forwarders { 80.58.32.33; 80.58.0.33; }; allow-­transfer { 192.168.1.251; }; # Permitir las transferencias de zona al serv. DNS esclavo. auth­nxdomain no; # conform to RFC1035 listen­on­v6 { any; };

### ARCHIVO: db.ejemplo.com ### $TTL 604800 @ IN SOA ns1.ejemplo.com. root.localhost. ( 2 604800 86400 2419200 604800 ) NS ns1.ejemplo.com. NS ns2.ejemplo.com. ns1 IN A 192.168.1.250 ns2 IN A 192.168.1.251 www IN A 192.168.1.2 pc IN A 192.168.1.3
### ARCHIVO: db.192.168 ### $TTL 604800 @ IN SOA ns1.ejemplo.com. root.localhost.( 1 604800 86400 2419200 604800 ) 250.0.168 IN NS ns1.ejemplo.com. 251.0.168 IN NS ns2.ejemplo.com. 2.0.168 IN PTR www.ejemplo.com. 3.0.168 IN PTR pc.ejemplo.com.

SERVIDOR ESCLAVO: ns2.dominio.com

### ARCHIVO: named.conf.local ### zone "ejemplo.com" { type slave; file "sec.ejemplo.com"; masters { 192.168.1.250; }; // IP DEL SERVIDOR PRIMARIO / MAESTRO }; zone "192.in-­addr.arpa" { type slave file "sec.192"; masters { 192.168.1.250;}; };

Para comprobar la transferencia de zona, se puede probar con el suguiente comando ejecutado en el servidor esclavo:

dig @192.168.1.250 ejemplo.com axfr

Si todo es correcto, se realizará la transferencia de zona. Además es conveniente consultar el fichero /var/log/syslog, donde bind vuelca sus logs.

Práctica 2. Con otro compañero que ya haya acabado la actividad 1, inventa un nombre de dominio. Crea una configuración maestro esclavo para un cierto dominio que os inventeis:

  1. Uno de los servidores será el maestro. Se llamará ns1.
    1. Define la zona en named.conf.local.
    2. Crea el fichero de zona.
  2. El otro servidor será esclavo. Se llamará ns2.
    1. Define la zona (como esclavo) en named.conf.local.
  3. Comprueba que se realizan las transferencias de zona. Para ello, puedes ubicarte en el servidor esclavo y ejecutar el comando siguiente:
  4. dig @ip­dns­maestro nombre­dominio axfr
  5. Si todo es correcto, podrás ver los RR volcados en pantalla. En caso contrario, verás "Transfer failed".

Realiza pruebas de resolución de nombres mediante ping empleando uno y otro servidor.

Continuará...

INSTALAR EL SERVIDOR DNS EN WINDOWS SERVER 2008

  1. Inicio\Herramientas Administrativas\Administrador del Servidor
  2. Sobre el menú Funciones hacer clic con el botón derecho, y elegir "añadir función".
  3. Seleccionar la opción DNS y hacer clic en siguiente.
  4. Aceptar la ventana de bienvenida y una vez empiece la instalación, esperar a que la barra de desplazamiento llegue al final.
  5. Una vez terminada la instalación abrir el administrador de DNS: Inicio\Herramientas Administrativas\DNS.
  6. En el panel izquierdo, hacemos clic con el botón derecho sobre el nombre del equipo (WINxxxxx) y elegimos "Configurar un servidor DNS".
  7. Elegir la opción "Crear una zona de búsqueda directa" y siguiente.
  8. Elegir la opción "Este servidor mantiene la zona" y siguiente.
  9. Escribimos el nombre de la zona. Por ejemplo 1asir.com.
  10. Dejar el nombre de archivo de zona por defecto.
  11. Elegir "No admitir actualizaciones dinámicas" y siguiente.
  12. En el diálogo de Reenviadores, elige "Sí, reenviar consultas..." y añadir al menos dos servidores DNS públicos que conozcas y espera a sean validados. Después, siguiente.
  13. Finalizar la instalación.

CONFIGURAR PROPIEDADES DE LA ZONA

  1. En el administrador de DNS, ir hasta la zona creada previamente (DNS\WIN-xxx\Zonas de búsqueda directa\1asir.com)
  2. Hacer clic derecho sobre la etiqueta de zona y elegir "propiedades".
  3. Da un paseo por las diferentes pestañas.

CREACIÓN DE UNA ZONA DE BÚSQUEDA INVERSA

  1. Clic derecho sobre "Zonas de búsqueda inversa", y elegir "Zona nueva".
  2. En el inicio del asistente, Siguiente.
  3. Elegir "Zona principal".
  4. Elegir "Zona de búsqueda inversa para Ipv4".
  5. En Id. de red, escribe el rango de red que necesites. No es necesario rellenar los tres octetos, dependiendo del tamaño de la red.
  6. Aceptamos el nombre sugerido, y siguiente.
  7. No admitimos actualizaciones dinámicas, así que Siguiente.
  8. Finalizar.

CREACIÓN DE RR

Crear un registro A.

  1. En el panel izquierdo, clic derecho sobre la etiqueta de la zona, y elegir "Host nuevo".
  2. Asignarle un nombre y una IP. Marca la opción "Crear registro del puntero (PTR)".
  3. Aceptar.

Crear un registro CNAME

Por ejemplo si el servidor www también es un servidor ftp, crearemos un alias "ftp" que tenga como destino a "www.1asi.com". Es decir, preguntar por ftp.1asi.com es lo mismo que preguntar por www.1asir.com.

  1. En el panel izquierdo, clic derecho sobre la etiqueta de la zona, y elegir "Alias nuevo (CNAME)".
  2. Asígnale un nombre de alias y un FQDN para el host destino.
  3. Registros MX.

CREAR ZONAS SECUNDARIAS.

Para garantizar la disponibilidad, se suele utilizar un servidor DNS secundario (o esclavo) sobre el que se realizan transferencias de zona desde el servidor DNS primario (o maestro). Supongamos el escenario siguiente.

  1. En la zona del servidor DNS primario deben aparecer todos los nombres de servidores DNS autoritativos de la zona (mediante un registro de recurso NS). En primer lugar, definimos un nombre FQDN para el servidor maestro.
    1. Sobre la etiqueta de zona (por ejemplo, 1asir.com) clic derecho.
    2. Host nuevo. Nombre: ns1 y Dirección ip: 192.168.1.2
  2. Dado que el servidor secundario también es un servidor autoritativo, hay que definirlo:
    1. Sobre la etiqueta de zona (por ejemplo, 1asi.com) clic derecho.
    2. Host nuevo. Nombre: ns2 y Dirección ip: 192.168.1.3
  3. Ahora debemos establecer a ns1 y ns2 como servidores de nombres autoritativo de la zona.
    1. Menú Acción\Volver a cargar.
    2. Sobre la etiqueta de zona, clic derecho\Propiedades\Servidores de nombre.
    3. Nombre FQDN: ns1.1asir.com. Hacer clic en resolver.
    4. NOTA: Nos dará un error indicando que tal servidor no es autoritativo en la zona 1asi.com, puesto que aun no hemos creado la zona en dicho servidor. Aceptamos.
    5. Ahora podremos ver en los registros de recurso, los nuevos registros:
    6. Antes seguir debemos recargar la zona para que los nuevos RR se carguen.
    ns1.1asi.com. IN A 192.168.1.2 ns2.1asi.com. IN A 192.168.1.3 @ IN NS ns2.1asi.com. @ IN NS ns1.1asi.com.
  4. Debemos autorizar las transferencias de zona desde el servidor maestro al esclavo.
    1. Sobre la etiqueta de zona, clic derecho\Propiedades\Transferencias de zona.
    2. Debemos marcar "Premitir transferencias de zona". También debemos decir sobre qué servidores permitiremos las transferencias de zona, así que dejamos marcado "Solo a los servidores marcados en la ficha servidores de nombres" (aunque tenemos otras opciones).
  5. Finalmente crearemos la zona en el servidor DNS ns2.1asi.com.
    1. Administrador de DNS\DNS\WIN-xxxx\Zonas de búsqueda directa\clic derecho\Zona nueva.
    2. En la bienvenida, Siguiente.
    3. Tipo de zona: Zona secundaria. Siguiente.
    4. Nombre de zona: 1asir.com.
    5. Servidores maestros DNS: 192.168.1.2. El servidor maestro debe aparecer como validado.
    6. Finalizar.
    7. Si ahora desplegamos la etiqueta de la zona 1asi.com, deberíamos ver todos los registros de recurso definidos en el servidor maestro.

    ALGUNOS COMANDOS ÚTILES:

    dig (desde linux):

    Resolución directa: dig @servidorDNS nombre-a-resolver Resolución inversa: dig @servidorDNS -x ip-a-resolver

    nslookup (desde windows):

    Resolución directa: nslookup nombre-a-resolver servidorDNS Resolución inversa: C:\ nslookup - servidorDNS > set type=PTR > ip-a-resolver (intro)

    Actividad 1.

    1. Configura tu máquina virtual con Server 2008 actue como servidor DNS.
    2. Configura los reenviadores para que utilicen uno o dos servidores DNS público.
    3. Crea la zona de búsqueda directa "tu nombre.info".
    4. Crea la zona de búsqueda inversa "1.168.192.in-addr.arpa"
    5. Crea un RR tipo A para cada máquina de tu mesa.
    6. Crea un RR tipo CNAME dirigido a un nombre ya definido.
    7. Configura tu máquina física para utilice el servidor DNS de tu máquina virtual. Comprueba que puedes hacer ping a los registros definidos. Comprueba también que puedes hacer ping al exterior.

    Actividad 2. Transferencias de zona.

    1. Busca otro compañero del aula que ya haya terminado las actividades iniciales.
    2. Dado el dominio "dominio.com", configura una dns como maestra y otra como esclava.
    3. Comprueba que se están realizando las transferencias de zona, desplegando la etiqueta de zona en el administrador DNS.