--- author: Daniel A. Rodriguez date: 2021-09-07 --- # Instalar Bind Configurar un servidor de sistema de nombres de dominio (DNS) es una tarea crucial para los administradores de sistemas. BIND es una de las soluciones de software DNS más utilizadas, conocida por su fiabilidad y flexibilidad. Este artículo describe el proceso de configuración de un servidor BIND en Debian, proporcionándole instrucciones detalladas, consejos para la resolución de problemas y mejores prácticas para garantizar una instalación y configuración sin problemas. ## 1. Instalación Actualizar las listas de paquetes del sistema para asegurarse de que está instalando las últimas versiones: ```bash apt update ``` Instalar los paquetes BIND, las utilidades y las herramientas de búsqueda DNS. ```bash apt install bind9 bind9utils dnsutils ``` Verificar la instalación ```bash named -v ``` ## 2. Archivos de configuración BIND utiliza varios archivos de configuración ubicados en `/etc/bind/`. *named.conf* es el archivo de configuración principal que incluye otros archivos de configuración *named.conf.options* contiene opciones globales para el servidor DNS *named.conf.local* aqui se definen los archivos de zona locales ## 3. Opciones de configuración ### Configuración de los reenviadores ```bash nano /etc/bind/named.conf.options ``` Añada la siguiente configuración: ```bash options { directory "/var/cache/bind"; recursion yes; allow-recursion { trusted; }; listen-on { 192.168.1.10; }; allow-transfer { none; }; forwarders { 8.8.8.8; 8.8.4.4; }; dnssec-validation auto; auth-nxdomain no; # conforme a RFC1035 listen-on-v6 { any; }; }; ``` Esta configuración establece reenviadores (utilizando los servidores DNS de Google), habilita la recursividad para clientes de confianza y configura interfaces de escucha. ### Definición de listas de control de acceso (ACL) Para restringir las consultas a redes de confianza, añada una ACL al principio del archivo named.conf.options: ```bash acl "trusted" { 192.168.1.0/24; localhost; localnets; }; ``` ## 4. Configuración de zonas Configure las zonas directa e inversa para su dominio. ### Configuración de la zona directa Agregue la siguiente definición de zona: ```bash zone "dominio.edu.ar" { type master; file "/etc/bind/zones/db.dominio.edu.ar"; allow-transfer { none; }; }; ``` Para mantener la configuración ordenada, cree un nuevo directorio para los archivos de zona: ```bash mkdir /etc/bind/zones ``` Cree el archivo de zona directa: ```bash nano /etc/bind/zones/db.dominio.edu.ar ``` Agregue el siguiente contenido: ```bash $TTL 604800 @ IN SOA ns1.dominio.edu.ar. admin.dominio.edu.ar. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.dominio.edu.ar. @ IN A 192.168.1.10 ns1 IN A 192.168.1.10 www IN A 192.168.1.10 ``` ### Configuración de la zona inversa Añada la zona inversa a named.conf.local: ```bash zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/zones/db.192.168.1"; allow transfer { none; }; }; ``` Cree el archivo de zona inversa ```bash nano /etc/bind/zones/db.192.168.1 ``` Agregue el siguiente contenido: ```bash $TTL 604800 @ IN SOA ns1.dominio.edu.ar. admin.dominio.edu.ar. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative cache TTL ; @ IN NS ns1.ejemplo.com. 10 IN PTR ns1.ejemplo.com. 10 IN PTR www.dominio.edu.ar. ``` ## 5. Prueba de la configuración Antes de reiniciar el servicio BIND, es fundamental comprobar que no haya errores de configuración. ### Comprobación de sintaxis ```bash named-checkconf ``` Si no ve nada es que no hay errores. ### Validación del archivo de zona ```bash named-checkzone dominio.edu.ar /etc/bind/zones/db.dominio.edu.ar named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1 ``` Estos comandos deberían devolver «OK» si los archivos de zona tienen el formato correcto. ## 6. Iniciar y habilitar BIND Ahora que ha configurado BIND, inicirá el servicio y lo habilitará para que se inicie al arrancar el sistema. ```bash systemctl start bind9 systemctl enable bind9 ``` Comprobar el estado de BIND ```bash systemctl status bind9 ``` Asegúrese de que el servicio está activo y funcionando sin errores. ## 7. Probar la resolución DNS ### Usando el comando dig Probar la búsqueda directa: ```bash dig @192.168.1.10 www.dominio.edu.ar ``` Probar la búsqueda inversa: ```bash dig @192.168.1.10 -x 192.168.1.10 ``` ### Usanodo el comando nslookup Prueba de búsqueda directa: ```bash nslookup www.dominio.edu.ar 192.168.1.10 ``` Prueba de búsqueda inversa: ```bash nslookup 192.168.1.10 192.168.1.10 ``` ## Solución de problemas comunes Incluso con una configuración cuidadosa, es posible que surjan algunos problemas. ### El servicio BIND no se inicia Si BIND no se inicia, revise los registros del sistema: ```bash journalctl -u bind9 ``` Busque mensajes de error que puedan indicar problemas de configuración. ### Error en la resolución de nombres Si la resolución de nombres no funciona: * Verifique que su cliente esté utilizando el servidor DNS correcto. * Compruebe la configuración del firewall para asegurarse de que el puerto 53 (TCP y UDP) esté abierto. * Revise los archivos de zona en busca de errores tipográficos o direcciones IP incorrectas. ### Fallo en las transferencias de zona Si tiene problemas con las transferencias de zona: * Compruebe la directiva allow-transfer en la configuración de su zona. * Verifique que la IP del servidor DNS secundario esté correctamente indicada. * Asegúrese de que el número de serie del registro SOA se haya incrementado después de los cambios. ## Consideraciones de seguridad Proteger su servidor BIND resulta esencial para garantizar la seguridad de la infraestructura DNS y prevenir posibles ataques que puedan comprometer la integridad, disponibilidad o confidencialidad de los servicios de red. ### Implemente DNSSEC DNSSEC añade una capa adicional de seguridad mediante la firma digital de los registros DNS. Visite el artículo dedicado a [habilitar DNSSEC](/bind/dnssec.md) ### Restringir las transferencias de zona Limite las transferencias de zona solo a los servidores DNS secundarios autorizados: ```bash allow-transfer { 192.168.1.11; }; ``` ### Utilizar listas de control de acceso Implemente ACL para restringir el acceso a las consultas solo a clientes de confianza. ### Optimizar el rendimiento de BIND Ajuste el tamaño de la caché en función de la memoria disponible de su servidor para garantizar el rendimiento óptimo: ```bash options { ... max-cache-size 256M; ... }; ``` ### Habilite el registro de consultas Habilite el registro de consultas con el fin de facilitar la resolución de problemas, analizar el comportamiento del servidor y supervisar el rendimiento general del sistema DNS. ```bash logging { channel query_logging { file "/var/log/named/query.log" versions 3 size 5m; print-time yes; }; category queries { query_logging; }; }; ``` Si la ruta `/var/log/named/` no existe, deberá crearla y asignar los permisos al usuario con el cual se ejecuta bind. ```bash mkdir /var/log/named/ chgrp bind /var/log/named/ -R ``` Bind no crea automáticamente los archivos de log, así que debemos encargarnos de ello. Además de cerciorarnos que tenga el propietario y los permisos adecuados. ```bash touch /var/log/named/query.log chmod 664 /var/log/named/query.log chgrp bind /var/log/named/query.log ```