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(registrosA,CNAME,MX,NS). - Zona inversa: mapea
IP → nombre(registrosPTR). - 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)
- Instalar:
sudo apt update && sudo apt install -y bind9 bind9utils dnsutils. - Declarar zonas en
/etc/bind/named.conf.local(ponerzone "dominio" { type master; file "ruta"; };). - Crear/editar los ficheros de zona (
/etc/bind/db.tudominio,/etc/bind/db.rev). - Validar antes de recargar:
sudo named-checkconf(comprobar config general)sudo named-checkzone tudominio /etc/bind/db.tudominio(comprobar zona)
- Recargar servicio:
sudo systemctl reload namedosudo systemctl restart named. - Probar:
dig @IP_SERVIDOR www.tudominio.comydig -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.confynetplan: asegúrate que los clientes usan tu DNS (poner tu IP en nameservers ysearchpara 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
Serialcada 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.comy inversa1.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 ejemplons.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)
/etc/netplan/01-netcfg.yaml(muestra IP y search).cat /etc/resolv.conf(muestranameserver 175.30.1.10ysearch javier.com)./etc/bind/named.conf.local(declaración de zonas)./etc/bind/db.javier.comy/etc/bind/db.175.30.1(contenido).- Salida de
sudo named-checkzone ...(OK). sudo systemctl status named(active).- Salidas de
dig/nslookuppedidas en la práctica.







