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.