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.
Contenido
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.
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!
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.
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
…
Hola. He cambiado lo que me has dicho y me sigue saliendo este error:
** server can’t find freebsd13: NXDOMAIN
No se a qué se puede deber 🙁
Muchas gracias.
Perdona, Carlos, ahora he visto el error.
En el archivo named.conf has llamado a la zona así:
zone «freebsd13.2.es» {
Cuando deberías haberlo hecho así:
zone «2.es» {
Ya que el nombre de la zona es el dominio que configuras, no el nombre de una máquina.
Holaaa,
Se me olvidó responderte. Efectivamente era por eso.
¡Muchas gracias!
¡Estupendo, Carlos!
Muchísimas gracias por este tutorial 🙂
De nada, Bernardo.
¡Enorme! Muchas gracias por la ayuda 🙂