Configuración servidor DNS (bind9) en Ubuntu

* Fragmentos de texto extraídos del tutorial “Cómo configurar BIND” de Hugo Madrid Luna (Crowley) bajo FDL.

BIND es el servidor de nombres de dominio más popular en Internet, que trabaja en todas las plataformas informáticas principales y se caracteriza por su flexibilidad y seguridad.

Domain Name Service (DNS) es el servicio que resuelve los nombres de dominio asociados a una dirección IP para direccionar las peticiones a un servidor en específico. Se utiliza cuando un nodo (o host) en Internet contacta a otro mediante el nombre de domino de la máquina y no por su dirección IP.

A través de este documento se verán las generalidades del servicio de resolución de nombres, la configuración y mantenimiento de un servicio de nombres con BIND, bajo la plataforma Linux, aunque la mayoría de estos conceptos se pueden aplicar a la cualquier servicio de DNS sobre otras plataformas.

Regularmente, todos los equipos que están en Internet o una Intranet tienen una dirección IP única que las identifica, generalmente dividido en cuatro segmentos u ‘octetos’, cuya representación es, por ejemplo, ‘172.29.183.217’, pero el recordar todas las direcciones en este formato sería sumamente difícil, por lo que utilizamos los nombres de dominio para referenciarlos.

Existen varios productos que realizan esta función y en todas las plataformas, pero el más usado es BIND (Berkeley Internet Name Domain), que es distribuido bajo la GNU GPL.

La estructura básica del DNS es similar a un árbol, donde se tiene una raíz o root, los Dominios de Nivel Principal (Top Level Domains) y los dominios de segundo nivel.

Los nombres de dominio completamente calificados o FQDN (fully qualified domain name) se componen por lo general del nombre del host, un nombre de dominio secundario y un nombre de dominio primario o de nivel máximo (top-level domain), que son secciones organizadas jerárquicamente.

Por ejemplo: ‘www.ejemplo.com’. Leyéndolo de derecha a izquierda tenemos un dominio primario (‘COM’), un dominio secundario (‘EJEMPLO’) y el nombre del host (‘WWW’). Algunos dominios primarios son:

org – Organizaciones no lucrativas.
com – Organizaciones lucrativas.
net – Organizaciones en Internet.
gob – Agencias gubernamentales en latinoamérica.
mx – Sufijo de México.
es – Sufijo de España.

Existen cuatro tipos diferentes de servidores de resolución de nombres:

  • Master (maestro o primario). Aloja los registros autoritarios de una zona, responde las peticiones de resolución de nombres como servidor de autoridad y delega copias a los servidores esclavo.
  • Slave (esclavo o secundario). Responde a las peticiones de resolución de nombres como servidor de autoridad, pero la información es distribuida por los servidores primarios. Se considera que como medida de seguridad, se requiere al menos uno de estos, preferentemente independiente de la infraestructura del primario (red, energia eléctrica y ubicación geográfica).
  • Caching-only (sólo de cache). Responde a las peticiones de resolución de nombres pero no es servidor de autoridad, las respuestas las guarda en memoria por un período determinado.
  • Forwarding (de reenvío). Reenvia las peticiones a una lista de servidores de nombres.

Tipos de registros.

Para ofrecer suficiente flexibilidad en la configuración, se pueden declarar diversos tipos de registros, que hacen referencia a la función del host. A continuación veremos los más importantes.

  • A (Address). Es el registro más usado, que define una dirección IP y el nombre asignado al host. Generalmente existen varios en un dominio.
  • MX (Mail eXchanger). Se usa para identificar servidores de correo, se pueden definir dos o más servidores de correo para un dominio, siendo que el orden implica su prioridad. Debe haber al menos uno para un dominio.
  • CNAME (Canonical Name). Es un alias que se asigna a un host que tiene una dirección IP valida y que responde a diversos nombres. Pueden declararse varios para un host.
  • NS (Name Server). Define los servidores de nombre principales de un dominio. Debe haber al menos uno y pueden declararse varios para un dominio.
  • SOA (Start Of Authority). Este es el primer registro de la zona y sólo puede haber uno en cada archivo de la zona y sólo está presente si el servidor es autoritario del dominio. Especifica el servidor DNS primario del dominio, la cuenta de correo del administrador y tiempo de refresco de los servidores secundarios.

