Cacheando DNS

Software — Viernes 04 de Mayo de 2012, 15:24


(para los que no están al tanto qué es el DNS, una explicación rápida es que es un servicio que transforma los nombres que usamos los humanos para direcciones de servers (www.google.com, taringa.net, etc), a direcciones IP que la computadora necesita para acceder a dichos servers (173.194.42.17, 108.59.9.83, etc))

Dependiendo de los servidores DNS que utilicen, un query a los mismos puede tardar entre algunos milisegundos, hasta decenas o centenares de milisegundos.

Como un query DNS se ejecuta cada vez que algún programa tiene que convertir un nombre a una IP, esto puede hacer bastante lenta la navegación u otros programas que accedan a la red. Acelerar esto al máximo es siempre una buena idea. Y una forma fácil de acelerarlo es instalar localmente un "caché de DNS"... entonces si hay que resolver una dirección por primera vez, se tardará lo que se tarde en traer la IP desde el mundo exterior, pero las sucesivas veces el tiempo será virtualmente cero).

Lástima que en Ubuntu Precise, NetworkManager levanta el dnsmasq (que cachea DNS y hace otras cosas copadas) con la opción --cache-size=0, que efctivamente le dice que no cachee nada. Un estúpido. Encima, tiene esa opción hardcodeada en código (una mierda, ver bug #903854).

Los siguientes son los pasos para solucionar esto....

Editen el archivo de config de NetworkManager y borren la linea que dice dnsmasq.

    sudo gedit /etc/NetworkManager/NetworkManager.conf

Instalen dnsmasq (les va a dar error al tratar de arrancar porque hay otro proceso tomando el puerto, no se preocupen):

    sudo apt-get install dnsmasq

Maten todas las instancias de dnsmasq que encuentren

    ps -eaf | grep dnsmasq
    sudo kill ...

Editen el archivo de configuración:

    sudo gedit /etc/dnsmasq.conf

Descomenten las lineas de no-resolv y no-poll, y agreguen servers externos a mano, esas lineas quedarían...

    no-resolv
    no-poll
    server=8.8.8.8
    server=8.8.4.4

No las pongan en cualquier lado, funciona, pero les queda desordenado. Fíjense que el archivo de config las tiene por ahí. Finalmente, reinicien dnsmasq:

    sudo service dnsmasq restart

Para verificar que funciona lindo, pueden usar el comando dig, que resuelve nombres, y les dice cuanto tardó. Entonces hagan dig unadireccionquenohayanusado.com dos veces, y vean la diferencia entre ambos tiempos (pista: el segundo tiempo debería ser cero o casi cero).


Amnistía Internacional

comentarios

  1. Gracias por la solución, el único detalle ahí es que el DNS secundario de Google no es el 4.4.4.4 sino 8.8.4.4 ;)

    Gracias.

    Escrito por Juan L Gómez — 04 May 2012, 17:29

  2. Facu: es una buena idea, pero por ahi te convendria poner el "apt-get install" antes del kill, porque una vez que mataste en dnsmasq que está corriendo ya no tenes mas dns y se complica instalar el paquete :)

    Saludos!

    Escrito por Ricardo Reyes — 04 May 2012, 20:30

  3. La idea del dnsmasq que viene instalado es poder separar que server dns consultar en base al dominio que buscas. Caso tipico, una vpn. En la actualidad cuando te conectas a la vpn de tu trabajo todas tus consultas dns las envias por el. Tunel al dns de tu trabajo. La nueva configuracion permite solo enviar por el tunel las consultas del dominio de tu trabajo.
    Claro, esto es posible de forma facil y dinamica si no rompes la relacion entre dnsmasq y networkmanager

    Muy bueno el blog, lo leo siempre

    Abrazo

    Escrito por Sebastian — 04 May 2012, 23:09

  4. Juan Luis: sí, que tarado, ahí lo corregí.

    Ricardo: Le cambié el orden, y puse un warning diciendo que al instalar va a dar error al tratar de levantar el proceso porque el puerto está tomado.

    Sebastian: Ok, pero si rompen el cacheo, todo mal (igual, es un bug que tienen para corregir, no es una decisión de diseño).

    Muchas gracias a todos!!

    Escrito por Facundo Batista — 05 May 2012, 08:47

  5. Qué tal recompilar el paquete con la opción "--cache-size" con un valor adecuado?

    Escrito por humitos — 17 May 2012, 13:44

  6. Humitos:

    Hola!

    Por un lado, no me convence demasiado recompilar algo tan "core" del desktop... no por el recompilarlo en sí, sino porque al compilarlo e instalarlo, estás saliendo de las actualizaciones automáticas del paquete.

    Por otro lado, lo pusieron a propósito por otro problema... fijate el bug. Y no quiero meterme tanto en el quilombo de tener que entender qué se podría romper o cómo...

    Saludos!

    Escrito por Facundo Batista — 17 May 2012, 13:51

  7. Para probar si el caché funciona, hagan:

    dig google.com

    Van a ver que la primera vez les va a tardar (en lo que acabo de probar, 165ms). La segunda y sucesivas veces debería tardar menos de unos pocos milisegundos (en mi caso, tarda 0 o 1).

    Escrito por Facundo Batista — 17 Oct 2013, 10:44


Añadir comentario

authimage






Powered by LifeType