====== 207.2 Create and maintain DNS zones ====== Pertenece a [[informatica:certificaciones:lpic:lpic-2:207_domain_name_server|Topic 207: Domain Name Server]] * **Weight**: 3 * **Description**: Candidates should be able to create a zone file for a forward or reverse zone and hints for root level servers. This objective includes setting appropriate values for records, adding hosts in zones and adding zones to the DNS. A candidate should also be able to delegate zones to another DNS server. * **Key Knowledge Areas**: * BIND 9 configuration files, terms and utilities * Utilities to request information from the DNS server * Layout, content and file location of the BIND zone files * Various methods to add a new host in the zone files, including reverse zones * **Terms and Utilities**: * ''/var/named/'' * zone file syntax * resource record formats * named-checkzone * named-compilezone * masterfile-format * ''dig'' * ''nslookup'' * ''host'' ===== Creación de un Fichero de Zona Directa ===== Suelen ubicarse en los directorio ''/var/named'' o ''/etc/bind'' Su nomenclatura suele ser: ''db.nombrezona'' $TTL ttl nombrezona IN SOA servidor mailadmin ( serial refresh retry expire negative ) nombrezona IN NS servidor ^ Parámetro ^ Descripción ^ | ''ttl'' | //Time To Live// (tiempo de vida): indica la duración en segundos que se conservarán los datos en memoria caché. Este valor se precede por la directiva ''$TTL''. | | ''nombrezona'' | FQDN de la zona administrada en este archivo. A menudo reemplazado por una arroba (@) para aligerar el archivo. Atención, como se trata de un FQDN, el nombre de la zona debe acabar con un punto. | | ''IN'' | Obsoleto a la vez que actual: clase Internet (no hay otra clase que se pueda usar). | | ''SOA'' | //Start Of Authority//. Registro obligatorio para indicar que este servidor es legítimo en esta zona. | | ''servidor'' | FQDN del servidor que tiene autoridad en la zona. | | ''mailadmin'' | Dirección de correo del administrador del servidor. La arroba es un carácter reservado en los archivos de zona, convencionalmente se reemplaza por un punto. ''admin@midominio.es'' pasaría a ser entonces ''admin.midominio.es''. | | ''serial'' | Valor numérico. Número de serie del archivo. Útil cuando la zona se replica en otros servidores para saber si los datos han cambiado y si debe hacerse la réplica. | | ''refresh'' | Valor numérico. Utilizado cuando la zona se replica. Indica al servidor esclavo con qué intervalo comprobar la validez de su zona. | | ''retry'' | Valor numérico. Utilizado cuando la zona se replica. Si es imposible para el servidor esclavo contactar con el servidor maestro, indica cuánto esperar antes de volverlo a intentar. | | ''expire'' | Valor numérico. Utilizado cuando la zona se replica. Si es imposible para el servidor esclavo contactar con el servidor maestro, indica con cuánto tiempo los registros sin refrescar pierden su validez y deben dejarse de usar. | | ''negative'' | Valor numérico. Indica cuánto tiempo el servidor debe conservar en caché una respuesta negativa. | | ''NS'' | Registro que indica cuál es el servidor de nombres para esta zona. | ==== Ejemplo ==== ''/var/named/db.midominio.com'': linux.midominio.com. IN A 192.168.100.102 servidor1 IN CNAME alfa.midominio.com. ===== Creación de un Fichero de Zona Inversa ===== El fichero de zona inversa tiene la misma estructura que el de la zona directa. Su nombre se forma con los bytes de la parte de red de la dirección IP ordenados en sentido inverso + ''.in-addr.arpa'', por ejemplo, ''10.168.192.in-addr.arpa'' $TTL ttl nombrezonainv IN SOA servidor mailadmin ( serial refresh retry expire negative ) nombrezonainv IN NS servidor ==== Ejemplo ==== ''/var/named/100.168.192.in-addr.arpa'': 101 IN PTR linux.midominio.com. 102 IN PTR alfa.midominio.com. ===== Campos de la Cabecera de los Ficheros de Zona ===== ^ Campo ^ Descripción ^ | **ttl** | (Time To Live) Indica la duración en segundos que se conservarán los datos en memoria caché. | | **nombrezona** | FQDN (//fully qualified domain name//) de la zona administrada. Debe terminar con un punto. | | **IN** | Clase Internet | | **SOA** | //Start Of Authority//. Registro obligatorio para indicar que este servidor es legítimo en esta zona. | | **servidor** | FQDN del servidor que tiene autoridad en la zona. | | **mailadmin** | Dirección de correo del administrador del servidor. La arroba es un carácter reservado en los archivos de zona, convencionalmente se reemplaza por un punto. | | **serial** | Número de serie del archivo. Útil cuando la zona se replica en otros servidores para saber si los datos han cambiado y si debe hacerse la réplica. | | **refresh** | Utilizado cuando la zona se replica. Indica al servidor esclavo con qué intervalo comprobar la validez de su zona. | | **retry** | Utilizado cuando la zona se replica. Si es imposible para el servidor esclavo contactar con el servidor maestro, indica cuánto esperar antes de volver a intentarlo | | **expire** | Utilizado cuando la zona se replica. Si es imposible para el servidor esclavo contactar con el servidor maestro, indica con cuánto tiempo los registros sin refrescar pierden su validez y deben dejar de usarse. | **negative** | Indica cuánto tiempo el servidor debe conservar en caché una respuesta negativa | ===== Creación de Registros de Zona ===== Una vez que los ficheros de zona se han creado, basta con añadir tantos registros de recursos como se desee, a razón de uno por línea. ==== Fichero de Zona directa ==== Estructura: ; nombre IN TipoRR valor_resuelto www IN A 192.168.3.43 Ejemplo para el fichero de zona directa ''db.micasa'' (a partir de una copia de ''db.local''): $TTL 604800 @ IN SOA micasa.local. webmaster.micasa.local. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL # Servidor DNS del dominio @ IN NS debian10.micasa.local. @ IN A 192.168.1.135 debian10 IN A 192.168.1.135 ==== Fichero de Zona inversa ==== Estructura de los registros de la zona inversa: ; direccion_host IN PTR nombre 43 IN PTR www Ejemplo para el fichero de zona inversa ''db.192.168.1'' (a partir de una copia de ''db.127''): $TTL 604800 @ IN SOA micasa.local. webmaster.micasa.local. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; # Servidor DNS del dominio @ IN NS debian10.micasa.local. # Registro PTR 135 IN PTR debian10 Faltaría definir la zona inversa en ''named.conf.miszonas'': zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.192.168.1; }; ===== Declaración de una Zona Principal ===== Se denomina **zona principal** a la zona declarada en un servidor de tipo **master**. Para realizar la declaración de una zona principal debemos incluir la siguiente configuración en el fichero ''named.conf'': zone "nombrezona" { type master; file "archivo"; }; * ''nombrezona'': El FQDN de la zona gestionada por el servidor. * ''type master'': Determina que se trata de una zona maestra que se debe sincronizar con posibles servidores esclavos. * ''archivo'': Ruta absoluta del archivo que se debe leer para conocer todos los elementos propios de la zona (configuración, RR, etc.). Para poder organizar todo mejor, podemos crear las zonas principales en ''named.conf.miszonas'' y luego hacer referencia a ese fichero desde ''named.conf'': include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/named.conf.miszonas" De esta manera, nuestro fichero ''named.conf.miszonas'' podría ser: zone "micasa.local" { type master; file "/etc/bind/db.micasa"; }; ===== Declaración de una Zona Secundaria ===== Una zona DNS no debería depender de un único servidor y por ello es frecuente crear un segundo servidor de zonas secundarias, estrictamente idénticas a las zonas primarias y sincronizadas a intervalos regulares. Se denomina **zona secundaria** a la zona declarada en un servidor de tipo **slave**. Para realizar la declaración de una zona secundaria debemos incluir la siguiente configuración en el fichero ''named.conf'': zone "nombrezona" { type slave; masters { direccion_maestro; }; file "archivo"; }; * ''nombrezona'': El FQDN de la zona gestionada por el servidor. * ''type slave'': Determina que se trata de una zona esclava que se tendrá que sincronizar desde un servidor maestro. * ''direccion_maestro'': Dirección IP del servidor autoritario. * ''archivo'': Ruta absoluta al archivo en el que se almacenan los elementos sincronizados. La cuenta de servicio debe tener los permisos de escritura habilitados en el directorio de trabajo. ===== Ejemplo declaraciones zona directa e inversa ===== En el archivo ''named.conf'': // // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; zone "midominio.com" { type master; file "/etc/bind/db.midominio.com"; }; zone "100.168.192.in-addr.arpa" { type master; file "/etc/bind/db.192.168.100"; }; ===== Delegación de zona ===== A la hora de crear un subdominio, podemos hacerlo de 2 formas: incluyendolo en la zona o creando una zona delegada. Esta segunda manera nos permitirá administrar el subdominio como una zona separada. El dominio principal deberá delegar el dns del subdominio. Por ejemplo, en el archivo de zona padre: zona_hija IN NS dns_hijo dns_hijo IN A D.C.B.A * ''zona_hija'': Nombre simple de la zona hija. * ''IN'': Obsoleto pero obligatorio: clase Internet. * ''NS'': Este registro es de tipo Name Server (servidor de nombres). * ''dns_hijo'': Nombre del servidor DNS que administra la zona hija. * ''A'': Es un registro de tipo A. * ''D.C.B.A'': Dirección IP del servidor de nombres para la zona hija. ===== Actualización de la Configuración ===== Siempre que realicemos cualquier cambio en los ficheros de configuración de las zonas, debemos reiniciar el servicio o recargar la configuración de las zonas, para que se apliquen los cambios. Dos opciones: * Reinicio de servicio: ''/etc/init.d/bind9 restart'' * Recarga de una nueva zona: ''rndc reload midominio.es'' ===== Comprobar la configuración de una zona ===== La herramienta ''named-checkzone'' nos permite comprobar si hay errores de sintaxis con las zonas: Fichero de resolución directa: named-checkzone micasa.local /etc/bind/db.micasa Fichero de resolución inversa: named-checkzone micasa.local /etc/bind/db.192.168.1 ===== Herramientas de Comprobación ===== ==== ping ==== Aunque no es su función principal, ''ping'' se puede usar como prueba rudimentaria para la resolución de nombres. En ese caso, se limitará a comprobar la respuesta de los servidores por defecto, que se informan en ''/etc/resolv.conf''. Cuando se utiliza ping para comprobar la resolución de nombres, es la traducción de la dirección lo que importa, no la respuesta ICMP de la máquina remota: donald:/etc/bind# ping donald.formacion.es PING donald.formacion.es (192.168.1.1) 56(84) bytes 64 bytes from donald.formacion.es (192.168.1.1): icmp 64 bytes from donald.formacion.es (192.168.1.1): icmp 64 bytes from donald.formacion.es (192.168.1.1): icmp ==== nslookup ==== * Suele utilizarse en modo interactivo. * Los servidores consultados por defecto son los especificados en el fichero ''/etc/resolv.conf''. * Por defecto, se realizan consultas tipo A nslookup En la sesión interactiva le preguntamos por un dominio: > google.com Server: 172.21.40.178 Address: 172.21.40.178#53 Non-authoritative answer: Name: google.com Address: 142.250.184.174 Name: google.com Address: 2a00:1450:4003:80c::200e Si queremos especificarle a ''nslookup'' dónde debe realizar las consultas, durante la sesión interactiva lo indicamos con ''server'': > server 192.168.1.135 Default server: 192.168.1.145 Address: 192.168.1.135#53 Ahora podemos preguntarle de nuevo: > debian10.micasa.local Server: 192.168.1.135 Address: 192.168.1.135#53 Name: debian10.micasa.local Address: 192.168.1.135 nslookup se puede usar para todo tipo de registros comunes (en este caso MX): donald:/etc/bind# nslookup > set type=MX > marte.org Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: marte.org mail exchanger = mail.marte.org (...) ==== dig ==== Herramienta de consulta y diagnóstico de servidores DNS. Sintaxis: dig nombre * ''nombre'': El nombre completo (FQDN) del que se quiere obtener la resolución. Si queremos indicar el servidor DNS al que hacer consultas: dig @A.B.C.D nombre TIPO * ''nombre'': El nombre completo (FQDN) del que se quiere obtener la resolución. * ''@A.B.C.D'': La dirección IP del servidor DNS al que se consultará. En caso de omisión, se consultarán los servidores a los que se hace referencia en ''/etc/resolv.conf''. * ''TIPO'': Por defecto, ''dig'' realiza consultas de tipo ''A'' (resolución normal de nombres con direcciones IPv4). Si se usa el parámetro ''TIPO'', permite definir otros tipos de búsqueda con el objetivo de saber, por ejemplo, los servidores de nombres o de correo asociados a una zona. Ejemplo: dig @8.8.8.8 facebook.com MX tempwin@vmi282687:~$ dig @8.8.8.8 facebook.com MX ; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @8.8.8.8 facebook.com MX ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61194 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;facebook.com. IN MX ;; ANSWER SECTION: facebook.com. 1538 IN MX 10 smtpin.vvv.facebook.com. ;; Query time: 17 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mon Apr 12 11:47:32 CEST 2021 ;; MSG SIZE rcvd: 68 Para sacar información de todo tipo de registros: ''dig dominio ANY'' ==== host ==== Herramienta sencilla para realizar peticiones DNS. host nombre host –t TIPO nombre A.B.C.D * ''nombre'': Nombre del host a resolver. Se puede tratar de un FQDN o de un nombre simple que se completará con el sufijo de búsqueda si se ha definido en ''/etc/resolv.conf''. * ''A.B.C.D'': Indicamos la IP del servidor DNS a consultar. Si este elemento no se informa, serán los servidores en ''/etc/resolv.conf'' los que se utilizarán. * ''TIPO'': Indicamos el tipo de consulta a realizar host –t MX facebook.com 8.8.8.8 Using domain server: Name: 8.8.8.8 Address: 8.8.8.8#53 Aliases: facebook.com mail is handled by 10 smtpin.vvv.facebook.com.