- Estréllate y Arde - https://www.estrellateyarde.org -

Servidor DNS Bind en Linux

El DNS (Domain Name System, Sistema de Nombres de Dominio) es una base de datos jerárquica distribuida que almacena la información sobre nombres de dominio e IPs en Internet, que se implementa con arquitectura cliente-servidor, por lo que necesita:

  • un servidor DNS que escucha en los puertos 53 TCP y 53 UDP, que se ocupa de responder las consultas DNS. Prácticamente el único software utilizado en servidores DNS es Bind, del ISC (Internet Systems Consortium, isc.org).

    Equivalencias en Windows: MS-DNS.

  • un cliente DNS, generalmente un navegador o un servidor de correo, el programa que genera peticiones DNS de resolución de nombres a un servidor DNS, del tipo ¿qué IP corresponde a www.domain.com?

Vamos a ver dos ejemplos:

Una vez configurado el servidor DNS comprobaremos que funciona correctamente con los comandos ping y dig.

Es muy conveniente leer los HOWTOs y algún manual bueno de DNS:

Servidor DNS para un dominio registrado

Vamos a instalar un servidor DNS y vamos a configurarlo para servir tanto a la red local como a Internet, proporcionando a cada red distinta información.

  • los ordenadores de la LAN consultarán a este servidor cuando tengan que resolver un nombre de host local o de Internet. De este modo, no tendremos que añadir manualmente los nombres de las máquinas de la LAN a /etc/hosts.
  • a las máquinas de Internet que soliciten nuestro dominio www.fransberns.com (suponemos que está registrado y que dd1.dd2.dd3.dd4 es la IP asociada), les dirán que el servidor DNS para ese dominio está en nuestra máquina (IP del servidor DNS primario dd1.dd2.dd3.dd4, IP del servidor DNS secundario ss1.ss2.ss3.ss4).

