- Mensajes
- 6,512
Introducción
Hoy os traigo un nuevo manual, de corte muy sencillito, para que securicéis vuestras peticiones DNS, usando DoH. O lo que es lo mismo, usar HTTPS para vuestras peticiones al servidor DNS. Actualmente, prácticamente el 99% de las páginas que visitáis establecen una conexión segura vía HTTPS, sin embargo es una cosa que aún no se usaba a nivel DNS. ¿Qué significa esto? Que cualquiera puede espiar vuestra navegación. No el qué, pero sí el dónde, puesto que vuestras peticiones DNS atraviesan los routers de vuestras operadoras en plano, siendo perfectamente visible para ellos qué páginas vistas, no así lo que haces en ellas.Propósito
El propósito del manual es bien sencillo: alejar vuestra navegación de mirones indeseados. De esta manera "sólo" vuestro provedor DNS sabrá qué consumís, pero no vuestro operador. Si él realiza algún tipo de filtrado DNS, este no os afectaría, puesto que la resolución de nombres, entre vuestro router y vuestro proveedor DNS, estaría cifrada por HTTPS, al igual que el resto de navegación.Manos a la obra
Realizar esto es realmente sencillo, y simplemente tenemos que seguir tres pasos:Primero: obtener el certificado raiz (CA) que valide la conexión HTTPS que vamos a establecer con nuestro proveedor DNS. Esto normalmente pasa de manera automática en un navegador, puesto que estos inlucluyen un set de CA's (entidades certificadoras) públicas que se mantienen actualizadas. Pero, al tratarse de un router, esas CA's no existen. Lo que vamos a hacer es importar el certificado raiz que verificará, posteriormente, que el certificado HTTPS de nuestra conexión con el proveedor de DNS es válido y que puede usarse para cifrar dicha conexión. En nuestro ejemplo, vamos a usar CloudFlare, así que bajaremos el certificado raíz que usa dicho proveedor en nuestro router
Código:
/tool fetch url=https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
Segundo: una vez obtenido el certificado, lo importamos en el router. El comando anterior habrá dejado el certificado en la carpeta "Files" del router. Ahora podemos ir a System -> Certificates -> Certificates (pestaña) e importar el certificado en cuestión, usando para ello el botón Import. Sino, podemos hacerlo fácilmente también desde el terminal, usando el siguiente comando
Código:
/certificate import file-name=DigiCertGlobalRootCA.crt.pem
Tercero: una vez hecha la importación, es el momento de activar el DoH en nuestro router. La opción la tenemos en IP -> DNS. Concretamente, rellenaremos el campo "Use DoH Server" y marcaremos la opción de "Verify DoH Certificate", puesto que nuestro router ahora confía en la CA que hemos importado, la cual puede verificar que la conexión con la URL del DoH es válida y nadie nos está impersonando dicha comunicación, confiando así el cifrado que se realice en dicha conexión. En este caso, como dijimos que íbamos a usar Cloudflare, ponemos en ese campo la URL en cuestión:
Código:
/ip dns set use-doh-server=https://cloudflare-dns.com/dns-query verify-doh-cert=yes
Cuarto: asegurarnos de que tenemos manera de resolver el nombre de dominio del servidor DoH. Aunque esto os parezca extraño, aún seguimos necesitando tener, al menos, un servidor DNS tradicional para que todo esto funcione. ¿Por qué? Pues porque, sencillamente, la petición a la URL del DoH no se resuelve sola, puesto que no deja de ser un dominio más. Para esto, tenemos dos opciones:
A) Mantener al menos un servidor tradicional en IP -> DNS. Con mantener unos sobra. Ese servidor sólo se usará para la petición del DoH y, una vez funcionando esto, se ignorará en favor de la conexión cifrada
B) Meter como estáticas las IP's que están detrás del dominio cloudflare-dns.com. En este caso, tendríamos que crear entradas estáticas de tipo A en nuestro DNS estático (botón Static) resolviendo las dos IP's que están detrás de ese dominio cloudflare-dns.com: 104.16.248.249, 104.16.249.249. En el momento en el cual estén definidas esas entradas, podríamos quitar el DNS no cifrado de la primera pantalla, en el campo Servers:
C) Usar las URL's de DoH que apuntan directamente a los dominios por IP [by @PeRRo_RoJo_], en lugar de por nombre de dominio. De esta manera, tampoco hace falta mantener ningún dominio tradicional, puesto que resuelve por IP:
Como los certificados están bien hechos y también incluyen estas IP's como CN's alternativos, podemos mantener activa la validación del certificado en el router, usando la misma CA raíz.
Con esto ya tendríamos funcionado DoH en nuestra red principal. Ahora sólo tenemos que asegurarnos de que nuestro router está entregando como DNS primario la IP de nuestro propio router. Para probar que todo está funcionando, vamos a la siguiente dirección y corremos una prueba de ESNI Checker, en CloudFlare. Si lo hemos hecho todo bien, la primera columna debería de aparecer en verde:
BONUS TRACK: Cómo combino esto con un pi-hole, ya funcionando en mi red, y que además filtra anuncios?
Muy sencillo, simplemente le diremos al pi-hole que su servidor de upstream, en lugar de ser un servidor público, es nuestro propio router. Así las peticiones ya vendrás resueltas por HTTPS del mundo exterior hasta nuestro router (seguras) y, a partir de la caché del propio router, el pi-hole aplicará su filtrado. Desactivamos la lista de Upstream DNS Servers de la izquierda, y en la derecha metemos uno personalizado, par IPv4.
RE-BONUS TRACK: ¿Puedo usar las extensiones de Families con DoH?
Si eras de los que usaba los DNS de CloudFlare con las extensiones de families que filtraban malware (1.1.1.2 / 1.0.0.2) y malware + porno (1.1.1.3 / 1.0.0.3), estás de suerte, puesto que sus equivalentes dominios existen para DoH. Serían estos:
- DNS DoH con bloqueo malware: https://security.cloudflare-dns.com/dns-query | https://1.1.1.2/dns-query
- DNS DoH con bloqueo malware más bloqueo de contenido para adultos: https://family.cloudflare-dns.com/dns-query | https://1.1.1.3/dns-query
Espero que os guste, y os resulte sencillo implementar esta solución.
Saludos!
Última edición: