|

TEMA 2 DNS (SRC)

¿Qué es lo importante de este tema?

  • DNS es el servicio que convierte nombres de máquina legibles (ej. www.ejemplo.com) en direcciones IP (ej. 93.184.216.34) y viceversa.
  • Un servidor DNS (en Linux habitualmente BIND/named) puede ser maestro de zonas (donde guarda la información) o esclavo (copia de otro).

Conceptos clave (muy básicos)

  • Zona directa: mapea nombre → IP (registros A, CNAME, MX, NS).
  • Zona inversa: mapea IP → nombre (registros PTR).
  • SOA (Start of Authority): bloque principal en cada zona que contiene metadatos (Serial, Refresh, Retry, Expire, Negative TTL).
  • Serial: número de versión de la zona — siempre súbelo cuando cambies la zona.

Archivos y rutas importantes en BIND

  • /etc/bind/named.conf — archivo principal que incluye otros.
  • /etc/bind/named.conf.options — opciones globales (forwarders, listen-on, dnssec).
  • /etc/bind/named.conf.local — donde declaran las zonas que creas (master, file “/etc/bind/db.tuzona”).
  • Ficheros de zona: p.ej. /etc/bind/db.tu-dominio.com (directa) y /etc/bind/db.1.30.175 (inversa).

Estructura típica de un fichero de zona (qué contiene)

  • Primera línea: $TTL 1800 (tiempo por defecto en segundos).
  • @ IN SOA ns.tu-dominio. admin.tu-dominio. (
    • Serial (versión), Refresh, Retry, Expire, Negative Cache TTL.
  • @ IN NS ns.tu-dominio. → servidor de nombres.
  • ns IN A 175.30.1.10 → registro A del nameserver.
  • www IN A 175.30.1.10, ftp IN A ... → otros A.
  • En inversa: 10 IN PTR ns.tu-dominio.

Pasos básicos para montar un servidor DNS (resumen práctico)

  1. Instalar: sudo apt update && sudo apt install -y bind9 bind9utils dnsutils.
  2. Declarar zonas en /etc/bind/named.conf.local (poner zone "dominio" { type master; file "ruta"; };).
  3. Crear/editar los ficheros de zona (/etc/bind/db.tudominio, /etc/bind/db.rev).
  4. Validar antes de recargar:
    • sudo named-checkconf (comprobar config general)
    • sudo named-checkzone tudominio /etc/bind/db.tudominio (comprobar zona)
  5. Recargar servicio: sudo systemctl reload named o sudo systemctl restart named.
  6. Probar: dig @IP_SERVIDOR www.tudominio.com y dig -x IP @IP_SERVIDOR (inversa).

Opciones y ajustes útiles

  • named.conf.options:
    • listen-on { IP; }; → en qué interfaces escucha el servidor.
    • forwarders { 1.1.1.1; 8.8.8.8; }; → reenviar consultas que no puede resolver.
    • dnssec-validation auto; → activar DNSSEC si interesa.
  • resolv.conf y netplan: asegúrate que los clientes usan tu DNS (poner tu IP en nameservers y search para nombres cortos).

Errores comunes y cómo detectarlos

  • «no current owner name» → líneas con indentación inicial: las entradas deben comenzar en columna 1; quita espacios al principio.
  • CRLF / ^M → ficheros con formato Windows; usa dos2unix.
  • Olvidar el punto final (ns.tu-dominio.) en FQDN dentro de zonas provoca problemas.
  • No incrementar el Serial → los esclavos/caches no verán los cambios.
  • Usa logs y comandos para diagnosticar: journalctl -u named, tail /var/log/syslog.

Comandos clave para tu práctica

  • Instalación: sudo apt install bind9 bind9utils dnsutils
  • Estado: sudo systemctl status named
  • Validación config: sudo named-checkconf
  • Validación zona: sudo named-checkzone zona archivo
  • Probar resolución: dig @IP_SERVIDOR nombre / dig -x IP @IP_SERVIDOR / nslookup

Buenas prácticas (rápido)

  • Hacer copia de seguridad antes de editar (cp archivo archivo.bak).
  • Mantener ficheros con permisos seguros (root:root, no world-writable).
  • Documentar cambios y capturas para la práctica (named-checkzone OK, status active, salidas de dig).
  • Incrementar Serial cada vez que modifiques la zona.

EJERCICIO PRÁCTICO

Resumen rápido

  • IP del servidor: 175.30.1.10/26
  • Dominio: javier.com
  • Zonas: directa javier.com y inversa 1.30.175.in-addr.arpa
  • Paquetes: bind9, bind9utils, dnsutils
  • Demonio: named (BIND)

0) Preparar VirtualBox

  • Adaptador 1: Red interna → nombre ubuntudns.
  • Adaptador 2 (temporal): NAT para tener Internet e instalar paquetes.
  • Arranca la VM.