Veamos cómo instalar el servidor DNS:

  1. instalamos Bind (Berkeley Internet Name Domain, isc.org/products/BIND/, paquete bind9): el demonio es named y escucha los puertos 53 TCP y 53 UDP.
  2. editamos el archivo de configuración de bind /etc/bind/named.conf.local y añadimos las siguientes líneas:
    acl slaves {
        ss1.ss2.ss3.ss4;
    };
    acl internals {
        127.0.0.1;
        192.168.1.0/24;
    };
    view "internal" {
        match-clients {
            internals;
        };
        recursion yes;
        zone "fransberns.com" {
            type master;
            file "/etc/bind/internals/db.fransberns.com";
        };
        zone "dd3.dd2.dd1.in-addr.arpa" {
            type master;
            file "/etc/bind/db.dd1.dd2.dd3";
        };
        zone "1.168.192.in-addr.arpa" {
            type master;
            file "/etc/bind/db.192.168.1";
        };
    };
    view "external" {
        match-clients {
            any;
        };
        recursion no;
        zone "fransberns.com" {
            type master;
            file "/etc/bind/externals/db.fransberns.com";
            allow-transfer {
                slaves;
            };
        };
        zone "dd3.dd2.dd1.in-addr.arpa" {
            type master;
            file "/etc/bind/db.dd1.dd2.dd3";
        };
    };

    ¿Qué hemos hecho?

    • definimos una nueva zona, fransberns.com, sobre la que Bind ejerce el control, que tiene 2 sub-zonas: internal y external.
    • Bind servirá distintos contenidos según la sub-zona de donde provenga la consulta:
      • consultas "internas" son las que provienen de una IP que coincide con el rango de IPs definido en acl internal, es decir, las que proceden de 192.168.1.0/24, y su configuración está en el archivo /etc/bind/internals/db.fransberns.com
      • consultas "externas" son todas las demás, y su configuración está en el archivo /etc/bind/externals/db.fransberns.com
    • ambas sub-zonas son type master: significa que el servidor DNS es primario.
    • definimos un servidor DNS secundario (que lo tenemos en la IP ss1.ss2.ss3.ss4), mediante la directiva acl slave. Con la directiva allow-transfer permitimos transferir los datos de la sub-zona external a este servidor secundario.
    • creamos las zonas 1.168.192.in-addr.arpa y dd3.dd2.dd1.in-addr.arpa para que nuestro servidor DNS haga el mapeo inverso (traducir una IP a un nombre de dominio).
  3. creamos el archivo /etc/bind/externals/db.fransberns.com (IN NS indica que este equipo es el servidor DNS):
    ; fransberns.com-externals
    $TTL    604800
    @       IN      SOA     ns1.fransberns.com. root.fransberns.com. (
                         2006020201  ; Serial
                             604800  ; Refresh
                              86400  ; Retry
                            2419200  ; Expire
                             604800 ); Negative Cache TTL
    ;
    @       IN      NS      ns1
            IN      MX      10 mail
            IN      A       dd1.dd2.dd3.dd4
    ns1     IN      A       dd1.dd2.dd3.dd4
    mail    IN      A       dd1.dd2.dd3.dd4
    www     IN      A       dd1.dd2.dd3.dd4
  4. creamos el archivo /etc/bind/internals/db.fransberns.com (IN A añade un nombre de host y su IP correspondiente):
    ; fransberns.com-internals
    $include "/etc/bind/externals/db.fransberns.com"
    @       IN      A       192.168.1.3
    pc350   IN      A       192.168.1.3
    pc450   IN      A       192.168.1.2
    pc266   IN      A       192.168.1.4
  5. creamos el archivo /etc/bind/internals/db.192.168.1 (contiene la misma información del mapeo de nombres a IPs):
    ; fransberns.com inverso red local
    $TTL    604800
    @       IN      SOA     fransberns.com. root.fransberns.com. (
                            1    ; Serial
                            8H   ; Refresh
                            2H   ; Retry
                            4W   ; Expire
                            1D ) ; Minimum TTL
    ;
    @       IN      NS      fransberns.com
    3       IN      PTR     pc350.fransberns.com.
    2       IN      PTR     pc450.fransberns.com.
    4       IN      PTR     pc266.fransberns.com.
  6. creamos el archivo /etc/bind/internals/db.dd1.dd2.dd3 (contiene la misma información del mapeo de nombres a IPs):
    ; fransberns.com inverso red pública
    $TTL    604800
    @       IN      SOA     fransberns.com. root.fransberns.com. (
                            1    ; Serial
                            8H   ; Refresh
                            2H   ; Retry
                            4W   ; Expire
                            1D ) ; Minimum TTL
    ;
    @         IN      NS      fransberns.com
    dd4       IN      PTR     ns1
    dd4       IN      PTR     mail
    dd4       IN      PTR     www
  7. ¿cómo se configura el servidor secundario? En el /etc/bind/named.conf del servidor DNS secundario añadiremos las líneas:
    zone "fransberns.com" {
        type slave;
        file "sec.db.fransberns.com";
        masters {
            dd1.dd2.dd3.dd4;
        };
    };
    zone "dd3.dd2.dd1.in-addr.arpa" {
        type slave;
        file "sec.db.dd1.dd2.dd3";
        masters {
            dd1.dd2.dd3.dd4;
        };
    };
  8. ¿y si no tenemos servidor DNS secundario? Un servidor DNS debe tener un servidor secundario. Podemos conseguir un servidor DNS secundario en xname.org. Sólo tenemos que abrir una cuenta para fransberns.com y decirles que dd1.dd2.dd3.dd4 es la IP desde donde transferirán la información DNS del dominio fransberns.com. En ese caso, sustituiremos ss1.ss2.ss3.ss4 por la IP de xname.org (193.218.105.146).
  9. editaremos /etc/bind/named.conf.options e incluiremos las IPs de los servidores DNS de nuestro ISP, de manera que Bind las utilizará para resolver peticiones que no pertenezcan a nuestro dominio. Buscaremos la directiva forwarders y pondremos:
    forwarders {
        80.58.61.250;
        80.58.61.254;
    };
  10. editaremos el archivo /etc/resolv.conf y añadiremos la IP del servidor DNS (dejaremos los de nuestro ISP por si falla Bind):
    search fransberns.com
    nameserver 192.168.1.3
    nameserver 80.58.61.250
    nameserver 80.58.61.254
  11. cuando se nos pregunte por un servidor DNS al registrar fransberns.com, pondremos el que hemos montado, ns1.fransberns.com, como primario y ss1.ss2.ss3.ss4 como secundario. Los cambios de configuración en el DNS son lentos, y no podremos comprobar los resultados hasta transcurridas algunas horas (hasta 48 horas).
  12. reiniciamos el demonio de Bind (named) ejecutando:
    # /etc/init.d/bind9 restart