Configuración

Veamos como configurar BIND9 para disponer de un servidor DNS en una intranet, que resuelva dominios internos. Por ejemplo, en la intranet se utilizaran dominios que terminen en “marblestation.homeip.net” como “saturno.marblestation.homeip.net” o “luna.marblestation.homeip.net”. El servidor DNS se encargará de resolver esos dominios en sus respectivas IPs, además de resolver otros dominios de Internet como “google.com”.

Instalamos BIND9 y nos desplazamos a su directorio de configuración:

aptitude install bind9
cd /etc/bind/

Editamos named.conf.local y añadimos la zona “marblestation.homeip.net”, haciendo referencia a su fichero de configuración:

zone "marblestation.homeip.net" {
    type master;
    file "/etc/bind/db.marblestation";
};

Creamos el fichero de configuración “db.marblestation” a partir de “db.local”:

cp db.local db.marblestation

Editamos “db.marblestation”, reemplazamos la palabra “localhost” por “marblestation.homeip.net”, cambiamos la IP “127.0.0.1” por la que queramos asignar al dominio y añadimos al final del fichero todos los A, MX y CNAME que queramos, quedando:

;
; BIND data file for local loopback interface
;
$TTL    604800
@   IN  SOA marblestation.homeip.net. root.marblestation.homeip.net. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@           IN      NS          marblestation.homeip.net.
@           IN      A           192.168.48.32
@           IN      MX      0   marblestation.homeip.net.
www         IN      A           192.168.48.32
saturno     IN      CNAME       marblestation.homeip.net.

En este ejemplo vemos primeramente el dominio a resolver, ‘marblestation.homeip.net.’ y el segundo es la cuenta de correo del administrador, ‘root.marblestation.homeip.net.’ (sustituyéndo el primer punto por arroba, lo que dejaría ‘root@marblestation.homeip.net’). Debemos notar que al final de cada dominio viene un punto, que identifica la raíz de este. El resto de los parámetros son:

  • Serial: es un identificador del archivo, puede tener un valor arbitrario pero se recomienda que tenga la fecha con una estructura AAAA-MM-DD y un consecutivo.
  • Refresco: número de segundos que un servidor de nombres secundario debe esperar para comprobar de nuevo los valores de un registro.
  • Reintentos: número de segundos que un servidor de nombres secundario debe esperar después de un intento fallido de recuperación de datos del servidor primario.
  • Expiración: número de segundos máximo que los servidores de nombre secundarios retendrán los valores antes de expirarlos.
  • TTL mínimo: Significa Time To Live y es el número de segundos que los registros se mantienen activos en los servidores NS caché antes de volver a preguntar su valor real.

A continuación se definen los registros necesarios, cuyos tipos ya han sido explicados anteriormente en este documento.

Cada vez que se cambia la configuración de BIND9, debemos reiniciar el demonio:

/etc/init.d/bind9 restart

Para que nuestra máquina utilice el servidor de DNS que hemos configurado, debemos editar “/etc/resolv.conf” y dejamos únicamente la línea:

nameserver 127.0.0.1

Se debería hacer lo mismo con el resto de máquinas de la intranet que vayan a utilizar el servidor, con la única diferencia que habrá que substituir la IP 127.0.0.1 por la IP que tenga el servidor en la red.

Para comprobar el correcto funcionamiento, utilizamos el comando “host” el cual sirve para resolver dominios:

$ host marblestation.homeip.net
marblestation.homeip.net has address 192.168.48.32
marblestation.homeip.net mail is handled by 0 marblestation.homeip.net.
$ host saturno.marblestation.homeip.net
saturno.marblestation.homeip.net is an alias for marblestation.homeip.net.
marblestation.homeip.net has address 192.168.48.32
saturno.marblestation.homeip.net is an alias for marblestation.homeip.net.
saturno.marblestation.homeip.net is an alias for marblestation.homeip.net.
marblestation.homeip.net mail is handled by 0 marblestation.homeip.net.

Si deseamos también disponer de resolución de dominios inversa, es decir, que podamos preguntar por la IP “192.168.48.32” y el servidor DNS nos diga que pertenece a marblestation.homeip.net, debemos añadir a “/etc/bind/named.conf.local”:

zone "192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192";
};

Creamos el archivo de configuración “/etc/bind/db.192” a partir del “/etc/bind/db.127”:

cd /etc/bind/
cp db.127 db.192

Editamos “/etc/bind/db.192”, substituimos “localhost” por “marblestation.homeip.net” y cambiamos la última línea:

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@   IN  SOA marblestation.homeip.net. root.marblestation.homeip.net. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
@   IN  NS  marblestation.homeip.net.
32.48.168   IN  PTR marblestation.homeip.net.

De forma que, la última linea indica que la IP [192.]168.48.32 (escrita a la inversa y omitiendo el 192 que ya se especifico en “named.conf.local”) corresponde al dominio marblestation.homeip.net.

Podemos comprobar su funcionamiento reiniciando el demonio BIND9 y realizando una consulta:

$ /etc/init.d/bind9 restart
$ host 192.168.48.32
32.48.168.192.in-addr.arpa domain name pointer marblestation.homeip.net.

32 thoughts on “Configuración servidor DNS (bind9) en Ubuntu

  1. Que tal, el articulo me parece bien, yo soy nuevo usando UBUNTU tengo instalado el 5.10 y quiero configurar el DNS para despues configurar OpenLDAP, pero no trae BIND instalado, y no he podido conectarlo a internet para utilizar los repositores, converti .RPM a DEB. pero me marcan error al instalarlos, si pudieras mandarme el paquete .deb de BIND9 y si no fuera mucha molestia el de OpenLDAP, gracias de antemano…

  2. Me la pase una semana tratando de acer esto en centos probando con 80 mil articulos y nada de nada , en cambio en ubuntu y este articulo lo hice en 15 min. 😛

  3. HOla… estaba leyendo el tutorial, que me parece muy claro. de todos modos no logro imaginar como hacer lo que deseo: (explico) me interesa (tengo un acces point wifi, con openWRT) configurar un servidor DNS para que cualquiera que se conecte a el (entrega IP, y DNS por dhcp), luego de conectado -y al intentar conectarse con cualquier IP .com; .com.ar; .com.es, etc- termine dirigido a mi página web que los invita a colaborar económicamente con el mantenimiento del servicio de internet… ¿cómo puedo hacer????
    Muchas gracias.-

  4. Hola. esta muy buena la explicación, bueno mi consulta es que quisiera implentar un servicio de nombres de dominios para una red la cual tiene instalado ubuntu en todas las maquinas las q van a tener internet siendo que el servidor de internet es un proxy instalado en una maquina aparte.
    quisiera saber si puede instalar el servidor de nombres de dominio de la red local en una pc con ubunto o debian y administrar toda la red desde ese host, la red tendria por el momento 45 maquinas aproximadamente.

    desde ya muchas gracias Luis.

  5. Sin duda es una excelente explicación.

    Me quedan unas dudas:
    1. ¿Todas las computadoras que se conecten a la red y hagan la solicitud el servidor resolverá sin problemas para esto el IP de DNS de cada maquina deberá cambiar al del servidor local?

    2. ¿como hago para que este servidor con bind también pueda resolver para sitios externos de internet?

    3. es decir todas las maquinas entraran a este equipo para resolver nombre local OK
    si se solicita nombre de internet (www.google.com) como este servidor sabrá donde buscar \"la salida\" al proveedor ADSL para servicio web.

  6. ya tengo configurado un servidor de correo, pero quiero configurar otro. el que tengo actualmente esta en mis servidores pero el q quiero implementar esta en otra ubicacion, y debo de hacer un registro MX para poder redireccionar, como debo de hacerlo???

  7. Man, excelente tutorial.

    Nos podrías realizar uno pero con dominios reales, osea, que por ejemplo tengamos un http://www.dominio.com y configurarlo correctamente para que en el panel de control del Dominio uno ponga las ns1.miservidor.com y ns2.miservidor.com

    Gracias

  8. Muy buen tutorial, solo tengo una pregunta. Tu dices que hay q hacer lo mismo en los clientes q van a usar el servidor dns, y cambiar el nameserver 127.0.0.1 por el del servidor, pero debo instalar bind9 en el cliente tambien?? o solo cambiar el archivo /etc/resolv.conf? Y si es asi como puedo hacer si tengo una servidor dhcp local dando ips dinamicas a los clientes, para q la tabla del dns se actualice a las nuevas ips?

  9. Buenas tardes
    configure bind9 y estos son los resultados en el propio equipo donde reside bind9
    root@ubuntutest:~# dig elimparcial.com

    ; DiG 9.6.1-P2 elimparcial.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11518
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 14

    ;; QUESTION SECTION:
    ;elimparcial.com. IN A

    ;; ANSWER SECTION:
    elimparcial.com. 3832 IN A 216.240.181.166

    ;; AUTHORITY SECTION:
    . 67992 IN NS d.root-servers.net.
    . 67992 IN NS m.root-servers.net.
    . 67992 IN NS f.root-servers.net.
    . 67992 IN NS c.root-servers.net.
    . 67992 IN NS h.root-servers.net.
    . 67992 IN NS i.root-servers.net.
    . 67992 IN NS l.root-servers.net.
    . 67992 IN NS k.root-servers.net.
    . 67992 IN NS j.root-servers.net.
    . 67992 IN NS g.root-servers.net.
    . 67992 IN NS a.root-servers.net.
    . 67992 IN NS e.root-servers.net.
    . 67992 IN NS b.root-servers.net.

    ;; ADDITIONAL SECTION:
    a.root-servers.net. 315435 IN A 198.41.0.4
    a.root-servers.net. 368850 IN AAAA 2001:503:ba3e::2:30
    b.root-servers.net. 531944 IN A 192.228.79.201
    c.root-servers.net. 532766 IN A 192.33.4.12
    d.root-servers.net. 531944 IN A 128.8.10.90
    e.root-servers.net. 531944 IN A 192.203.230.10
    f.root-servers.net. 532054 IN A 192.5.5.241
    g.root-servers.net. 531944 IN A 192.112.36.4
    h.root-servers.net. 532766 IN A 128.63.2.53
    i.root-servers.net. 532054 IN A 192.36.148.17
    j.root-servers.net. 532054 IN A 192.58.128.30
    k.root-servers.net. 533984 IN A 193.0.14.129
    l.root-servers.net. 531166 IN A 199.7.83.42
    m.root-servers.net. 47277 IN A 202.12.27.33

    ;; Query time: 1 msec
    ;; SERVER: 192.168.0.19#53(192.168.0.19)
    ;; WHEN: Wed Jun 8 13:32:50 2011
    ;; MSG SIZE rcvd: 496

    pero en el lado del cliente (windows xp) estos son los resultados
    nslookup imparcial.com
    *** No se puede econtrar el nombre de servidor para la direccion 192.168.0.19 : non-existent domain
    *** los servidores predeterminados no estan disponibles
    Respuesta no autoritativa
    Servidor: UnKnown
    Address: 192.168.0.19

    Nombre: elimparcial.com
    Address: 216.240.181.166

    mi pregunta es: esta o no esta funcionando correctamente mi servidor DNS ??
    tengo algun error en mi configuracion de bind?

    el cliente tiene configurada la ip del servidor bind9 como servidor dns

    Gracias de antemano

  10. El manual, realmente es perfecto por lo cual te felicito por el trabajo realizado.

    Antes de preguntar te informo:

    Yo tengo 2 webs y me gustaría saber como poner la segunda web.

    ya lo tengo configurado en apache y acceso desde el servidor a las 2 webs, pero desde Internet solo veo la primera.

    ya tengo el db.segundaweb creado
    y la pregunta es:

    “que tengo y como añadir al db.192 para que me reconozca desde internet la segunda web.”

  11. hola preconsa
    Tenia el mismo error con los xp, pasa que el xp intenta resolver el nombre que le corresponde al ip que esta configurado como servidor dns, solucione el problema agregando el ip del servidor en la lista de resolución inversa en el servidor linux

  12. Oye está genial el tutorial, muy bien explicado.
    Pero aún así me surgió una duda, que creo y considero que es facil de responder.
    Tengo mi topología así:
    Internet Firewall Red Local
    Donde con NAT (iptables) comparto el internet a mis usuarios de la red Local
    Dentro de mi Red Local tengo un Servidor DNS caché con bind9
    el cual servirá para que mis usuarios internos resuelvan los dominios de internet…

    El problema está en que el servidor DNS si hace la búsqueda y la traducción del dominio a ip
    pero no la regresa a los usuarios de la Red Local…
    Me comentaron que sería un error de la configuración de Bind…
    crees poderme auxiliar un poco?
    Gracias 🙂

  13. Hola, tengo una duda y no se como resolverla ahí les va 😀 tengo mi servidor ubuntu apache, ftp y mail, quiero que por ejemplo cuando ingrese por el ftp con el usuario juan y suba un index.html entonces se modifique en el dominio.com mas no en los usuarios por que subo archivos con los usuarios por ejemplo el usuario juan y los archivos se ven pero en sus respectivas carpetas.. (dominio.com/juan) y quiero asignarle un usuario al dominio para que pueda subir archivos directos a la web

  14. Hola a todos Tengo un problema y ya no se que más puedo intentar.
    He cambiado de ADSL y desde entonces no me funciona Bind9.
    Antes funcionaba perfectamente y podía configurar mis dominios perfectamente.
    Ahora cuando desde la teminal ejecuto : /etc/init.d/bind9 restart
    me da este error :
    * Stopping domain name service… bind9
    rndc: connect failed: 127.0.0.1#953: connection refused
    [ OK ]
    * Starting domain name service… bind9 [ OK ]

    Y no me funciona nigun dominio.

    He desintalado y reistalado el bind 9 y sigo con el mismo error.

    Por favor si alguien sabe como solucionar este error . se agradecerá.

    mis ficheros de configuración son :
    named.conf.local

    zone “www.lukylu.com” {
    type master;
    file “/etc/bind/db.lukylu”;
    };

    db.lukylu
    ;
    ; BIND data file for local loopback interface
    ;
    $TTL 604800
    @ IN SOA lukylu.com. root.lukyku.com. (
    2 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL
    ;
    @ IN NS lukylu.com.
    @ IN A 192.168.2.105
    @ IN MX 0 lukylu.com.
    www IN A 192.168.2.105
    Gusano IN CNAME lukylu.com.

    Esta configuración funcionaba perfectamente.

  15. Hola me pueden ayudar cuando ejecuto el ultimo comando para realizar pruebas me aparece el siguiente error: not found: 3(NXDOMAIN) solo coloco host la ip de mi servidor y me muestra ese error, hay alguien que me pueda indicar a que se debe este problema.

  16. Hola, tengo una problema para autenticar un domino por DKIM, parecer ser que e TXT rebasa el limite permitido para publicar en DNS como puedo hacer para ajustar mi TXT y autenticar un dominio.

  17. A alguien no le paso, siguiendo el ejemplo del post que se puede navegar por todos los dominios marblestation.homeip.net, pero al querer navegar por otro dominios ejemplo
    domino.net o dominio2.net no ter permite navegar usando nslookup
    server can’t find domino.net: SERVFAIL
    server can’t find domino2.net: SERVFAIL
    y con el dominio marblestation.homeip.net???… Esa es la pregunta…

Leave a Reply

Your email address will not be published. Required fields are marked *