Salta el contingut

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:

# Consulta bàsica
host www.exemple.cat

# Tots els registres
host -a exemple.cat

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; };
};