1) Configurar netplan (IP estática, nameserver y search)

Edita /etc/netplan/01-netcfg.yaml (o el fichero que haya en /etc/netplan/) y pega esto:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses: [175.30.1.10/26]
      nameservers:
        addresses: [175.30.1.10]
        search: [javier.com]

Si tu interfaz no es enp0s3, sustitúyela por la que ip addr muestre.

Aplica y comprueba:

sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak
sudo netplan apply
ip addr show enp0s3
cat /etc/resolv.conf

Si netplan da advertencia por permisos:

sudo chown root:root /etc/netplan/01-netcfg.yaml
sudo chmod 644 /etc/netplan/01-netcfg.yaml
sudo netplan apply

2) Instalar bind9

Con el adaptador NAT activo:

sudo apt update
sudo apt install -y bind9 bind9utils dnsutils
sudo systemctl enable --now named.service
sudo systemctl status named --no-pager

Asegúrate de ver active (running).


3) Declarar las zonas (named.conf.local)

Edita /etc/bind/named.conf.local y añade:

zone "javier.com" {
    type master;
    file "/etc/bind/db.javier.com";
};

zone "1.30.175.in-addr.arpa" {
    type master;
    file "/etc/bind/db.175.30.1";
};

Guarda el archivo.


4) Crear fichero de zona directa /etc/bind/db.javier.com

Crea el archivo con este contenido (usa exactamente esto):

sudo cp /etc/bind/db.local /etc/bind/db.javier.com.bak 2>/dev/null || true
sudo tee /etc/bind/db.javier.com > /dev/null <<'EOF'
$TTL 1800
@ IN SOA ns.javier.com. admin.javier.com. (
        20251013 ; Serial
        604800   ; Refresh
        86400    ; Retry
        2419200  ; Expire
        604800 ) ; Negative Cache TTL

; Nameserver
@ IN NS ns.javier.com.

; Registros A
ns   IN A 175.30.1.10
@    IN A 175.30.1.10
www  IN A 175.30.1.10
ftp  IN A 175.30.1.10

; pc1 según enunciado -> 170.170.170.1
pc1  IN A 170.170.170.1
EOF

Nota: el campo pc1 se solicita con IP 170.170.170.1 según el enunciado.


5) Crear fichero de zona inversa /etc/bind/db.175.30.1

Crea el archivo con este contenido:

sudo tee /etc/bind/db.175.30.1 > /dev/null <<'EOF'
$TTL 1800
@ IN SOA ns.javier.com. admin.javier.com. (
        20251013 ; Serial
        604800   ; Refresh
        86400    ; Retry
        2419200  ; Expire
        604800 ) ; Negative Cache TTL

@ IN NS ns.javier.com.

10 IN PTR ns.javier.com.
45 IN PTR pc2.javier.com.
EOF

6) Comprobación sintaxis y recarga de BIND

Valida los ficheros y recarga:

sudo named-checkconf || echo "named-checkconf ERROR"
sudo named-checkzone javier.com /etc/bind/db.javier.com
sudo named-checkzone 1.30.175.in-addr.arpa /etc/bind/db.175.30.1

# Si OK:
sudo systemctl reload named || sudo systemctl restart named
sudo systemctl status named --no-pager

Si named-checkzone devuelve errores como no current owner name o unexpected end of line, revisa:

  • que no haya espacios al principio de las líneas importantes,
  • que los FQDN terminen con punto . (por ejemplo ns.javier.com.),
  • que no existan finales Windows (^M). Para limpiar espacios y CRLF:
