Skip to main content

Redirigir consultas DNS a servidor interno

Puede que en su empresa o casa disponga de un servidor DNS como PiHole para que bloquee no solo la publicidad, si no también la resolución de dominios maliciosos. Puede configurar el servidor DHCP para que proporcione las IP de los servidores DNS de los PiHole, pero que pasa con aquellos dispositivos IoT que tienen hardcodeada las IP y resuelven contra los servidores DNS de Google? Y si un usuario de la red decide ponerse otros servidores como DNS?

La idea es forzar al firewall a reenviar todas las peticiones DNS que vayan a servidores externos hacia el servidor DNS interno para proteger el dispositivo frente a resolución de dominios no deseados. Para ello es necesario crear una redirección en el firewall.

Acceda a Firewall > Aliases y genere un alias con todos las IP de los servidores internos. Añada tantas IP como servidores DNS internos disponga.

A continuación añada otro alias con los servidores externos a los que quiere que PiHole resuelva en caso de no conocer el dominio y no estar en una lista.

Cree un alias con el servidor DNS principal.

Acceda a Firewall > Rules y añada la siguiente regla en la parte superior que permitirá el tráfico de los servidores DNS Pihole hacia los servidores externos.

Protocol Source Destination Port Gateway Queue
IPv4 TCP/UDP PiHole DNS (alias) External DNS Servers (alias) 53 * none

A continuación acceda a Firewall > NAT y añada una nueva regla NAT. Seleccione la interfaz de origen (desde donde se iniciará la petición DNS del cliente), IPv4 y protocolo TCP/UDP

Como origen seleccione el alias de PiHole DNS (servidores DNS pihole). Marque la casilla invert match y deje el puerto de origen como ANY.

En la sección de destino, haga lo mismo pero el puerto de destino seleccione DNS.

En la seccion redirect, seleccione Single Host y ponga el alias del Pihole Master que ha definido.

Guarde los cambios, la regla debería quedar parecido a esta.

Vuelva a Firewall > Rules y seleccione la VLAN que ha puesto como origen al crear la regla NAT. Podrá ver que en la parte inferior aparece dicha regla NAT (en descripción pondra NAT). Posicionela donde crea conveniente (preferiblemente de las primeras).

Con esto hemos creado la siguiente condicion. Toda aquella petición DNS que no venga de los servidores PiHole y no tenga como destino a los servidores PiHole, reenviaremos al servidor PiHole primario. De esta forma aunque un cliente se configure un servidor DNS externo, el firewall hará el cambio y lo reenviará al interno (sin que el cliente lo sepa).

La segunda regla, permite a los servidores PiHole comsultar a los servidores DNS externos (esto solo es necesario si tiene el firewall configurado como allow list (solo permite lo explicitado)).

Puede probar mediante una consola cmd en un sistema Linux o Windows que esté dentro de la red indicada, a consultar un dominio interno pero indicando el servidor DNS 8.8.8.8

Vacie la cache DNS, para sistemas Windows

ipconfig /flushdns

Y ejecute el comando de consulta

nslookup dominio.solo.interno 8.8.8.8

Como es de esperar al ser un dominio interno, Google no conocerá su IP y debería responder con NXDOMAIN (no existent domain), sin embargo como se puede ver en la imagen, responde con la IP local

Lo mismo sucede con cualquier otro servidor DNS externo y otro dominio interno.

Ahora podrá estar seguro que todas las consultas DNS pasan por su servidor PiHole, se bloquearán o serán resueltas correctamente, pero sobretodo, quedará registrada la consulta DNS (que luego puede ayudar si se envian dichos logs a un SIEM).

Realice la prueba desconectado de dicha red para que no le aplique la regla de NAT y compruebe que Google o cualquier otro servidor DNS externo le responde con NXDOMAIN.