Cómo instalar el servidor DNS Bind en FreeBSD 12

En este artículo vamos a tratar cómo instalar el servidor DNS Bind en FreeBSD 12 paso a paso, de modo que puedas utilizar en tu red local un sistema de resolución de nombres tanto para tus dominios y nombres locales como para nombres en Internet.

Antes de instalar el servidor DNS Bind en FreeBSD 12

Si quieres seguir esta guía de instalación del servicio DNS Bind en FreeBSD 12 será necesario satisfacer los siguientes requerimientos:

  • Una máquina FreeBSD 12 actualizada.
  • Acceso a línea de comandos con un usuario con permisos de sudo.
  • Conexión a Internet.
  • Opcionalmente, otras máquinas y sistemas en red desde los que probar el servicio.

En este tutorial trabajamos con un servidor FreeBSD 12 con dirección IP 192.168.0.104 en una red local privada 192.168.0.0/24. Obviamente su dirección IP es fija, ya sea configurada estáticamente o con reserva estática en el servidor DHCP.

Si ya tienes todo el entorno preparado, es hora de ajustar la altura de tu mesa y abrir tu terminal de comandos favorita.

Cómo instalar el servicio DNS Bind en FreeBSD 12

Vamos a instalar el servidor DNS Bind en FreeBSD 12 desde los repositorios del sistema, por lo que el primer paso es actualizar las listas de paquetes:

~$ sudo pkg update

En el momento de redactar este tutorial disponemos de dos versiones de Bind disponibles en FreeBSD 12, la 9.11 y la 9.16, a través de los paquetes bind911 y bind916 respectivamente. Suele haber ligeros cambios entre una versión y otra, así que por motivos de compatibilidad se suele usar la 9.11. Pero si no tienes necesidades especiales puedes usar perfectamente la última disponible, que es lo que haremos en esta guía.

Instalamos el paquete elegido con el comando pkg:

~$ sudo pkg install -y bind916

Tras descargar e instalar este paquete y sus dependencias disponemos de un nuevo servicio en FreeBSD 12, el servicio named, que no queda iniciado ni en ejecución.

Habilitamos el servicio con el comando service:

~$ sudo service named enable

Igualmente iniciamos el servicio:

~$ sudo service named start

Podemos comprobar que el servicio se encuentra en ejecución:

~$ service named status
named is running as pid 1102.

como instalar el servidor dns bind en freebsd 12

Si necesitas saber la revisión exacta del servicio Bind que estás usando en tu máquina FreeBSD 12 puedes averiguarla con el comando named:

~$ named -v
BIND 9.16.22 (Extended Support Version) <id:59bfaba>

Configuración de los clientes de red

El resto de sistemas de la red local deberían configurarse para usar la máquina FreeBSD 12 donde corre Bind 9 como servidor DNS. Esto puede hacerse de forma manual en cada sistema o configurando el servidor DHCP adecuadamente.

Antes de hacer todos estos cambios en la configuración de red puedes usar herramientas como dig y nslookup para comprobar la conectividad y funcionamiento del servicio Bind en la máquina FreeBSD 12. Precisamente en FreeBSD 12 estas herramientas están incluidas en el paquete bind-tools.

Por tanto puedes instalar dicho paquete en los clientes FreeBSD 12 para realizar pruebas:

~$ sudo pkg install -y bind-tools

No es necesario instalar este paquete en el servidor porque se trata de una de las dependencias de Bind 9.

Cómo configurar el servidor DNS Bind en FreeBSD 12

Al momento de configurar el servicio DNS Bind en FreeBSD 12 hemos de tener en cuenta que sus archivos de configuración se alojan en la ruta /usr/local/etc/named/, siendo named.conf el archivo principal.

Siempre que realicemos ajustes en los cambios de configuración conviene usar el comando named-checkconf para confirmar que no hay errores:

~$ sudo named-checkconf

A continuación veremos algunos de los ajustes más habituales del servicio.

Servicio en red

Por defecto Bind para FreeBSD 12 sólo atiende peticiones locales, así que si lo que quieres es que las máquinas de la red puedan utilizarlo habrá que realizar algún ajuste en el archivo named.conf:

~$ sudo nano /usr/local/etc/namedb/named.conf

Buscamos la directiva listen-on:

...
        listen-on       { 127.0.0.1; };
...

Podemos añadir las direcciones del o de los adaptadores de red de la máquina FreeBSD 12 a los que puedan llegar las peticiones de resolución de nombres o, simplemente, desactivar esta directiva:

...
//      listen-on       { 127.0.0.1; };
...

De esta forma Bind escuchará en todos los adaptadores de red de la máquina.

Guardamos el archivo y comprobamos que la configuración es correcta con el comando named-checkconf:

~$ sudo named-checkconf

Para este tipo de configuración será necesario reiniciar el servicio named:

~$ sudo service named restart

Resolución de nombres de Internet

Para que los clientes de red privada puedan resolver nombres de Internet usando este servicio en una máquina FreeBSD 12 local, editamos el archivo named.conf:

~$ sudo nano /usr/local/etc/namedb/named.conf

Dentro del bloque options añadimos la siguiente directiva:

...
options {
...
        dnssec-validation no;
...
};

Guardamos los cambios y recargamos la configuración del servicio:

~$ sudo service named reload

Desde el servidor podemos probar el funcionamiento del servicio con el comando dig:

~$ dig @localhost freebsd.org

; <<>> DiG 9.16.22 <<>> @localhost freebsd.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14262
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: fd1f6a004cad074b01000000617bf10032c79a6dbca46aef (good)
;; QUESTION SECTION:
;freebsd.org.                   IN      A

;; ANSWER SECTION:
freebsd.org.            3587    IN      A       96.47.72.84

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Oct 29 15:02:56 CEST 2021
;; MSG SIZE  rcvd: 84

Y desde un cliente también podemos hacerlo, indicando como parámetro la dirección del servidor FreeBSD 12:

~$ dig @192.168.0.104 freebsd.org
...
;; ANSWER SECTION:
freebsd.org.            3600    IN      A       96.47.72.84
...

Se puede ganar tiempo en las consultas si en lugar de usar los servidores DNS raíz de Internet usamos servidores caché públicos, como los de Google, o los de nuestro proveedor de acceso a Internet. Es más, se podrán resolver dominios que en principio no serían alcanzables sin configuración adicional.

Para hacer esto añadimos un bloque forwarders, dentro del bloque options, con los servidores DNS caché que queremos utilizar, en este ejemplo los de Google:

...
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
...

Guardamos los cambios, validamos la configuración y recargamos el servicio:

~$ sudo service named reload

Configurar una zona para un dominio

Vamos a crear la zona para el dominio redlocal.net de una red local añadiendo su propio archivo de bases de datos:

~$ sudo nano /usr/local/etc/namedb/master/db.redlocal.net

El contenido inicial será el siguiente:

$TTL 1D
@       IN      SOA ns.red.local. el_instalador.mail.com. (
        0 ; número de serie
        604800 ; refresco
        86400 ; reintento
        2419200 ; expiración
        604800 ; Caché negativa TTL
)

        IN      NS ns.red.local.

ns      A 192.168.0.104

En este archivo vemos un registro SOA «Start of Authority» en el que se indica el nombre del servidor DNS principal, la dirección de correo del administrador (sustituyendo la @ por un punto) y una serie de valores para distintos parámetros de funcionamiento del servicio. Entre estos valores el primero es un número de serie que se debe ir incrementando cada vez que modifiquemos este archivo.

También hay un registro NS para el servidor DNS, aunque si hubiera servidores secundarios podrían añadirse más registros de este tipo.

Por último se pueden añadir otro tipo de registros para cada máquina o dispositivo de la red. Normalmente se añadirá como mínimo el registro que resuelve el propio servidor (o servidores) DNS de la zona.

Guardamos el archivo y comprobamos su sintaxis con el comando named-checkzone, indicando como parámetros el dominio y el archivo de zona correspondiente:

~$ sudo named-checkzone redlocal.net /usr/local/etc/namedb/master/db.redlocal.net
zone red.local/IN: loaded serial 0
OK

Editamos de nuevo el archivo named.conf:

~$ sudo nano /usr/local/etc/namedb/named.conf

Y añadimos al final del contenido un bloque zone para la zona que acabamos de crear:

...
zone "redlocal.net" {
        type master;
        file "/usr/local/etc/namedb/master/db.redlocal.net";
};

Guardamos los cambios y comprobamos el archivo:

~$ sudo named-checkconf

Y recargamos el servicio:

~$ sudo service named reload

Podemos usar el comando dig desde la máquina FreeBSD 12 o desde cualquier cliente de la red que disponga de esta herramienta o similar para resolver el único nombre de la base de datos:

~$ dig @192.168.0.104 ns.redlocal.net
...
;; ANSWER SECTION:
ns.redlocal.net.        86400   IN      A       192.168.0.104
...

Una vez comprobado que Bind funciona para nuestro dominio, podemos editar el archivo y añadir más registros A de otros nombes de dispositivos y máquinas de la red, incrementando el número de serie:

...
        1 ; número de serie
...
ns              A 192.168.0.104
freebsd12       A 192.168.0.104
router          A 192.168.0.1
...
www             A 192.168.0.112

Guardamos los cambios, comprobamos el archivo de zona y recargamos el servicio.

Podemos comprobar con dig cualquiera de los nombres añadidos:

~$ dig @192.168.0.104 www.redlocal.net
...
;; ANSWER SECTION:
www.redlocal.net.       86400   IN      A       192.168.0.112
...

