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.

Autor: Marble

This entry was posted in GPL Tarragona. Bookmark the permalink.

70 Responses to Configuración servidor DNS (bind9) en Ubuntu

  1. carlos Calderón says:

    excelente ayuda me sirvió de mucho gracias.

  2. tute says:

    me funciono correctamente pero eso …. no lko he probado en la internet desde afuera
    de todos modos gracias

  3. Neocrack says:

    Claro,conciso y muy explicativo.Gracias por la orientacion ,ahora si tengo por donde empezar pues lo que es bind9 aun es un misterio para mi.

    Saludos

  4. Juan Manuel says:

    necesito hacer un trabajo en la materia de redes … consisite en configurar el DNS con linux… si me podrian ayudar se los agradesco .

  5. harold angulo says:

    Me pareció 10 puntos esta guia, muy bien y no dista mucho de la configuracion en mandrake

  6. ruben says:

    hOLA oye tu tutorial esta muy bien explicado me ha servido muchisimo 🙂 gracias he de decir que esto ya lo habia hecho antes solo que ya ando algo oxidado y bueno ru how to me devolvio la poca practica que tenia gracias (Y)

  7. Jose says:

    Work!!!
    THANK YOU!

  8. Claudio says:

    Hola, buenisimo el tutorial, me sale a la perfeccion tal como lo haz explicado, lo unico que no me permite es ver las sitios desde el explorer ya que me sale que ingrese un usuario y contraseña.
    Muchisimas gracia.

  9. Santiago says:

    Enhorabuena,

    Este mini-tutorial es útil, además de para poder acceder a tu equipo desde ‘fuera’, para poder poner aplicaciones web tipo joomla o moodle que requieren el nombre del servidor y que éste coincida desde la red privada y la externa, de forma que el sitio sea visible desde cualquier sitio con el mismo nombre.

    Un saludo.

  10. luis says:

    excelente ayuda

    gracias

  11. jaime says:

    Buen tutorial, gracias

  12. chasky says:

    funciona!

    thanks very much

  13. Excelente tutorial, segui todos los pasos, me funciono a la parefección, el problema que presento, es que en las maquinas pegadas a mi red local, no logro ver estos virtual host, tengo 2 nuevos y unicamente puedo ver el default. Podrias ayudarme con esto.

    Ya busque información en la web, realice muchas lecturas y no hay forma de que logure solucionar este problema.

    Gracias
    Saludos desde Guatemala!!!
    😀

  14. hola. estoy tratando de configurar un dominio en 2 servidores diferentes, todvia no tengo clalro pero estoy investigando.

    lo que quiero en si es: mi dominio maizmorado.com que esta registrado. quiero apuntarlo al servidor “A” y al servidor “B” y as, ¿la finalidad? ,cuando falla el las cuenas de correo, empieza a funcionar el otro de igual manera tambien con las paginas web, si uno se cae el otro lo levanta temporalmente. ¿alguien me puede decir como hacerlo?

    como configurar en cada servidor???

  15. erman says:

    esta explicacion esta super que buena me ha servido de mucha ya que se hace mas legible , porque he encintradoi otras por ahi que de tanto que quieren hacer entender no logran nada , o bien puede ser que es que yo sea un principinate y no entienda nada pero bueno les agradesco mucho por esta informacion me sirvio de mucho
    MUCHAS GRACIAS

  16. nay says:

    hola q tal tu manual esta bien bien ya lo practique en la esc, y si salio pero aora lo soty haciendo en mi casa pero tuve un problemilla y kise eliminar el bind9 para volver a empezar d nuevo pero ahora ya no me deja volverlo a instalar alguien si sabe como desistalarlo totalmentedesde la ternimal para iniciar d cero se lo agradecer mucho.

  17. Administrator says:

    aptitude purge bind9

  18. Hesban says:

    Un saludo desde Guatemala! MUCHISIMAS GRACIAS POR TU APORTE! FUE DE MUCHISIMA AYUDA! muy buen TUTO! no queda nada mas que decirte GRACIAS!

  19. BetoCortes says:

    Excelente tutor, me funciona 10 puntos

  20. samuel says:

    hola, una pregunta: en que momento le indicas al servidor que pueda resolver “saturno”?
    y donde ingreso nombres para otros PCs dentro de mi intranet?
    por ejemplo si se llaman pc1, pc2, etc, donde indico esa info al servidor dns?

  21. marcus says:

    buenisimo
    ahora si quiero agregar más dominios con más ip como ahgo?

  22. voce says:

    Muy bueno, funciona dentro de la red interna, para que funciones en internet que mas se tendria que hacer. En caso de comprara un dominio y mi maquina utilizar como servidor de DNS y Servidor de paginas web con apache (hosting).
    saludos y gracias.

  23. angelchuaPrincipe says:

    preciso encontre tu manual,esta entendible,me sirvio de mucha ayuda.

  24. Katsuro says:

    Buenas noches.
    Excelente tutorial. De lo mejorcito que he encontrado por la red. Lo he hecho bajo Ubuntu Server 8.10, y salio divino 😉

    Lo unico que me falta comentar es que en el archivo <i>/etc/bind/named.conf.options</i> he escrito esto:
    <i>
    options {
    directory \"/var/cache/bind\";
    forwarders {
    194.179.1.100;
    194.179.1.101;
    };
    auth-nxdomain no;
    listen-on-v6 { any; }
    };
    </i>
    Espero que les sirva, pues asi mi servidor DNS si no sabe la direccion de un dominio, lo consulta a otros DNS (los que he escrito funcionan ^^) y lo guarda en cache.

    Saludos

  25. mark33sv says:

    Para Ricardo Pineda (chapin)
    De Guanaco (Salvadoreño)

    Amigo, para el caso de VirtualHost, en primer lugar, cada VirtualHost tiene su propia configuracion de zonas, asi es que en cada nuevo agregado, tiene que agregar su configuracion dentro de zona, es decir: db.zona1, db.zona2 … db.zonax … y sus repspectivos zonas inverso.

    Para continuar, leete este manual basico para VirtualHos en el apache2:
    http://infoaleph.wordpress.com/2008/05/12/como-apache-php5-wordpress-virtual-hosts/

    Suerte vicho!

  26. mark33sv says:

    HEY GRACIAS Y SI FUNCIONA PAR AMIS PRUEBAS DE APENDIZAJE.

    NADA MAS UNA DUDA EN CUANTO AL ARCHIVO INVERsO O ZONA INVERSA DECLARADA para 2 SITIOS HOST VIRTUALS que tengo SOBRE LA MISMA IP, COMO DECLARO EL ARCHIVO INVERSO?
    http://www.sitio1.com
    http://www.sitio2.com
    Ambos ya declarado en “/etc/bind/named.conf.local”

    PUEDO OBVIAR EL db.numero de la ip en uso? solo por nombrar el archivo? y que de la declaracion de la zona inversa en el “/etc/bind/named.conf.local” decalrando ambos archivos?
    por ejemplo puedo declara al
    primero como:

    zone “uno.in-addr.arpa” {
    type master;
    file “/etc/bind/db.uno”;
    };

    segundo como:
    zone “dos.in-addr.arpa” {
    type master;
    file “/etc/bind/db.dos”;
    };
    Ambos estan bajo la misma ip. Funciona asi de correcto? el BIND9 no lee el nombre del primer digito numerico respecto a su direccion declarada en cada archivo?
    O para fianalizar, es necesario solamente un archivo?
    Claro soy nuevo en esto …

  27. jughux says:

    Excelente tutoral, ademas de sencillo, lo segui al pie de la letra y vuala todo funciona a la perfeccion felicitaciones muy bueno el tutorial.

  28. zinfinal says:

    hola buen tuturial…

    1ero- ME GUSTARIA SAVER SI ESTE GUIA SIRVE PARA CREAR DOMINIOS…

    ASI COMO LAS GRANDES EMPRESAS QUE CREAN DOMINIOS.. dominio.com foro.dominio.com ALGO ASI… HE ESTADO BUSCANDO GUIAS QUE AGAN ESTO… AYUDENME..
    2do- QUE SIGNIFICA DOMINIO INTERNO.. Y EXTERNO..
    CREO QUE DOMINIO EXTERNO ES PARA WAN OSEA PUEDEN ENTRAR DESDE CUALQUIER PARTE DEL MUNDO CON TU DOMINIO OSEA.. dominio.com ??’ PONIENDO EN TU NAVEGADOR DE INTERNET IE,FIREFOX,ETC….

    Y CREO QUE DOMINIO INTERNO SOLO PUEDE VER DESDE LA RED O DESDE TU PC NO MAS… ??
    ES ASI??? EXPLIQUENME X FAVOR…

    Y AYUDENME A CREAR UN DOMINIO.COM DESDE MI COMPUTADORA CON LINUX. SIN PAGAR A UNA EMPRESA QUE DA DOMINIOS…

    OSEA QUE QUIERO TENER MI EMPRESA DE HOSTING Y DOMINIOS.

  29. mainoramg says:

    Gracias!!! me funcionó a la perfección.

    Saludos.

  30. zinfinal says:

    AYUDENME ……………?¡?¡?¡?¡?

  31. manolo says:

    muy pero muy buena tu ayuda

    gracias

  32. virender says:

    Muy bien,muchas gracias
    pero falta configurar el master y cliente tambien

    Saludos
    Virender Madrid

  33. Jhon says:

    Funciona!!!!!!!!

    Gracias

  34. Gothic-X says:

    Esta muy bien detallado, pero a lo que me ami respecta prefiero usar las DNS de cdmon y mandar a mis VirtualHost para que quede a la perfeccion
    cualquier duda mi email gothic-x@milleniumteam.com

  35. xergito28 says:

    Fantástico. Un tutorial que funciona a la primera.
    Muchas gracias

  36. Franklin says:

    increible lo mejor que encontre, gracias viejo

  37. deybi says:

    hola me gustaria que alguien me ayude a instalar un servidor asi le puedo dar mi correo y instalarle algun programa de acceso remoto

  38. tommy says:

    excelente tutorial muy bueno ya tengo instalados mi servidor DNS…..

    “Sin embargo me gustaría por favor:” un ejemplo mas de como puedo tener un servidor DNS con su IP1 Y un servidor de correo con su IP2 y un servidor FTP con su IP3… GRACIAS….

  39. tommy says:

    excelente tutorial muy bueno ya tengo instalados mi servidor DNS…..

    \"Sin embargo me gustaría por favor:\" un ejemplo mas de como puedo tener un servidor DNS con su IP1 Y un servidor de correo con su IP2 y un servidor FTP con su IP3… GRACIAS….

  40. CHACHO77 says:

    gracias men muy util

  41. xSx says:

    Muchas Gracias! El mejor tuto de Bind9 que encontre en la Red!

  42. jjrumi says:

    Si quereis tener subdominios dinámicos, basta con añadir:
    * IN A ip

    😀

  43. varas87 says:

    espectacular, muxísisisisisiisimas gracias.
    soy estudiante de programación y lo había buscado en 50.000 páginas, no me funciona ni con los apuntes del profesor, no sabes lo que puedo agradecertelo, grandísimo post.

  44. rego_ventosa says:

    Gracias por el tutorial. Siguiéndolo, y creando mi propio dominio me encuentro que al usa el comando host rego.ventosa.net ( que es mi dominio ), me responde Host rego.ventosa.net not found:2 (SERVFAIL), ¿a que puede deberse? Muchas gracias por todo

  45. javier says:

    tengo una duda poruqe no configuraste el dispositivo nul y randon ya que en toos los manuales lo hacen

    y justamente ando en eso buscando para que sirven

    mknod /var/lib/named/dev/null c 1 3
    mknod /var/lib/named/dev/random c 1 8

    me surgen las sgtes dudas:
    para que me sirven los dispositivos null y randon dentro del dns y como se le asignan los permisos si se asignan chmod 777 /directorio

  46. Nyani says:

    not found: 2(SERVFAIL)
    otra guia fail, me regreso a windows.

  47. Incognyte- says:

    Uff te quedó de 10 el tutorial, me ha servido bastante y sobre todo por que soy nuevo en linux y tenia unos problemas con mi servidor dns, pro esta guia me ha servido de mucho y sobre todo para adentrarme en este nuevo y genial S.O., y el funcionamiento de los dns saludos!. ;D

  48. nitz333 says:

    Después de seguir más de 10 tutoriales que siempre me devolvian servfail este post me funcionó a la perfección. Muy bien explicado

  49. alez says:

    excelente tutorial me fue de gran ayuda para mi proyecto simplemente hay un par de inconsistencias pero muyyyy bueno

    gracias

Leave a Reply