sudo cp /etc/bind/db.javier.com /etc/bind/db.javier.com.bak
sudo sed -i 's/^[ \t]\+//; s/[ \t]\+$//' /etc/bind/db.javier.com
sudo apt update && sudo apt install -y dos2unix
sudo dos2unix /etc/bind/db.javier.com

sudo cp /etc/bind/db.175.30.1 /etc/bind/db.175.30.1.bak
sudo sed -i 's/^[ \t]\+//; s/[ \t]\+$//' /etc/bind/db.175.30.1
sudo dos2unix /etc/bind/db.175.30.1

Luego vuelve a named-checkzone.


7) Ajustes adicionales

7.1 named.conf.options

Editar /etc/bind/named.conf.options para que BIND escuche en la IP interna y tenga forwarder público:

options {
    directory "/var/cache/bind";

    listen-on { 175.30.1.10; };
    allow-query { any; };

    forwarders { 1.1.1.1; };

    dnssec-validation auto;
    auth-nxdomain no;
};

Reinicia BIND tras editar:

sudo named-checkconf
sudo systemctl restart named

7.2 nsswitch.conf

Editar /etc/nsswitch.conf y poner:

hosts: dns files

(de forma que DNS se consulte antes de /etc/hosts).


8) Probar resoluciones y añadir pc2

Pruebas y pasos pedidos en la práctica:

Comprobar resolución directa:

dig @175.30.1.10 www.javier.com +short
dig @175.30.1.10 pc1.javier.com +short

Añadir pc2 (A record) y actualizar Serial:

# Incrementa Serial en SOA manualmente; aquí se reemplaza con 20251014
sudo sed -i 's/20251013/20251014/' /etc/bind/db.javier.com

# Añadir pc2
sudo tee -a /etc/bind/db.javier.com > /dev/null <<'EOF'
pc2 IN A 175.30.1.45
EOF

sudo named-checkzone javier.com /etc/bind/db.javier.com
sudo systemctl reload named

# Comprobar A de pc2
dig @175.30.1.10 pc2.javier.com +short

Comprobar resolución inversa (antes de PTR, debe fallar):

dig -x 175.30.1.45 @175.30.1.10 +short
nslookup 175.30.1.45 175.30.1.10

Añadir PTR y actualizar Serial de la zona inversa:

sudo sed -i 's/20251013/20251014/' /etc/bind/db.175.30.1

# Añadir PTR para .45 (si no está)
sudo tee -a /etc/bind/db.175.30.1 > /dev/null <<'EOF'
45 IN PTR pc2.javier.com.
EOF

sudo named-checkzone 1.30.175.in-addr.arpa /etc/bind/db.175.30.1
sudo systemctl reload named

# Comprobar inversa ahora
dig -x 175.30.1.45 @175.30.1.10 +short
nslookup 175.30.1.45 175.30.1.10

9) Comandos útiles para diagnóstico y logs

  • Ver puertos DNS escuchando:
ss -ltnup | grep :53
  • Revisar logs de named:
sudo journalctl -u named -n 80 --no-pager
sudo tail -n 80 /var/log/syslog
  • Validar configuración global:
sudo named-checkconf
  • Validar zona:
sudo named-checkzone zona archivo

10) Errores comunes y soluciones rápidas

  • no current owner name → quitar espacios al principio de la línea que debería empezar en columna 1.
  • unexpected end of line → falta ) en SOA o fichero truncado; revisa SOA y balanceo de paréntesis.
  • Finales Windows (^M) → dos2unix archivo.
  • Olvidar . al final de FQDNs → añade . (ej. ns.javier.com.).
  • Olvidar incrementar Serial → no se aplican los cambios correctamente.

11) Capturas/entregables (lo mínimo que debes incluir)

  1. /etc/netplan/01-netcfg.yaml (muestra IP y search).
  2. cat /etc/resolv.conf (muestra nameserver 175.30.1.10 y search javier.com).
  3. /etc/bind/named.conf.local (declaración de zonas).
  4. /etc/bind/db.javier.com y /etc/bind/db.175.30.1 (contenido).
  5. Salida de sudo named-checkzone ... (OK).
  6. sudo systemctl status named (active).
  7. Salidas de dig/nslookup pedidas en la práctica.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *