Configuració de DNS en Linux amb BIND9
reload vs restart
Després de modificar una zona, utilitza sudo rndc reload (recarrega la configuració sense tallar el servei) en lloc de systemctl restart bind9. Abans de recarregar, valida sempre la sintaxi amb named-checkconf i named-checkzone — un error de sintaxi pot deixar el servidor sense arrencar.
Instal·lació de BIND9
En sistemes basats en Debian/Ubuntu, la instal·lació és senzilla:
# Actualització del sistema
sudo apt update && sudo apt upgrade -y
# Instal·lació de BIND9 i eines relacionades
sudo apt install -y bind9 bind9utils bind9-doc dnsutils
# Verificació del servei
sudo systemctl status bind9
Per a sistemes basats en Red Hat/CentOS:
# Instal·lació en RHEL/CentOS
sudo dnf install -y bind bind-utils
# Iniciar i habilitar el servei
sudo systemctl enable named
sudo systemctl start named
Estructura de Fitxers de Configuració
Els fitxers de configuració de BIND es troben a /etc/bind/ en sistemes Debian/Ubuntu. L'estructura típica inclou:
- named.conf: Fitxer principal de configuració
- named.conf.options: Opcions globals del servidor
- named.conf.local: Definició de zones locals
- named.conf.default-zones: Zones per defecte (localhost, broadcast, etc.)
Configuració Bàsica del Servidor
Configuració del fitxer /etc/bind/named.conf.options:
# Definició de la xarxa interna
acl "xarxa-interna" {
192.168.1.0/24;
10.0.0.0/8;
localhost;
};
options {
directory "/var/cache/bind";
# Configuració de seguretat
recursion yes;
allow-recursion { xarxa-interna; };
allow-query { xarxa-interna; };
allow-transfer { none; };
# Forwarders (DNS externs)
forwarders {
8.8.8.8; # Google DNS
1.1.1.1; # Cloudflare DNS
};
forward only;
# Configuració DNSSEC
dnssec-validation auto;
# IPv6
listen-on-v6 { any; };
# Amagar versió de BIND
version "DNS Server";
};
Creació de Zones
Definició de zones al fitxer /etc/bind/named.conf.local:
# Zona directa
zone "empresa.local" IN {
type master;
file "/etc/bind/zones/db.empresa.local";
allow-update { none; };
};
# Zona inversa
zone "1.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/zones/db.192.168.1";
allow-update { none; };
};
Exemple de fitxer de zona directa (/etc/bind/zones/db.empresa.local):
$TTL 86400
@ IN SOA ns1.empresa.local. admin.empresa.local. (
2024010101 ; Serial
3600 ; Refresh (1 hora)
1800 ; Retry (30 minuts)
604800 ; Expire (1 setmana)
86400 ) ; Minimum TTL (1 dia)
No oblidis incrementar el Serial
Cada vegada que modifiquis el fitxer de zona, has d'incrementar manualment el número de Serial. Si no ho fas, els servidors secundaris no detectaran el canvi i no transferiran la zona actualitzada, encara que la configuració sigui correcta. Un format habitual és AAAAMMDDnn (any-mes-dia-revisió del dia).
; Servidors de noms
IN NS ns1.empresa.local.
IN NS ns2.empresa.local.
; Registres A
ns1 IN A 192.168.1.10
ns2 IN A 192.168.1.11
www IN A 192.168.1.20
mail IN A 192.168.1.25
ftp IN A 192.168.1.30
; Registres CNAME
webmail IN CNAME mail
portal IN CNAME www
; Registre MX
@ IN MX 10 mail.empresa.local.
; Registres TXT
@ IN TXT "v=spf1 mx -all"
AC0375/01/03 — Miniactivitat
RA1 · CA1b, CA1c, CA1d, CA1j
Instal·la BIND9 en una màquina virtual o contenidor Linux, crea la zona empresa.local amb els registres A, CNAME i MX de l'exemple anterior, i comprova amb dig que es resolen correctament. Documenta els passos seguits.
Reverse DNS (rDNS)
La zona inversa (1.168.192.in-addr.arpa a l'exemple anterior) permet la resolució d'IP a nom (registres PTR), imprescindible per a molts serveis de correu i eines de diagnòstic de xarxa.
AC0375/01/05 — Miniactivitat
RA1 · CA1b, CA1g
A partir de la zona empresa.local que has creat, afegeix la zona inversa corresponent a la teva subxarxa amb els registres PTR de ns1, www i mail. Verifica-ho amb dig -x <IP> i amb host <IP>.
Configuració servidor secundari en Linux
Al servidor primari, modificar la zona per permetre transferències al fitxer /etc/bind/named.conf.local::
zone "empresa.local" {
type master;
file "/etc/bind/zones/db.empresa.local";
allow-transfer { 192.168.1.11; }; # IP del secundari
also-notify { 192.168.1.11; };
};
Al servidor secundari:
zone "empresa.local" {
type slave;
file "/var/cache/bind/db.empresa.local";
masters { 192.168.1.10; }; # IP del primari
};
AC0375/01/06 — Miniactivitat
RA1 · CA1i
Munta dos contenidors BIND9 (primari i secundari) i configura la transferència de zona empresa.local entre tots dos. Comprova amb dig axfr empresa.local @<IP_secundari> que el secundari té la zona replicada, i força una transferència manual amb rndc retransfer empresa.local al secundari.
Configuració recursivisat en Linux BIND 9
Configuració de Recursió
Fitxer: /etc/bind/named.conf.options (Debian/Ubuntu) o /etc/named.conf (RHEL)
Habilitar recursió (servidor resolver):
options {
directory "/var/cache/bind";
// Habilitar recursió
recursion yes;
// Permetre consultes recursives només des de xarxes confiables
allow-recursion {
localhost;
localnets;
192.168.1.0/24; // Exemple: la teva xarxa local
};
// Permetre consultes només des de xarxes confiables
allow-query {
localhost;
localnets;
192.168.1.0/24;
};
// Forwarders opcionals
forwarders {
8.8.8.8;
8.8.4.4;
};
// Validació DNSSEC
dnssec-validation auto;
listen-on-v6 { any; };
};
Deshabilitar recursió (servidor autoritatiu):
options {
directory "/var/cache/bind";
// Deshabilitar recursió
recursion no;
// Permetre consultes només per als dominis autoritatius
allow-query { any; };
// NO definir forwarders
dnssec-validation auto;
listen-on-v6 { any; };
};
Eines de Diagnòstic a Linux
dig (Domain Information Groper): eina més potent i flexible per a consultes DNS:
# Consulta detallada
dig www.exemple.cat
# Consulta específica de tipus
dig MX exemple.cat
# Traçar el camí de resolució
dig +trace www.exemple.cat
# Consulta inversa
dig -x 192.0.2.1
# Consultar al servidor DNS local (@)
dig @localhost www.example.com
# Consultar a un servidor DNS específic per IP (@)
dig @8.8.8.8 www.google.com
dig @1.1.1.1 www.cloudflare.com
# Consultar al servidor DNS d'un domini específic
dig @ns1.example.com www.example.com
# Si NO poses @, dig utilitza el servidor DNS configurat al sistema
dig www.example.com
# (això utilitzarà el DNS de /etc/resolv.conf en Linux)
host: eina simple per a consultes ràpides:
nslookup: també disponible a Linux per a consultes bàsiques:
# Consulta simple
nslookup www.google.com
# Consulta a servidor específic
nslookup www.google.com 8.8.8.8
# Consulta de registre MX
nslookup -type=mx gmail.com
Diagnòstic Avançat de BIND9
Verificació de configuració BIND:
# Verificar sintaxi de named.conf
sudo named-checkconf
# Verificar fitxer de zona
sudo named-checkzone empresa.local /etc/bind/zones/db.empresa.local
# Veure el log del servei
sudo journalctl -u bind9 -f
Anàlisi de cache:
# Veure estadístiques del servidor
sudo rndc stats
# Buidar la cache
sudo rndc flush
# Veure la cache actual
sudo rndc dumpdb -cache
Problemes Comuns i Solucions
Problema: El servidor no respon a consultes externes
Solució: Verificar la configuració d'allow-query i les regles del firewall:
# Verificar configuració
grep -i "allow-query" /etc/bind/named.conf.options
# Obrir ports al firewall (Ubuntu/UFW)
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
Problema: La zona no es transfereix al servidor secundari
Solució: Verificar allow-transfer i incrementar el número de sèrie:
# Al primari - verificar permisos de transferència
grep -i "allow-transfer" /etc/bind/named.conf.local
# Incrementar serial i recarregar
sudo nano /etc/bind/zones/db.empresa.local # Incrementar serial
sudo rndc reload empresa.local
Optimització del Rendiment a BIND9
Configuració de Cache
Optimitzar la cache pot millorar significativament el rendiment:
options {
# Cache per a respostes positives
max-cache-size 256m;
max-cache-ttl 86400;
# Cache per a respostes negatives
max-ncache-ttl 3600;
# Prefetch de registres abans que expirin
prefetch 2 9;
};
Configuració de Views (Split-horizon DNS)
Permet servir diferents respostes segons l'origen de la consulta:
# Definir ACLs
acl "interna" { 192.168.0.0/16; 10.0.0.0/8; };
acl "externa" { any; };
# Vista interna
view "interna" {
match-clients { interna; };
zone "empresa.local" {
type master;
file "/etc/bind/zones/interna/db.empresa.local";
};
};
# Vista externa
view "externa" {
match-clients { externa; };
zone "empresa.local" {
type master;
file "/etc/bind/zones/externa/db.empresa.local";
};
};
Anycast DNS
Utilitzar anycast permet dirigir les consultes al servidor més proper geogràficament:
# Configuració BGP per anycast (exemple amb BIRD)
protocol bgp {
local as 65001;
neighbor 192.0.2.1 as 65000;
export filter {
if net = 203.0.113.53/32 then accept;
reject;
};
}
DNS over TLS (DoT) amb BIND 9.18+
Aquests protocols xifren les consultes DNS per millorar la privadesa:
tls local-tls {
cert-file "/etc/bind/certs/cert.pem";
key-file "/etc/bind/certs/key.pem";
};
options {
listen-on port 853 tls local-tls { any; };
};