Imprimir

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

23 Comentarios en “Servidor DNS Bind en Linux”

  • JFF dice:

    Tengo una duda, poseeo una ip dinamica, y necesito montar un servidor que funcione no solo en una lan interna, sino que el servidor funcione como el de una empresa de hosting, he cambiado las direcciones y tratado de direccionar mediante iptables, pero no he logrado que funcionen, agradesco la ayuda que me puedan prestar…. gracias de antemano!

  • crash-n-burn dice:

    JFF, si quieres acceder a tu máquina desde Internet sin tener IP fija tienes que utilizar un Dynamic DNS provider. Tienes más info en nuestro artículo Cómo tener una web

  • Jesus Moncada dice:

    Hola, estoy estudiando la posibilidad de montar un FTP con acceso desde el internet o fuera de la LAN y tengo una duda; quiero hacerlo mediante un nombre de dominio que me conecte directamente con mi servidor, para esto es necesario que instale un Servidor de DNS? no es posible con tan solo un cliente DNS? (que no sea con aplicaciones de terceros como DynDNS), es decir, solo deseo que MIDOMINIO.COM este en la base de datos del DNS de mi ISP y resuelva solo la IP cuando lo soliciten. Asi me evito una IP fija y el trabajo de resolver N cantidad de direcciones.

  • crash-n-burn dice:

    Jesus, para acceder a tu máquina desde Internet sin tener IP fija tendrás que utilizar un Dynamic DNS provider. Y si quieres que MIDOMINIO.COM esté en el servidor DNS de tu ISP tendrás que registar el dominio. Más info en nuestro artículo Cómo tener una web.

  • jeva vader dice:

    Gran tutorial amigo fue el unico que sirvio de los muchos que he consultado, hize la parte del DNS sin dominio registrado (y si funciono pero solo en el sever) sin embargo lo unico que necesito por ahora es que los clientes de mi red local accedan a el pero eso no pasa jajajjaja

    Ya tenia instalado apache y phpmyadmin y podia acceder a el servidor desde cualquier cliente solo tecleando el ip pero cuando puse el DNS ya no jalo no entra ningun cliente por la ip

    ¿¿¿¿tengo que hacer la parte del DNS con dominio registrado?????

  • crash-n-burn dice:

    jeva vader, tranquilo, BIND no es el programa más fácil de configurar del mundo y suele costar hacerlo funcionar, su sintaxis no es precisamente intuitiva.
    Si has instalado correctamente el servidor DNS todavía no has terminado, tienes que configurar adecuadamente todos y cada uno de los clientes de tu red local para que usen el servidor DNS local. Para ello tendrás que editar el archivo /etc/resolv.conf de cada máquina y añadir una línea con la IP del servidor DNS local, por ejemplo:
    nameserver 192.168.1.3
    Además, asegúrate de que tienes bien configurado en cada cliente el ‘resolver’, el mecanismo de resolución de nombres de dominio (más info en nuestro artículo resolución de nombres de dominio).

    Y acuérdate de limpiar la caché del navegador. Los browser cachean las consultas DNS por lo que tienes que vaciar la caché si cambias la configuración de tu servidor DNS local.

  • jeva vader dice:

    uauuuu! k respuesta tan rapida :P , aprovechando mira pare bind9 e intente acceder a el server como estaba acostumbrado a acerlo (solo apache) pero ya no lo hace, aparte al reiniciar apache me mandaba unos errores k corregi agregando al archivo de configuracion de apache el nombre del servidor, y pues uno de los problemas k se me presenta aparte de k ahora no puedo acceder a mis clientes aunq sea por ip es k los clientes son windows (no me regañes no soy yo jajjaj odio windows jajajajajja) y pues no puedo aplicar esos pasos ya agrege al resolv.conf la sintaxis del server y su direccion

  • jeva vader dice:

    Listo por fin me quedo mi error es que usaba de direccion del servidor la 200.200.200.0 (broadcast) no me habia dado cuenta hasta hacer ping pero ya quedo con clientes linux thx

  • oskar dice:

    al hacer nslookup de mi direccion estatica desde fuera me da el siguente error: xxx.xxx.xxx.xxx.in-addr.arpa not found al igual si pruebo con host

  • julian echavarria dice:

    Saludos
    instale Ubuntu 7.10 y necesito instalar un servidor de correo DNS, pero cuando voy a instalar el paquete BIND, aparece un mensaje que dice:
    El paquete bind no tiene candidato para su instalacion
    que debo hacer? gracias

  • crash-n-burn dice:

    julian, para instalar BIND el paquete a instalar es ‘bind9′ no ‘bind’

  • juangabe dice:

    Excelente tuto, te felicito, soy nuevo configurando servidores y tengo problemas para configurar un servidor local. El problema es que puedo acceder desde los otros equipos al servidor solamente por la IP y no por el nombre del servidor, e seguido el tutor pero tengo problemas ya que tengo fedora 9 y en algunas cosas cambia y lo otro es que no e podido hacer que el demonio named funcione al igual que el servicio inetd no existe (creo que lo reemplaza Xinetd), espero me puedan colaborar gracias.

    Muchos saludos

  • julio.esn dice:

    Muy buen aporte!!! probaré y veré los resultados gracias. Justo lo que necesitba.

  • voce dice:

    Bonito tutorial, siguido los pasos del manual llegue a configurar DNS hace 1 dia cuando digito la ip se ve la pagina, cuando digito el nombre de la web no ingresa donde podria estar la falla, la configuracion es la siguiente.
    En named.conf.local tengo esto.
    zone “dirbol.com” {
    type master;
    file “/etc/bind/dirbol.com.hosts”;
    };
    zone “71.58.200.in-addr.arpa” {
    type master;
    file “/etc/bind/200.58.71.rev”;
    };
    Se creo y/o edito el siguiente archivo.
    $ttl 38400
    dirbol.com. IN SOA es.dirbol.com. dptosalud.yahoo.es. (
    1230513593
    10800
    3600
    604800
    38400 )
    dirbol.com. IN NS es.dirbol.com.
    es.dirbol.com. IN A 200.58.71.40
    http://www.dirbol.com. IN CNAME dirbol.com.

    Esta otra resolucion inversa ( 200.58.71.rev ) tambien la edite de la siguiente manera.

    $ttl 38400
    71.58.200.in-addr.arpa. IN SOA es.dirbol.com. dptosalud.yahoo.es. (
    1230513999
    10800
    3600
    604800
    38400 )
    71.58.200.in-addr.arpa. IN NS es.dirbol.com.
    40.71.58.200.in-addr.arpa. IN PTR es.dirbol.com.
    http://www.71.58.200.in-addr.arpa. IN CNAME dirbol.com.

    En named.conf.options coloque los DNS de mi ISP
    Hace aproximadamente 24 horas que tengo con esta configuracion, pero no me resulve, cuando digito en firefox el http://es.dirbol.com
    Podrian indicarme donde esta la falla gracias y saludos a todos.

  • daniel soto dice:

    Tengo una duda. Tu mencionas en tu articulo que la ip dd1.dd2.dd3.dd4 es la ip asociada o publica que se tiene. Yo en mi red tengo un nettica (dns manager) con el dominio sinaloawireless.com. Desde afuera visualizo bien la pagina http://www.sinaloawireless.com. La pregunta es si puedo sustituir el dd1.dd2.dd3.dd4 por sinaloawireless.com en la configuracion del dns manager. Si es asi como se le haria para sustituir expresiones como zone “dd3.dd2.dd1.in-addr.arpa”. Para mi seria perfecto poder hacer eso con mi ip dinamica ya que no quiero pagar una ip fija. Mas en mexico que son caras. Agradezco mucho tu apoyo. Gracias..

  • crash-n-burn dice:

    daniel soto, puedes tener IP fija gratis. Échale un vistazo al apartado “Free Dynamic DNS provider” de nuestro artículo Cómo tener una web

  • Jorge dice:

    Hola, quería comentaros una duda que tengo ya que no se me inicia el servicio named. Tengo CentOS 5.3

    He seguido tus pasos de DNS local, pero poniendo mi dominio.
    Al reiniciar el servidor named me da este error:
    ———————
    Error en la configuración de named:
    zone 0.0.127.IN-ADDR.ARPA/IN: loading master file localhost.rev: file not found
    _default/0.0.127.IN-ADDR.ARPA/IN: file not found
    zone servidor.example.com/IN: loading master file /var/named/db.servidor.example.com: file not found
    _default/servidor.example.com/IN: file not found
    zone 2.168.192.in-addr.arpa/IN: loading master file /var/named/db.192.168.2: file not found
    _default/2.168.192.in-addr.arpa/IN: file not found
    ———————

    Pero en el directorio /var/named están estos archivos:
    ———————
    chroot db.servidor.example.com localhost.zone named.ip6.local run-root data named.broadcast named.local db.192.168.2 localdomain.zone named.ca named.zero slaves
    ———————

    No encuentro el fallo de por qué no encuentra los archivos de configuración

    Un saludo. Y gracias por la ayuda.

  • paula dice:

    Por favor quisiera recibir cotizacion formal de un servidor dedicaco, con las siguientes caracteristicas: 300 gb de disco, 10 Mb de ancho de banda, linux centos 5.3, core 2 duo , y de 2 gb de RAM.
    Asi como conocer tambien si les es posible asignar un rango completo de ips a ese servidor (256 ips, una clase C)
    Desde ya muchas gracias.
    Paula

  • sergio dice:

    Preguntas:
    1- si tengo ip dinamica puedo utilizar un Free Dynamic DNS provider como dyndns y la direccion que se creo por ejemplo server.homedns.org
    y ponerla en la configuracion del servidor dns bind ya que no poseo ip fija??

    2- se puede hacer esta misma configuracion con webmin.
    si es asi tienes algun tutorial???

    muy buen tutorial primer post que encuentro que entiendo te pasaste el reto no entendia nada nada.
    saludos.

  • johnny dice:

    Ahí va un tuto sobre el tema
    http://remember.homelinux.com

  • Juan Pablo dice:

    muy buen aporte, pero yo uso webmin y es mas rapido a la hora de configurar un dominio, para los nuevos linuxeros webmin es una herramienta intuitiva que nos sirve para administrar por web los servidores como el openvpn, dhcp, dns, crear nuevos usuarios y grupos, subir y bajar los servicios de linux todo y hasta + por web hasi de facil por youtube hay muchos video tutos que te enseñan de como instalar y configurar webmin.

    slu2

  • miguel dice:

    Existing Client Views
    Warning – the following zones are not in any view : dd3.dd2.dd1.in-addr.arpa , . , 0 , mydomain.com , 255 , localhost , 127

    BIND may not be able to start until they are moved to a view.

    i try many many times reinstalling bind and finaly always the same problem :(

    if you have any idea please write in the forum or to me: ferritina@hotmail.com

  • Martín C. dice:

    Buenas, tengo una consulta.

    Yo tengo en mi empresa dos servidores DNS, uno primario y una esclavo.

    Estuve bastante tiempo configurandolo para que puedan transferirse datos y al final lo logré.

    Lo que no estoy logrando es que cuando bajo el servicio named del DNS1, quede el DNS2 como primario y que los sistemas sigan arriba. Eso no debería suceder automáticamente? En todas las demás máquinas están ambas direcciones IP indicadas en el resolv.conf, por lo que al no encontrar activo al DNS1, debería ir automáticamente al DNS2, pero no lo hace.

    Alguna sugerencia?

    Desde ya, muchas gracias,

    Martín.

Deja un comentario