Montar o expandir un laboratorio en casa y quieres estructurar servicios bajo un dominio local limpio y profesional (como casa.lan), migrar desde un dominio heredado o genérico (local.com) es un proceso rápido usando FreeBSD y Unbound como servidor DNS recursivo y autoritativo.
Actualizar la configuración del sistema operativo, estructurar las zonas directas e inversas en Unbound para todos los dispositivos y asegurar la compatibilidad con servicios como NFSv4.
Requisitos previos
- Un servidor FreeBSD con IP fija (en nuestro ejemplo, 192.168.88.160). - Unbound instalado y configurado como servidor DNS principal de la red.
Actualizar /etc/rc.conf
Modificar los parámetros relacionados con el hostname, dominio y servicios que dependen de él (nfsuserd)
hostname="tormenta.casa.lan" domain="casa.lan" nfsuserd_flags="-domain casa.lan"
Actualizar la configuración de Unbound.
Editar el archivo /usr/local/etc/unbound/local-zone.conf
Registrar el nuevo dominio y la máquina
server: local-zone: "casa.lan." static local-data: "casa.lan. IN SOA tormenta.casa.lan. root.casa.lan. 2026092301 3600 900 1209600 3600" local-data: "casa.lan. IN NS tormenta.casa.lan." local-data: "tormenta.casa.lan. IN A 192.168.88.160" local-data: "tormenta. IN A 192.168.88.160"
Verificar la sintaxis de Unbound
unbound-checkconf /usr/local/etc/unbound/unbound.conf
Aplicar los cambios y reiniciar servicios
Cambiar el hostname en caliente
hostname tormenta.casa.lan
service unbound restart service nfsuserd restart
Comprobar que la resolución DNS interna responde correctamente al nuevo dominio. Ejecutar
dig @127.0.0.1 tormenta.casa.lan
; <<>> DiG 9.20.26 <<>> @127.0.0.1 tormenta.casa.lan ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2667 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;tormenta.casa.lan. IN A ;; ANSWER SECTION: tormenta.casa.lan. 3600 IN A 192.168.88.160 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Fri Sep 25 06:36:50 CEST 2026 ;; MSG SIZE rcvd: 62
Actualizar /etc/hosts
El sistema consulta este archivo antes que el DNS. Reemplazar cualquier mención a local.com por casa.lan
192.168.88.160 tormenta.casa.lan tormenta
Actualizar /etc/resolv.conf
Como la IP está configurada de forma estática en rc.conf se deben actualizar manualmente los sufijos de búsqueda DNS de la propia máquina.
search casa.lan nameserver 127.0.0.1
Revisar exportaciones NFS
Si el acceso a los recursos compartidos nombre de dominio en lugar de IP
En /etc/exports comprobar si hay alguna línea que permita el acceso explícito a *.local.com
En el cliente solaris, archivo /etc/resolv.conf
Añadir la línea casa.lan para que el sistema sepa que debe buscar automáticamente en el dominio local al escribir nombre cortos, como hacer ping a tormenta en lugar de tormenta.casa.lan
search casa.lan nameserver 192.168.88.160
Comprobar resolución desde el cliente
ping -c 3 tormenta
Configurar resolución DNS inversa (PTR) para la red 192.168.88.0/24.
Añadir zona inversa en Unbound
El archivo /usr/local/etc/unbound/local-zone.com necesita una zona de búsqueda inversa (in-addr.arpa) para traducir direcciones IP a nombres.
server: # Zona directa existente local-zone: "casa.lan." static local-data: "casa.lan. IN SOA tormenta.casa.lan. root.casa.lan. 2026092301 3600 900 1209600 3600" local-data: "casa.lan. IN NS tormenta.casa.lan." local-data: "tormenta.casa.lan. IN A 192.168.88.160" local-data: "tormenta. IN A 192.168.88.160" # Zona inversa para la red 192.168.88.x (el orden de la IP va invertido en arpa) local-zone: "88.168.192.in-addr.arpa." static local-data: "88.168.192.in-addr.arpa. IN SOA tormenta.casa.lan. root.casa.lan. 2026092301 3600 900 1209600 3600" local-data: "88.168.192.in-addr.arpa. IN NS tormenta.casa.lan." local-data: "160.88.168.192.in-addr.arpa. IN PTR tormenta.casa.lan."
Validar y reiniciar Unbound
unbound-checkconf /usr/local/etc/unbound/unbound.conf service unbound restart
Probar la resolución inversa
Utilizar el comando dig con la opción -x para consultar la IP de tu servidor desde cualquier equipo de la red (o desde el propio servidor):
dig -x 192.168.88.160 @192.168.88.160 carlos@solaris ; <<>> DiG 9.20.26 <<>> -x 192.168.88.160 @192.168.88.160 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21003 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;160.88.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 160.88.168.192.in-addr.arpa. 3600 IN PTR tormenta.casa.lan. ;; Query time: 208 msec ;; SERVER: 192.168.88.160#53(192.168.88.160) (UDP) ;; WHEN: Fri Sep 25 07:00:58 CEST 2026 ;; MSG SIZE rcvd: 87
Para añadir equipos de la red local, (clientes, impresoras, NAS, etc.), se utiliza el archivo /usr/local/etc/unbound/local-zone.conf
Por cada equipo registrado: El registro A (asocia el nombre a la IP) y el registro PTR en la zona inversa (asocia la IP al nombre), para que funcionen herramientas de red, SSH o NFS sin retrasos.
solaris.casa.lan
server: # --- ZONA DIRECTA (casa.lan) --- local-zone: "casa.lan." static local-data: "casa.lan. IN SOA tormenta.casa.lan. root.casa.lan. 2026092301 3600 900 1209600 3600" local-data: "casa.lan. IN NS tormenta.casa.lan." # Servidor principal local-data: "tormenta.casa.lan. IN A 192.168.88.160" local-data: "tormenta. IN A 192.168.88.160" # Nuevos equipos (Ejemplo: solaris) local-data: "solaris.casa.lan. IN A 192.168.88.50" local-data: "solaris. IN A 192.168.88.50" # --- ZONA INVERSA (88.168.192.in-addr.arpa) --- local-zone: "88.168.192.in-addr.arpa." static local-data: "88.168.192.in-addr.arpa. IN SOA tormenta.casa.lan. root.casa.lan. 2026092301 3600 900 1209600 3600" local-data: "88.168.192.in-addr.arpa. IN NS tormenta.casa.lan." # PTR para tormenta local-data: "160.88.168.192.in-addr.arpa. IN PTR tormenta.casa.lan." # PTR para solaris (el último octeto de la IP va primero en arpa) local-data: "50.88.168.192.in-addr.arpa. IN PTR solaris.casa.lan."
Verificar que la sintaxis sea correcta y reiniciar
unbound-checkconf /usr/local/etc/unbound/unbound.conf service unbound restart
Comprobar que los registros (directos e inversos) funcionan y son leidos correctamente por Unbound con el nuevo número de serie
Verificar el registro A
dig @127.0.0.1 solaris.casa.lan ; <<>> DiG 9.20.26 <<>> @127.0.0.1 solaris.casa.lan ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33984 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;solaris.casa.lan. IN A ;; ANSWER SECTION: solaris.casa.lan. 3600 IN A 192.168.88.51 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Fri Sep 25 07:17:43 CEST 2026 ;; MSG SIZE rcvd: 61
Verificar el registro PTR (IP responde a su nombre)
dig -x 192.168.88.50 @127.0.0.1 ; <<>> DiG 9.20.26 <<>> -x 192.168.88.50 @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43540 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;50.88.168.192.in-addr.arpa. IN PTR ;; AUTHORITY SECTION: 88.168.192.in-addr.arpa. 3600 IN SOA tormenta.casa.lan. root.casa.lan. 2026092401 3600 900 1209600 3600 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Fri Sep 25 07:19:26 CEST 2026 ;; MSG SIZE rcvd: 113
Guardar y reiniciar
unbound-checkconf /usr/local/etc/unbound/unbound.conf service unbound restart
Comprobar que NFSv4 está alineado con casa.lan
Archivo /etc/rc.conf
nfsuserd_flags="-domain casa.lan"
Reiniciar servicio
service nfsuserd restart
En los clientes NFSv4 en FreeBSD archivo /etc/rc.conf
nfsuserd_enable="YES" nfsuserd_flags="-domain casa.lan"
Reiniciar servicio
service nfsuserd restart
Montar los recursos compartidos en el cliente usando el nombre de dominio nuevo para referirte al servidor.
mount -t nfs tormenta.casa.lan:/tu/exportacion /punto/de/montaje
Agregar nuevos clientes (synology, tornado, macbook, kamikaze y raspberrypi incluidas las IPs de loopback IPv4/IPv6
server: # ========================================== # ZONA DIRECTA: casa.lan # ========================================== local-zone: "casa.lan." static local-data: "casa.lan. IN SOA tormenta.casa.lan. root.casa.lan. 2026092401 3600 900 1209600 3600" local-data: "casa.lan. IN NS tormenta.casa.lan." # Resoluciones locales (localhost y servidores) local-data: "localhost. IN A 127.0.0.1" local-data: "localhost. IN AAAA ::1" # Tus equipos local-data: "tormenta.casa.lan. IN A 192.168.88.160" local-data: "tormenta. IN A 192.168.88.160" local-data: "synology.casa.lan. IN A 192.168.88.247" local-data: "synology. IN A 192.168.88.247" local-data: "solaris.casa.lan. IN A 192.168.88.51" local-data: "solaris. IN A 192.168.88.51" local-data: "tornado.casa.lan. IN A 192.168.88.183" local-data: "tornado. IN A 192.168.88.183" local-data: "macbook.casa.lan. IN A 192.168.88.43" local-data: "macbook. IN A 192.168.88.43" local-data: "kamikaze.casa.lan. IN A 192.168.88.210" local-data: "kamikaze. IN A 192.168.88.210" local-data: "raspberrypi.casa.lan. IN A 192.168.88.200" local-data: "raspberrypi. IN A 192.168.88.200" # ========================================== # ZONA INVERSA: 88.168.192.in-addr.arpa # ========================================== local-zone: "88.168.192.in-addr.arpa." static local-data: "88.168.192.in-addr.arpa. IN SOA tormenta.casa.lan. root.casa.lan. 2026092401 3600 900 1209600 3600" local-data: "88.168.192.in-addr.arpa. IN NS tormenta.casa.lan." # Registros PTR (Inversos) local-data: "160.88.168.192.in-addr.arpa. IN PTR tormenta.casa.lan." local-data: "247.88.168.192.in-addr.arpa. IN PTR synology.casa.lan." local-data: "51.88.168.192.in-addr.arpa. IN PTR solaris.casa.lan." local-data: "183.88.168.192.in-addr.arpa. IN PTR tornado.casa.lan." local-data: "43.88.168.192.in-addr.arpa. IN PTR macbook.casa.lan." local-data: "210.88.168.192.in-addr.arpa. IN PTR kamikaze.casa.lan." local-data: "200.88.168.192.in-addr.arpa. IN PTR raspberrypi.casa.lan."
Comprobar errores de sintaxis y reiniciar
unbound-checkconf /usr/local/etc/unbound/unbound.conf service unbound restart
Verificar que los equipos nuevos responden en la resolución directa e inversa
Registros A
for equipo in tormenta synology solaris tornado macbook kamikaze raspberrypi; do echo "--- Probando $equipo.casa.lan ---" dig +short @127.0.0.1 $equipo.casa.lan done
Registros PTR IPs a nombres
for ip in 160 247 51 183 43 210 200; do echo "--- Probando 192.168.88.$ip ---" dig +short -x 192.168.88.$ip @127.0.0.1 done
Qué debe ir realmente en el /etc/hosts de cada máquina?
El archivo /etc/hosts del sistema operativo solo se utiliza para la resolución local estática previa al DNS y para que la propia máquina se reconozca a sí misma (loopback y su propia IP). Solo se necesitan las líneas básicas de bucle local y la IP propia del host:
Archivo /etc/hosts del servidor tormenta
::1 localhost localhost.my.domain 127.0.0.1 localhost localhost.my.domain 192.168.88.160 tormenta.casa.lan tormentaFreeBSD es genial!.







