Unbound, ahora el DNS central de mi red

Después de haberme pasado de Pi-hole a AdGuard Home y lograr que todo funcionara bien, siempre había algo que me hacía sentir que faltaba algo y es que cada cierto tiempo que entraba, me saltaban a los ojos los números del tiempo de respuesta del DNS que resolvía los dominios. Veía que pasaba de 1 ms o 3 ms a más de 30 ms, y eso no me caía muy bien, además, al hacer dig no lo tomaba desde la caché en algunas webs

;; ANSWER SECTION:
github.com.		58	IN	A	140.82.112.3

;; Query time: 150 msec

como se ve, luego de un tiempo el query time pasa de ser 1ms a 150ms y eso es algo que no me gusta porque aunque no es mucho pienso que al usar el optimistic cache de AdGuard Home debería enviar los antiguos datos que tiene en cache, pero este no lo hace bien

adrian Avatar
Adrian
📌 A diferencia de Unbound, AdGuard Home no cuenta con una función equivalente a serve-expired, por lo que si el TTL expira y el dominio aún no ha sido resuelto de nuevo, simplemente no lo devuelve desde caché.
rita Avatar
Rita
¡Ay hijita! Con razón tu DNS parecía choborra, caminaba lento y sin rumbo fijo 😆. Ese AdGuard ya estaba pal retiro. Bien ahí metiéndole su Unbound con sus Redis, su TTL, todos sus recutecus. ¡Ahora sí, vuela esa red como combi sin paradero!

además, el usar ese caché que tiene un tiempo alto en algunas apps de banco japoneses estas terminan por no funcionar bien, ya que suelen cambiar de IP frecuentemente, y eso hace que den errores

adrian Avatar
Adrian
💡 En algunos bancos japoneses, las apps móviles cambian de IP con frecuencia por seguridad. Si el resolver guarda una IP antigua, puede causar errores de conexión. Esto se agrava si se usa un caché mal configurado como el de AdGuard Home con optimistic cache.

además, claro, de las actualizaciones que se tienen que hacer para que todo esté bien y al día, o para arreglar cosas que en la versión anterior se habían arruinado

decisión de cambiar a Unbound de forma directa…

Antes no quería cambiar directamente a Unbound, porque pensaba que era imposible usar las listas de bloqueo disponibles, pero eso se puede solucionar fácil con un script que los convierta de:

0.0.0.0 bad-domain.ks

pasaría a ser:

local-zone: "bad-domain.ks." always_null
rita Avatar
Rita
¡Ahí está, Kaotchi! Ahora sí esos dominios se van al tacho sin hacerla larga. Antes con ese 0.0.0.0 era como decirles “ya hijito, pasa nomás”. ¡No mi ciela! Acá no pe, con always_null se van de patitas pa la calle 🤣.
kaotchi Avatar
Kaotchi
Claro, porque no me sentiría muy segura solo usando el DNS sin bloquear los dominios malvados 😤.
rita Avatar
Rita
¡Y no va chel! Si no los bloqueas, se te meten hasta por el enchufe 😤.

todo esto haciéndolo con un script que también corre cada cierto tiempo y que se puede programar en cron, con lo que sería lo mismo que tiene AdGuard Home. También se puede poner un whitelist, de modo que, tras cambiar los dominios a bloquear, el whitelist recorra todo el archivo y elimine aquellos que estén permitidos.

También quería algo para poder usar DNS-over-TLS (DoT), y eso también se puede hacer fácilmente en Unbound. En total, los puntos fuertes que tiene AdGuard Home se pueden replicar con un poco de tiempo en Unbound.

vamos a por lo que me cambié a Unbound…

lo principal, como había dicho, era que me molestaba que no usara el cache al terminarse el TTL y esto es muy fácil en Unbound con solo cambiar unas configuraciones:

serve-expired: yes
serve-expired-client-timeout: 0
adrian Avatar
Adrian
🛠️ Unbound necesita ser compilado con soporte para Redis (cachedb) si se quiere mantener la caché persistente entre reinicios. Esto permite mejorar la disponibilidad del DNS incluso después de reiniciar el sistema.

Con estas opciones, Unbound ya puede servir dominios expirados, evitando así la espera. Mientras tanto, resuelve el dominio en segundo plano y lo vuelve a poner en Redis si es que cambió.

;; ANSWER SECTION:
github.com.		58	IN	A	140.82.114.3

;; Query time: 0 msec

pero ¿qué pasaría si hay más usuarios o yo misma que piden el mismo dominio y en ese momento se está actualizando, entonces como yo lo pienso eso haría que el siguiente usuario tenga que esperar a que se resuelva el dominio otra vez hipotéticamente pasaría eso, eso, así que para poder hacer que no pase, decidí ponerle un poco de TTL a los dominios expirados que normalmente el más alto que vi al resolver un dominio era de 700ms así que le agregué en la configuración para que le dé 2 segundos de TTL a ese dominio expirado mientras que se toma el tiempo de resolverlo.

adrian Avatar
Adrian
⏱️ También puedes usar serve-expired-ttl-reset: yes para que las respuestas con TTL reconfigurado no mantengan el TTL original (expirado), sino el nuevo TTL que tú defines, como los 2 segundos en este caso.
;; ANSWER SECTION:
github.com.		2	IN	A	140.82.112.3

;; Query time: 0 msec

podría ponerle 1 pero mejor darle 2 para no tener problemas por si alguno demora más.

con todo esto ya todo de momento me está yendo mejor y las aplicaciones que me fallaban ya no lo hacen y todo va muy bien.

Compartir
Avatar de KAOTCHI
ESCRITO POR:

Amo la música, los juegos y aprender idiomas.

Me encanta descubrir nuevas cosas sobre diseño web, y sueño con lograr todo lo que tengo planeado en ese mundo.