MANUAL: Mikrotik, securizar el DNS usando DoH (DNS over HTTPS)

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​
1608055765307.png
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:​
1608056320593.png
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:​
1608104956652.png
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.​
1608105142950.png

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:

1608057479141.png



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.

1608057277746.png


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:

Espero que os guste, y os resulte sencillo implementar esta solución.

Saludos!
 
Última edición:
deseando empezar a poner en practica todas tus enseñanzas....tal vez el jueves ya me llegue el hAP ac3 ;)
de momento el pi-hole funcionando a tope .
gracias y saludos
 
Que bien me habría venido este manual hace unos meses. Super genial explicado.

Añade un bonus más si quieres: Si utilizas esta URL:
Código:
https://1.1.1.1/dns-query
Ya no hace falta poner ni un solo DNS por ningún lado, dado que no hace falta resolver nada.

Salu2!! ;)
 
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:

Esta tercera parte no me funciona:

Código:
[admin@MikroTik] > /ip dns set use-doh-server=https://cloudflare-dns.com/dns-query verify-doh-cert=yes                       
expected end of command (line 1 column 13)

Sí le doy al tabulador:

Código:
[admin@MikroTik] > /ip dns set                                                  allow-remote-requests  max-concurrent-queries       query-server-timeout
cache-max-ttl          max-concurrent-tcp-sessions  query-total-timeout
cache-size             max-udp-packet-size          servers             
[admin@MikroTik] >

En mi router (hAP lite) no exitsen ni use-doh-server ni verify-doh-cert.

Desde la WebFig tampoco existen dichos apartados.
 
Esta tercera parte no me funciona:

Código:
[admin@MikroTik] > /ip dns set use-doh-server=https://cloudflare-dns.com/dns-query verify-doh-cert=yes                      
expected end of command (line 1 column 13)

Sí le doy al tabulador:

Código:
[admin@MikroTik] > /ip dns set                                                  allow-remote-requests  max-concurrent-queries       query-server-timeout
cache-max-ttl          max-concurrent-tcp-sessions  query-total-timeout
cache-size             max-udp-packet-size          servers            
[admin@MikroTik] >

En mi router (hAP lite) no exitsen ni use-doh-server ni verify-doh-cert.

Desde la WebFig tampoco existen dichos apartados.
Actualiza la versión de RouterOS, tendrás alguna vieja corriendo. El soporte de DoH es algo relativamente nuevo.

Saludos!
 
Que bien me habría venido este manual hace unos meses. Super genial explicado.

Añade un bonus más si quieres: Si utilizas esta URL:
Código:
https://1.1.1.1/dns-query
Ya no hace falta poner ni un solo DNS por ningún lado, dado que no hace falta resolver nada.

Salu2!! ;)
De lujo! Luego lo añado, esta no me la sabía. ¿Has comprobado que el certificado pasa la validación para ese “dominio”?

Saludos!
 
@pokoyo, he oído por ahi que securizar los DNS ralentiza la navegación. ¿Es cierto?
Claro. Al final no deja de ser una petición cifrada. Encriptar y desencriptar gasta tiempo. Pero sólo pierdes tiempo mientras se va llenando la caché del mikrotik. En mis pruebas una primera resolución de un nombre que no está en caché tarda entre 300-400ms. De caché, diez veces menos, sobre 30-40ms.

Esto habría que compararlo con lo que tarda en resolver lo mismo desde un dns público sin DoH. Puedes usar el comando dig desde un terminal Unix para compararlo.

Saludos!
 
Esto del DNS cifrado sigo sin verlo... esto ralentiza bastante en entornos productivos...

Sent from my SM-N950F using Tapatalk
 
Actualiza la versión de RouterOS, tendrás alguna vieja corriendo. El soporte de DoH es algo relativamente nuevo.
Tenía la ultima versión long-term ( v6.46.8 ) descargada esta madrugada y he tenido que pasar a la ultima estable ( v6.47.8 ). Con eso ha ido bien.

Pero en https://www.cloudflare.com/es-es/ssl/encrypted-sni/ me sale esto:
Captura de pantalla -2020-12-16 16-43-14.png


