Implementación de un Servidor DNS Autónomo con BIND

Conceptos Fundamentales de DNS

Durante los primeros días de las redes informáticas, la comunicación se realizaba mediante direcciones IP. A medida que más equipos se conectaron, recordar secuencias numéricas se volvió impráctico. En sistemas UNIX se introdujo un archivo llamado hosts para mapear nombres a direcciones IP. Sin embargo, con la expansión de Internet, mantener este archivo sincronizado en todas las máquinas era inviable. Esto llevó al desarrollo del Sistema de Nombres de Dominio (DNS), una base de datos distribuida que permite a los usuarios acceder a recursos utilizando nombres fáciles de recordar.

DNS opera sobre el protocolo UDP en el puerto 53 y estructura los nombres en un árbol jerárquico denominado espacio de nombres, con un límite teórico de 127 niveles. Cada nodo puede tener etiquetas de hasta 63 caracteres.

Flujo de Resolución de Nombres

El cliente primero busca en su caché local. Si no encuentra el registro, envía una consulta a un servidor DNS recursivo. Este servidor verifica su propia caché; si no hay coincidencia, consulta las bases de datos autorizadas. Como último recurso, la consulta se envía a los servidores raíz, que dirigen a los servidores de nivel superior, y así sucesivamenet hasta resolver el nombre. Si no se encuentra, se devuelve un error.

Categorías de Servidores DNS

  • Servidor Maestro: Almacena la información original de la zona.
  • Servidor Esclavo: Sincroniza datos automáticamente desde el maestro.
  • Servidor Caché: Realiza consultas recursivas y almacena resultados temporalmente.
  • Reenviador: Redirige consultas a servidores específicos sin procesarlas localmente.

Tipos de Registros DNS

Los registros más comunes incluyen:

  • SOA (Inicio de Auotridad): Contiene metadatos de la zona, como el servidor maestro y tiempos de expiración.
  • NS (Servidor de Nombres): Indica los servidores autorizados para una zona.
  • MX (Intercambio de Correo): Define servidores de correo con prioridades.
  • A y AAAA: Mapean nombres a direcciones IPv4 e IPv6, respectivamente.
  • CNAME: Crea alias para otros nombres de dominio.
  • TXT: Almacena información textual, comúnmente para registros SPF.
  • SRV: Especifica servicios y protocolos disponibles.

Ejemplo simplificado de un registro SOA:

mi-dominio.com.    3600    IN    SOA    ns.mi-dominio.com. admin.mi-dominio.com. (
                                2024030101 ; serial
                                7200       ; refresh (2 horas)
                                3600       ; retry (1 hora)
                                1209600    ; expire (2 semanas)
                                86400      ; minimum (1 día)
)

Utilidades de Diagnóstico

Varias herramientas permiten probar la resolución DNS:

  • host: Realiza consultas simples, como en el siguiente ejemplo:
$ host ejemplo.org
ejemplo.org has address 192.0.2.10
  • nslookup: Muestra información del servidor DNS utilizado.
$ nslookup ejemplo.org
Servidor:    198.51.100.1
Respuesta no autoritativa:
Nombre:    ejemplo.org
Dirección: 192.0.2.10
  • dig: Proporciona un detallado seguimiento del proceso de resolución.
$ dig ejemplo.org

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; QUESTION SECTION:
;ejemplo.org.            IN    A

;; ANSWER SECTION:
ejemplo.org.        300    IN    A    192.0.2.10

;; AUTHORITY SECTION:
ejemplo.org.        300    IN    NS    ns1.ejemplo.org.

;; Query time: 25 msec
;; SERVER: 198.51.100.1#53

Configuración Práctica de un Servidor BIND

Requisitos Previos

En un sistema CentOS 7, instale los paquetes necesarios:

sudo yum install bind bind-utils bind-chroot

Archivo de Configuración Principal

Edite el archivo principle de configuración. Ejemplo simplificado:

options {
    version "2.0";
    listen-on port 53 { any; };
    directory "/var/named/chroot/etc";
    pid-file "/var/named/chroot/var/run/named/named.pid";
    allow-query { any; };
    forwarders { 8.8.8.8; 8.8.4.4; };
    recursion yes;
};

key "rndc-clave" {
    algorithm hmac-md5;
    secret "clave-secreta-aqui";
};

controls {
    inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-clave"; };
};

logging {
    channel advertencias {
        file "/var/named/chroot/var/log/dns_advertencias" versions 3 size 5m;
        severity warning;
        print-time yes;
    };
    category default {
        advertencias;
    };
};

Configuración de Vistas y Zonas

Cree un archivo de vista para definir zonas. Ejemplo:

vista "RedLocal" {
    zona "miservicio.local" {
        type master;
        file "miservicio.local.zone";
        allow-transfer { 10.0.0.2; };
        notify yes;
    };
};

Archivo de zona correspondiente:

$ORIGIN miservicio.local.
$TTL 3600
@    IN    SOA    ns.miservicio.local. admin.miservicio.local. (
                 2024031501 ; serial
                 7200       ; refresh
                 3600       ; retry
                 604800     ; expire
                 3600       ; minimum
                 )
         IN    NS    ns.miservicio.local.
ns       IN    A     10.0.0.1
www      IN    A     10.0.0.10

Permisos y Puesta en Marcha

Ajuste los permisos del directorio de trabajo e inicie el servicio:

sudo chown -R named:named /var/named/chroot
sudo systemctl start named
sudo systemctl enable named

Validación de la Configuración

Verifique la resolución consultando el servidor local:

dig @127.0.0.1 www.miservicio.local

Para inspeccionar el servidor DNS asignado al sistema, revise el archivo /etc/resolv.conf.

Etiquetas: bind dns configuración de servidor resolución de nombres registros DNS

Publicado el 6-15 23:43