Una vez instalado el servidor DNS configuraremos los clientes. Para ello, configuraremos cada ordenador de la red local para que use el servidor DNS local editando el archivo /etc/resolv.conf de cada máquina y añadiendo la IP del servidor DNS:

search fransberns.com
nameserver 192.168.1.3
nameserver 80.58.61.250
nameserver 80.58.61.254

Servidor DNS local, sin dominio registrado

Veamos cómo instalar un servidor DNS local:

  1. editamos el archivo /etc/bind/named.conf.local y añadimos las siguientes líneas:
    zone "fransberns.com" {
        type master;
        file "/etc/bind/db.fransberns.com";
    };
    zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/internals/db.192.168.1";
    };
  2. creamos el archivo /etc/bind/db.fransberns.com, cuyo contenido es:
    ; fransberns.com
    $TTL    604800
    @       IN      SOA     ns1.fransberns.com. root.fransberns.com. (
                         2006020201  ; Serial
                             604800  ; Refresh
                              86400  ; Retry
                            2419200  ; Expire
                             604800 ); Negative Cache TTL
    ;
    @       IN      NS      ns1
            IN      A       192.168.1.3
    ns1     IN      A       192.168.1.3
    www     IN      A       192.168.1.3
    pc350   IN      A       192.168.1.3
    pc450   IN      A       192.168.1.2
    pc266   IN      A       192.168.1.4
  3. creamos el archivo /etc/bind/internals/db.192.168.1, cuyo contenido es:
    ; fransberns.com inverso red local
    $TTL    604800
    @       IN      SOA     fransberns.com. root.fransberns.com. (
                            1    ; Serial
                            8H   ; Refresh
                            2H   ; Retry
                            4W   ; Expire
                            1D ) ; Minimum TTL
    ;
    @       IN      NS      fransberns.com
    3       IN      PTR     pc350.fransberns.com.
    2       IN      PTR     pc450.fransberns.com.
    4       IN      PTR     pc266.fransberns.com.
  4. editamos /etc/bind/named.conf.options para que consulte a los DNS del ISP:
    forwarders {
        80.58.61.250;
        80.58.61.254;
    };
  5. editamos el archivo /etc/resolv.conf y añadiremos la IP del servidor DNS local:
    search fransberns.com
    nameserver 192.168.1.3
    nameserver 80.58.61.250
    nameserver 80.58.61.254
  6. reiniciamos el demonio de Bind (named) ejecutando:
    # /etc/init.d/bind9 restart

Los clientes los configuraremos exactamente igual que en el caso anterior.

Configurar BIND en el entorno gráfico

En el entorno gráfico podemos configurar BIND con GBIND Admin (paquete gbindadmin).

GBIND Admin


Article printed from Estréllate y Arde: https://www.estrellateyarde.org

URL to article: https://www.estrellateyarde.org/discover/servidor-dns-en-linux

Copyright © 2010 Estrellate y Arde