Dnsmasq es un servidor ligero DNS y DHCP. Aquí vamos a centrarnos en su uso como DNS de sólo caché. De esta manera, dnsmasq guardará en su caché local los resultados de las consultas DNS que realicemos a los servidores DNS principales que tengamos configurados en el equipo. En las sucesivas consultas, por tanto, nuestro sistema recurrirá a la caché local de dnsmasq en vez de a los servidores DNS principales, lo que resultará en una navegación por Internet más rápida.
Para instalarlo, si estamos en un sistema Debian o derivado:
aptitude install dnsmasq
Si estamos en un sistema Red Hat o derivado:
yum install dnsmasq
Una vez realizada la instalación procederemos a hacer un pequeño retoque en el fichero de configuración principal de la misma /etc/dnsmasq.conf
. Buscamos la línea listen-address
e introducimos:
listen-address=127.0.0.1
Por otro lado, debemos tener en cuenta que dnsmasq utiliza el puerto 53, por lo que debemos asegurar acceso desde ese puerto y que ningún otro servicio esté utilizándolo (véase BIND o similares).
Posteriormente en el fichero /etc/resolv.conf
definiremos en orden de prioridad los servidores DNS que utilizará nuestro sistema. Pondremos al servidor dnsmasq local como primero en la lista de servidores de resolución de nombres:
nameserver 127.0.0.1 nameserver 208.67.222.222 nameserver 208.67.220.220
De esta manera, nuestra máquina lo primero que hará será recurrir al servidor dnsmasq local (127.0.0.1) y si no encuentra en su caché la respuesta, recurrirá a los subsiguientes. Por cierto, para los interesados, los otros dos servidores DNS de la lista son los de OpenDNS. Dicho sea de paso, funcionan a las mil maravillas (y no, no cobro comisión por decirlo).
Una vez realizado este sencillo cambio en los DNS del sistema, para saber si el servidor dnsmasq cachea correctamente, podemos hacer unas sencillas comprobaciones después de haber navegado anteriormente por google (por poner un ejemplo). Digo después de haber navegado porque si es la primera vez que entramos a una determinada página, dnsmasq aún no habrá cacheado la respuesta DNS. La primera consulta nunca la resuelve nuestro dnsmasq local. Bien, pasemos a las comprobaciones:
- Comprobar con dig:
root@debian7stable:~# dig www.google.es @localhost ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> dig www.google.es @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42614 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.es. IN A ;; ANSWER SECTION: www.google.es. 105 IN A 173.194.34.248 www.google.es. 105 IN A 173.194.34.247 ;; Query time: 49 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Oct 6 16:03:48 2013 ;; MSG SIZE rcvd: 63
En la línea
SERVER: 127.0.0.1#53(127.0.0.1)
tenemos la respuesta: es nuestro servidor local el que responde. - Comprobar con nslookup:
root@debian7stable:~# nslookup www.google.es localhost Server: localhost Address: 127.0.0.1#53 Non-authoritative answer: Name: www.google.es Address: 173.194.34.248 Name: www.google.es Address: 173.194.34.247
De nuevo, la clave está en el servidor que responde, el local:
Server: localhost Address: 127.0.0.1#53
- Comprobar conexiones de red:
root@debian7stable:~# netstat -netaup | grep 53 tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 0 5337 1736/rpcbind tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 0 18151 8564/dnsmasq tcp6 0 0 :::111 :::* LISTEN 0 5344 1736/rpcbind tcp6 0 0 :::53 :::* LISTEN 0 18153 8564/dnsmasq udp 0 0 0.0.0.0:639 0.0.0.0:* 0 5336 1736/rpcbind udp 0 0 127.0.0.1:671 0.0.0.0:* 0 5391 1767/rpc.statd udp 0 0 0.0.0.0:36674 0.0.0.0:* 102 5397 1767/rpc.statd udp 0 0 0.0.0.0:53 0.0.0.0:* 0 18150 8564/dnsmasq udp 0 0 0.0.0.0:111 0.0.0.0:* 0 5333 1736/rpcbind udp 0 0 0.0.0.0:5353 0.0.0.0:* 106 5911 2285/avahi-daemon: udp6 0 0 :::639 :::* 0 5343 1736/rpcbind udp6 0 0 :::53 :::* 0 18152 8564/dnsmasq
Y ahí lo tenemos, tanto en TCP/UDP IP versión 4 y 6, en el puerto 53.
Como véis, una forma fácil de implementar un DNS de sólo caché sin complicarnos la vida con mamotretos como BIND o similares.