Ayer hice un pequeño experimento y ha funcionando bastante bien hasta el momento, configuré dnsmasq como un pequeño servidor local de direcciones o DNS.
Tabla de contenidos
- Instalar dnsmasq
- Configurar el servicio
- Configurar el equipo
- Comprobar si funciona
- Activar dnsmasq desde el arranque
- Conclusiones
- Actualización Enero 2023
La mecánica es más o menos la siguiente. Si dnsmasq no sabe la dirección IP de un servidor entonces se la pregunta a uno de los DNS de Google (8.8.8.8 o 8.8.4.4), pero si ya la conoce entonces la sirve directamente sin necesidad de ir a internet con un tiempo de respuesta inmediato y eso ayuda a mejorar el tiempo en el que se resuelven algunas consultas.
Anteriormente había hecho algo similar con pdnsd (véase Cache DNS) pero era cuando usaba Ubuntu o sea que ya tiene rato de eso.
Dnsmasq es un servidor ligero que aparte de proporcionar el servicio de DNS, también sirve como un servidor DHCP y TFTP, pero estos dos últimos no los vamos a tocar en este artículo.
Instalar dnsmasq
Primero lo primero, para instalar dnsmasq en Manjaro recurrimos a nuestro ya archifamoso y conocido manejador de paquetes pacman
sudo pacman -S dnsmasq
Configurar el servicio
Para configurar el servicio se tiene que editar el archivo /etc/dnsmasq.conf. El archivo esta muy comentado así que me voy a centrar en lo más importante.
listen-address=127.0.0.1 resolv-file=/etc/resolv.dnsmasq.conf cache-size=1000 no-poll
- listen-address se establece a 127.0.0.1 (o localhost), es para que acepte peticiones de DNS de forma local.
- resolv-file En este archivo voy a especificar los DNS externos, es decir, si la dirección no esta en el servidor local la buscará en los servidores que indique en este archivo.
- cache-size Lo establecí en 1000 que es un valor algo conservador, pero si cree que es muy pequeño pueden ser 2000 o 3000 direcciones que almacenará de manera local.
Estos 3 valores son los más importantes. no-poll evita que se este revisando continuamente posibles cambios en el archivo /etc/resolv.conf o en el archivo /etc/resolv.dnsmasq.conf que establecimos con el parámetro resolv-file.
resolv.dnsmasq.conf
El contenido del archivo /etc/resolv.dnsmasq.conf es muy simple:
# Servidores DNS de Google nameserver 8.8.8.8 nameserver 8.8.4.4
En este caso puse los de Google, pero pueden ser los de OpenDNS, los de su proveedor de internet, los que usten elija.
Para aplicar los cambios que hemos hecho es necesario reiniciar el servicio:
sudo systemctl restart dnsmasq
Configurar el equipo
Ahora le tengo que decir a mi equipo que utilice mi servidor de DNS en lugar de los de mi proveedor de internet.
Uso Cinnamon, muy conocido por los usuarios de Linux Mint, en mi caso reviso las Preferencias de red y abro la pestaña que dice Ajustes de IPv4.
- En donde dice Método cambio a Sólo direcciones automáticas.
- Cambio la opción que dice Servidores DNS a 127.0.0.1 o sea localhost o sea mi propio equipo.
Comprobar si funciona
Para saber si funciona vamos a usar el comando dig y revisamos el tiempo de respuesta:
dig google.com | grep "Query time" ;; Query time: 71 msec
La siguiente vez que lo ejecutemos
dig google.com | grep "Query time" ;; Query time: 0 msec
El tiempo de respuesta es de 0 msec ¡Vientos huracanados!.
Ahora revisen si pueden navegar por internet, lo más notorio, por ejemplo, es que Chrome muestra un circulito cuando carga una página, primero en sentido contrario a las manecillas del reloj (buscando la página) y luego en sentido de las manecillas del reloj (cargando la página), bueno el tiempo de búsqueda se reduce notablemente con este cambio. Tengan en cuenta que una página puede hacer consultas a muchos dominios mientras se carga.
Activar dnsmasq desde el arranque
Si todo esta bien, llegó la hora de aplicar estos cambios desde el arranque del equipo. En Manjaro/Arch es con el siguiente comando:
sudo systemctl enable dnsmasq
Conclusiones
Quizas con estos cambios no gane mucho tiempo, pero las notificaciones de Google Plus aparecen mucho más rápido y ya saben lo que dicen “Ciclo ahorrado ciclo ganado”.
Actualización Enero 2023
Hace poco decidí hacer una nueva instalación de Manjaro en una nueva unidad y me di cuenta de que este tutorial ya no funciona igual.
Al seguir las indicaciones me di cuenta de que hay un error al iniciar dnsmasq, me aparece que no puede leer el archivo que especifiqué como resolv-file dice que tiene permiso denegado.
sudo systemctl status dnsmasq ● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; preset: disabled) Active: active (running) since Tue 2023-01-24 10:54:36 CST; 3s ago Docs: man:dnsmasq(8) Process: 4199 ExecStartPre=/usr/bin/dnsmasq --test (code=exited, status=0/SUCCESS) Main PID: 4200 (dnsmasq) Tasks: 1 (limit: 9491) Memory: 1.3M CPU: 52ms CGroup: /system.slice/dnsmasq.service └─4200 /usr/bin/dnsmasq -k --enable-dbus --user=dnsmasq --pid-file ene 24 10:54:35 plankton systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server... ene 24 10:54:36 plankton dnsmasq[4199]: dnsmasq: revisión de sintaxis OK. ene 24 10:54:36 plankton systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server. ene 24 10:54:36 plankton dnsmasq[4200]: iniciado, versión 2.88 tamaño de caché 3000 ene 24 10:54:36 plankton dnsmasq[4200]: opciones de compilación: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset nftset auth cr> ene 24 10:54:36 plankton dnsmasq[4200]: soporte DBus habilitado: conectado a bus de sistema ene 24 10:54:36 plankton dnsmasq[4200]: el caché fue liberado ene 24 10:54:36 plankton dnsmasq[4200]: failed to read /etc/resolv-dnsmasq.conf: Permiso denegado
Así que lo que hice fue especificar los servidores dentro del mismo archivo dnsmasq.conf agregando estas lineas al final del archivo. Recuerden que ustedes pueden especificar los servidores de su preferencia.
# Quad9 server=9.9.9.9 server=149.112.112.112 # Cisco OpenDNS server=208.67.222.222 server=208.67.220.220 # Cloudflare server=1.1.1.2 server=1.0.0.2
Después de reiniciar el servicio ya no aparecieron problemas y funciona correctamente.
sudo systemctl status dnsmasq ● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; preset: disabled) Active: active (running) since Tue 2023-01-24 11:09:40 CST; 14min ago Docs: man:dnsmasq(8) Process: 5543 ExecStartPre=/usr/bin/dnsmasq --test (code=exited, status=0/SUCCESS) Main PID: 5544 (dnsmasq) Tasks: 1 (limit: 9491) Memory: 1.3M CPU: 117ms CGroup: /system.slice/dnsmasq.service └─5544 /usr/bin/dnsmasq -k --enable-dbus --user=dnsmasq --pid-file ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 1.1.1.2#53 ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 1.0.0.2#53 ene 24 11:09:40 plankton dnsmasq[5544]: el caché fue liberado ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 9.9.9.9#53 ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 149.112.112.112#53 ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 208.67.222.222#53 ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 208.67.220.220#53 ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 1.1.1.2#53 ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 1.0.0.2#53 ene 24 11:09:40 plankton dnsmasq[5544]: usando nombre de servidor 192.168.10.1#53
¡¡¡ La lógica se explica en el segundo párrafo de este mismo artículo. !!!
si me ayudo a entender el funcionamiento .
pero no se que drama tiene que no funciono por mucho tiempo.
se termina rompiendo la coneccion.
no resuelve el 127.0.0.1 se corta la coneccion .
sabes como configurar networmanager? hay un archivo de configuracion que no agrega justamente esta direccion.
esta en esta ruta: run/NetworkManager/dnsmasq.conf
es volatil y segun lo que lei por hay debe levar la direcion del localhost, pero esta en blanco.
no entiendo como funcion esto, que lio.
salutes
¿Estás usando Manjaro? o estas utilizando otra distribución de Linux?
manjaro que tal es?
ubuntu es la que menos dramas me a dado, probe debian 8, elementary ,ubuntu studio, mint
y me quede con ubuntu.
hay lo resolvi parese que era que no le agregaba el dns de gogle en etc/resolv.conf junto con el 127.0.0.1
peroo hay me parese que esta trabajando con los dns de google nada mas, como fuciona esta aplicacion?
Manjaro esta genial, pero puede ser complicado para usuarios principiantes.
Con respecto a dnsmasq creo que no sabes bien lo que estas haciendo, por eso estás dando tanto palos de ciego. 🙂
Te recomiendo leer un poquito más.
Saludos.
pues si he leido por eso no entiendo, supuestamente resuelve los dns en el localhost pero por lo que veo no.
no entiendo1 como fuciona entonces?
cual es la logica del programa?
hola
gracias por el articulo me qyyudo mucho a configurar dnsmasq!
va como trompada de loco 🙂
saludos
Que bueno que te fue de utilidad 🙂
Hola tendrás la liga de documentación de chrome donde explica que significa hacia donde gira el circulo de carga me seria de mucha ayuda, Gracias de antemano.
Claro… mira, revisa este enlace … Meaning of the clockwise/counter-clockwise rolling circle in Google Chrome
Aunque creo que no hay una documentación oficial sobre el tema.
Me suscribo para cuando se solucione el tema al reiniciar.
Gracias por compartir.
Saludos.
Si buscas un DNS permanente prueba pdnsd, pero el DNS es dinámico por naturaleza, si alguien hace un cambio en un servicio es normal que pasen 24 horas antes de que se vea reflejado en todo el mundo. Si tu DNS no se actualiza constantemente puedes tener problemas con algunos servicios.
Gracias por el dato, no conocia «pdnsd», lo probaré.
Saludos.
Se pueden poner diferentes servicios dns ?
Si te refieres a distintos servidores DNS, la respuesta es si. Pero ten en cuenta de que uno es el primario, el que sigue es el secundario y así.. Solamente si no tiene respuesta del primaria preguntaría al secundario, por eso no es muy común poner más de dos o tres servidores DNS.
Igual hay un problema, que no es un problema :), al reiniciar la PC o el servicio de «dnsmasq» se borran las cache que hace del DNS. De igual forma, es algo muy útil, y lo utilizo.
Saludos.
Tienes razón, no es un caché permanente, algo que pdnsd si hace, estoy investigando ese detalle, pero igual es una gran mejora.
¡¡Que calidad!! funcionó a perfección las páginas se abren mucho, pero mucho más rápido, yo uso KDE-Antergos. Muchas gracias por tu tiempo para enseñar.
Excelente!!! de eso se trata, es un ajuste pequeño pero que tiene un buen impacto.