Resolución de inversa

Hemos visto cómo resolver nombres para obtener las direcciones IP asociadas, pero en muchos casos es útil disponer de resolución inversa, que devuelve el nombre de una máquina a partir de su dirección IP.

Para ello creamos un archivo de zona inversa:

~$ sudo nano /usr/local/etc/namedb/master/db.0.168.192

El contenido será el siguiente:

$TTL 1D

@       IN      SOA     redlocal.net. el_instalador.mail.com. (
        0       ; serial
        604800  ; refresh
        86400   ; retry
        2419200 ; expires
        604800  ; TTL negative cache
)

        IN      NS      ns.redlocal.net.

104     IN      PTR     ns.redlocal.net.
104     IN      PTR     freebsd12.redlocal.net.
1       IN      PTR     router.redlocal.net.
112     IN      PTR     www.redlocal.net.

En esta ocasión en el registro SOA indicamos el dominio de la zona, y los registros que asocian direcciones IP con nombres son del tipo PTR.

Guardados los cambios, verificamos el archivo con named-checkzone de la misma forma que para los archivos de resolución directa:

~$ sudo named-checkzone 0.168.192 /usr/local/etc/namedb/master/db.0.168.192
zone 0.168.192/IN: loaded serial 0
OK

Ahora editaremos named.conf para incluir el archivo de zona inversa:

~$ sudo nano /usr/local/etc/namedb/named.conf

Al final del archivo añadimos el siguiente bloque zone:

...
zone "0.168.192.in-addr.arpa" {
        type master;
        file "/usr/local/etc/namedb/master/db.0.168.192";
};

Guardamos el archivo, lo comprobamos y recargamos el servicio:

~$ sudo service named reload

Para comprobar la resolución inversa podemos usar desde cualquier sistema en red un comando como nslookup indicando como primer parámetro la dirección IP a resolver (y como segundo parámetro la dirección IP del servidor FreeBSD 12 si no está configurado como servidor DNS por defecto).

Por ejemplo, desde el propio servidor FreeBSD 12 donde corre el servicio DNS Bind 9:

~$ nslookup 192.168.0.104 localhost
104.0.168.192.in-addr.arpa    name = ns.redlocal.net.
104.0.168.192.in-addr.arpa    name = freebsd12.redlocal.net.

Y desde otra máquina en red:

~$ nslookup 192.168.0.104 192.168.0.104
104.0.168.192.in-addr.arpa    name = ns.redlocal.net.
104.0.168.192.in-addr.arpa    name = freebsd12.redlocal.net.

Conclusión

Ahora que sabes cómo instalar el servidor DNS Bind en FreeBSD 12 ya puedes resolver nombres tanto de Internet como de dominios locales en redes privadas fácilmente y en cuestión de instantes.

Si te ha surgido alguna duda o pregunta, quieres hacer alguna sugerencia, etc. puedes dejar un comentario (están moderados para evitar molesto SPAM, pero se revisan a diario).

¡Apoya comoinstalar.me!

¿Ya puedes resolver nombres DNS en tu red local gracias a nuestro pequeño tutorial? Si es así y quieres agradecérnoslo ayudándonos a mantener este sitio en línea, puedes hacerlo dejando una propina a partir de 1 $ desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarnos a un cappuccino:

¡Gracias!

Valora esta entrada

5/5 - (1 voto)

9 comentarios en «Cómo instalar el servidor DNS Bind en FreeBSD 12»

  1. Hola. He hecho el tutorial pero me sale este error: ** server can’t find freebsd13.2.es: SERVFAIL

    Mi db.redlocal.net es el siguiente:

    $TTL 1D
    @ IN SOA freebsd13.2.es. carlos.mail.com. (
    2 ; número de serie
    604800 ; refresco
    86400 ; reintento
    2419200 ; expiración
    604800 ; Caché negativa TTL
    )

    IN NS freebsd13.2.es.

    ns A 192.168.137.224
    freebsd13.2.es A 192.168.137.224

    Y en el named.conf he puesto lo siguiente:

    zone «freebsd13.2.es» {
    type master;
    file «/usr/local/etc/namedb/master/db.redlocal.net»;
    };

    ¿A qué se puede deber el error? (freebsd13.2.es es mi hostname y 192.168.137.224 es mi IP)

    Muchísimas gracias.

    Responder
    • El archivo de zona, en tu caso, debería llamarse db.2.es, ya que la constumbre es usar el dominio en el nombre del archivo para ayudar a organizar un poco las cosas.

      En cuanto a la configuración en sí, has usado estos registros A:


      ns A 192.168.137.224
      freebsd13.2.es A 192.168.137.224

      ¿Has probado estos?


      ns A 192.168.137.224
      freebsd13 A 192.168.137.224

      Responder

Deja un comentario