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. noriaespi says:

    Excelente manual, claro muy conciso y con mucha información. Muchas gracias.
    Un 10

  2. japg says:

    Muchas gracias fue de mucha utilidad y totalmente claro

  3. manuel says:

    Muy buen manual, me funciono al 100%!

  4. jonathan says:

    Esta configuracion no funciona correctamente.

  5. muy buen manual gracias por el aporte

  6. Luis E says:

    Excelente tutorial!!.

  7. Jordi says:

    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.”

  8. necsuss says:

    Muy claro! Gracias…pero lo del CAPTCHA es una kaka 😀

  9. necsuss says:

    Hola! soy bastante nuevo en esto de crear tus propios servers y gestionarlos. Creía que crear y gestionar mails era cosa hecha, pero despues de leer, leer y leeer sigo sin hacer funcionar lo que quiero que funcione, si es posible que funcione. Mi problema es el siguiente:

    Tengo dos dominios comprados “dominio1.com” y “dominio2.com”, a su vez, estos apuntan a dos cuentas NO-IP (ya que no tengo ip fija, y por no pagar mas…bueno, pues ya sabeis). Estos dos dominios me los gestiona apache y van la mar de bien.
    Esto era la “intro” el problema es el siguiente:

    Yo tengo una unica maquina que gestiona los dos dominios. El otro dia me dio por intentar configurar dos cuentas diferentes de correo, la del domini1.com y la del dominio2.com. A la hora de enviar correos a las dos direcciones desde gmail (por ejemplo) no tengo ningun problema, funciona perfectamente, pero cuando quiero enviar desde cualquiera de las dos cuentas siempre me envia con el mismo dominio, el dominio1. Alguien sabria indicarme si es posible enviar con los dos dominios diferentes?¿ desde la misma maquina claro

    PD: cuando cambio myorigin= dominio1 por dominio2 no hace nada de nada

    Muchas gracias por adelantado!!

  10. loko0528 says:

    amigo he pasado por varios tutoriales de dns.
    todos me salian mal el unico que realmente explica por que se hace cada cosa es el suyo.

    despues de este y una hora de cacharreo ya he dominado el tema.

    muchas gracias por el curro.

  11. Muy buena info, saludos

  12. Miguel says:

    he hecho muchas veces servers bind por ubuntu servers. pero no logro que se vea por internet solo se ve localmente lo he hecho de muchas formas pero me sale con lo mismo resultados..
    quiero configurar los ns por ejemplo ns1.ejemplo.com ( me lo piden para comprar mi dominio)
    quisiera saber como configurarlo bien…

    gracias por su respuesta…..

  13. Esta guia es legendaria, ni se hace cuanto que la consulto, muchas gracias, realmente muchas gracias,

  14. sergi says:

    asdfasf y alcachofas

  15. erm3nda says:

    “Esta guía es legendaria” jje para mí es totalmente nueva, y muy útil y bien explicada. Gracias. Moltes gràcies per la seva guía 🙂

  16. Carlos says:

    Una consulta, una vez hecho eso si tu dominio lo tienes linkeado a otro DNS y quieres linkearlo a esta cómo lo haces? es decir, colocas NS1.domino.com o NS1.ip?

    Agradezco tu respuesta

  17. Naufal says:

    Muchas gracias por este maravilloso tutorial 🙂

  18. Aitor kojima says:

    Ahì le dejo mis dies! Esta padre!!! 🙂

  19. Sergio says:

    MUCHÍSIMAS GRACIAS FUNCIONO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  20. Ocnarfch says:

    Ayudenme ami no me salio la Inversa tengo esto
    zone “192.in-addr.arpa” {
    type master;
    file “/etc/bind/db.192”;
    };

    LA DIRECTA

    ;
    ; BIND data file for local loopback interface
    ;
    $TTL 604800
    @ IN SOA ocnarfch.com. root.ocnarfch.com. (
    2 ; Serial
    604800 ; Refresh
    86400 ; Retry
    2419200 ; Expire
    604800 ) ; Negative Cache TTL
    ;
    @ IN NS ocnarfch.com.
    @ IN A 192.168.1.104
    @ IN MX 0 ocnarfch.com.
    www IN A 192.168.1.104
    ocnarfch-PC IN CNAME ocnarfch.com.

    LA INVERSA

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

    Espero que me puedan ayudar la directa si me sale la inversa me sale esto

    root@ocnarfch-PC:/etc/bind# host 192.168.1.104
    Host 104.1.168.192.in-addr.arpa. not found: 3(NXDOMAIN)

Leave a Reply