Red doméstica con DNS reverso y caché local
Por 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.