Código:
[admin@MikroTik] > /ip dns print                                                                      servers: 1.1.1.1,1.0.0.1
              dynamic-servers: 212.230.135.2,212.230.135.1
               use-doh-server: https://1.1.1.1/dns-query
              verify-doh-cert: yes
        allow-remote-requests: yes
          max-udp-packet-size: 4096
         query-server-timeout: 2s
          query-total-timeout: 10s
       max-concurrent-queries: 100
  max-concurrent-tcp-sessions: 20
                   cache-size: 2048KiB
                cache-max-ttl: 1w
                   cache-used: 39KiB

Los dynamic-servers, ¿son los dns dinamicos del subdominio que regala mikrotik? o ¿vienen heredados de mi isp?
¿como podría quitarlos?

¿Como puedo conseguir DNSSEC?
 
Última edición:
Estás saliendo por los DNS dinámicos de tu ISP. Quítalos de la conexión WAN, de la que salgas. Si tu conexión WAN se establece por cliente dhcp, ve a IP -> DHCP Client, y desmarcas el "Use Peer DNS"

1608135198554.png
Una vez hecho, reinicias el equipo para que limpie la caché y arranques desde cero (o le borras las caché DNS a mano)

Saludos!
 
Cuantas cosas estoy leyendo que me harán falta.
Hay para escribir un libro :)
Que ganas de ponerlo en práctica.....
A ver si mañana hay suerte y me llega
Saludos
 
Cuantas cosas estoy leyendo que me harán falta.
Hay para escribir un libro :)
Que ganas de ponerlo en práctica.....
A ver si mañana hay suerte y me llega
Saludos
Jejeje, le tienes ganas eh? Jolín, creo que no había dado con nadie tan entusiasmado con el equipo como tú! A ver si de verdad cumple con tus expectativas.

Saludos!
 
Seguro que si,lastima es no poder sacarme el zte f680 de yoigo de encima .
Pero tengo ganas de poder llevar a la práctica lo ensayado estos dias con el hap mini ( salvando las distancias ;))
El “problema” es que cada dia cuando me conecto al foro leo algo nuevo que ni sabia que se podia hacer con un router.
Seguramente tendré momentos de desanimo, no por el mikrotik , mas bien por mi falta de conocimientos en algunos aspectos.
Pero a ilusión y ganas de aprender no me ganan
 
Seguro que si,lastima es no poder sacarme el zte f680 de yoigo de encima .
Pero tengo ganas de poder llevar a la práctica lo ensayado estos dias con el hap mini ( salvando las distancias ;))
El “problema” es que cada dia cuando me conecto al foro leo algo nuevo que ni sabia que se podia hacer con un router.
Seguramente tendré momentos de desanimo, no por el mikrotik , mas bien por mi falta de conocimientos en algunos aspectos.
Pero a ilusión y ganas de aprender no me ganan
Pero eso es super sencillo de cubrir. Tu falta de conocimiento, con un poco de ganas, se cubre enseguida. Créeme que yo no tenía ni papa de estos chismes hasta hace unos años, y me compré el hEX estando en el extranjero para montar una VPN. Lo hice y, como no me valía para nada más, lo metí en un cajón. Y no ha sido hasta hace un par de años, ya de vuelta, cuando le metí mano de verdad. Y, si bien tengo un background técnico y me gustan las redes, no soy ningún experto en estos temas, lo que he aprendido lo he hecho por mi cuenta.

Así que, por la falta de conocimiento, no lo hagas. Y, si ya tienes un equipo, practica con él, que práctiamente todo se puede hacer. Por ejemplo, el tema de CAPsMAN, es algo que puedes probar con ese equipo, haciendo que él solo se provea así mismo, haciendo al mismo tiempo de CAPsMAN y de CAP. No vas a poder probar lo de la red de 5GHz, pero salvo eso, el resto sí que lo puedes ir probando.

Saludos!
 

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:

Ver el adjunto 75712


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.

Ver el adjunto 75709

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:

Espero que os guste, y os resulte sencillo implementar esta solución.

Saludos!
https://www.reddit.com/r/mikrotik/comments/kd5w25 Después que lo arreglen, sería bueno que pusieras un "Extra Track" de vincularlo con Unbound.
 
Arriba