Admin Libre - Administración de sistemas y redes

Red doméstica con DNS reverso y caché local
Por Francisco Gaitán el 15 de Agosto de 2023

Usaré unbound(8) como servidor DNS autoritativo, unwind(8) como servidor DNS caché y dhcpd(8) en OpenBSD 7.3 para una red doméstica con dominio home.arpa partiendo de una red con un router OpenBSD.

  • Uso del dominio de uso especial home.arpa. para cada equipo.
  • Validación DNSSEC para las consultas DNS externas a la red local.
  • Caché DNS local en los equipos conectados al router.
  • DHCP para la configuración automática de IPv4 según la dirección MAC.

Esta configuración se puede mejorar incorporando el cortafuegos DNS unbound-adblock en el router.

Configuración en el router

unbound

Con esta configuración correspondiente al archivo /var/unbound/etc/unbound.conf definimos los distintos hosts de la red con su IP y DNS reverso. También activaré la validación DNSSEC para dominios externos.

[...]
# Estas direcciones pertenecen a mi red privada
private-address: 192.168.10.0/24
# Permite a este dominio y sus subdominios tener direcciones privadas
private-domain: home.arpa
# Sirve estas zonas autoritativamente para los clientes DNS
local-zone: "home.arpa." static
local-data: "foo.home.arpa.	IN	A	192.168.10.1"
local-data: "bar.home.arpa.	IN	A	192.168.10.2"
local-data: "wu.home.arpa.	IN	A	192.168.10.3"
# DNS reverso
local-zone: "10.168.192.in-addr.arpa." static
local-data-ptr: "192.168.10.1	foo.home.arpa"
local-data-ptr: "192.168.10.2	bar.home.arpa"
local-data-ptr: "192.168.10.3	wu.home.arpa"
# DNSSEC (must run unbound-anchor(8) first)
auto-trust-anchor-file: "/var/unbound/db/root.key"
[...]

Activo y arranco unbound:

# rcctl enable unbound
# rcctl start unbound 

nsd

Otra opción es delegar la zona con un dominio real servida con nsd y configurarlo como forward-zone en unbound. Para que funcione he configurado local-zone como transparent.

dhcpd

Esta configuración corresponde al archivo /etc/dhcpd.conf. Asigna el dominio home.arpa y el servidor DNS del router 192.168.10.1, proveyendo IPs en el rango 192.168.10.200 a 192.168.10.254, con un par de IPs estáticas asignadas según la dirección MAC física. Para más información consultar dhcpd.conf(5).

option domain-name "home.arpa";
option domain-name-servers 192.168.10.1;

subnet 192.168.10.0 netmask 255.255.255.0 {
        range 192.168.10.200 192.168.10.254;
        default-lease-time 600;
        max-lease-time 7200;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.10.255;
        option routers 192.168.10.1;
        option autoproxy-script "\n";  # Para clientes Windows 

        host bar.home.arpa {
                hardware ethernet xx:xx:xx:xx:xx:xx;
                fixed-address 192.168.10.2;
        }
        host wu.home.arpa {
                hardware ethernet yy:yy:yy:yy:yy:yy;
                fixed-address 192.168.10.3;
        }
}

Activo y arranco dhcpd, especificando la interfaz vport0 que es el puente de red que tengo en mi router:

# rcctl enable dhcpd
# rcctl set dhcpd flags "vport0" 
# rcctl start dhcpd

Configuración en el host

/etc/resolv.conf

Estas líneas hacen lo siguiente (explicado en resolv.conf(5)).

  • El servidor DNS a consultar será 127.0.0.1 donde responde unwind
  • Primero consulta el archivo /etc/hosts y si no encuentra respuesta consulta al servidor DNS
  • Busca los hosts no localizados en el dominio home.arpa
nameserver 127.0.0.1
lookup file bind
search home.arpa

/etc/unwind.conf

Configuraré unwind para que reenvíe las peticiones al servidor unbound que corre en router (IP 192.168.10.1), guardándolas en su propia caché de acuerdo a los valores TTL de la zona. En la siguiente línea pido a unwind que de por válidas las respuestas DNS relativas a la red home.arpa las cuales no están protegidas por DNSSEC y de lo contrario fallarían.

forwarder { 192.168.10.1 }
force accept bogus forwarder { home.arpa }

Arrancando y probando la nueva configuración

# rcctl disable resolvd
# rcctl stop resolvd
# rcctl enable unwind
# rcctl start unwind

Algunas pruebas:

$ host foo
foo.home.arpa has address 192.168.10.1
$ host 192.168.10.2
2.10.168.192.in-addr.arpa domain name pointer bar.home.arpa.

Destacado

Contacto

Si has encontrado algún error o quieres comentarme algo mándame un correo a webmaster@adminlibre.org