[Linux] Instalación rápida de un DNS caché

Con el advenimiento de los problemas DNS o los fallos de resolución (el sábado pasado DNS1.CANTV.NET dejó de resolver por un par de horas), además como una buena práctica de gestión de tu plataforma, es importante contar con un servidor DNS caché.

En este caso, instalaremos dnsmasq, tanto para Debian como para Fedora/CentOS.

La razón de este artículo fue un compañero que me llamó presuroso, “tenemos problemas con el correo!, auxilio!, se está quedando represado y están fallando las resoluciones DNS”, rápidamente le envié mi guía de DNS caché y solventó su problema, ¿por qué no solventarle el problema a los demás?, aquí la publico.

DNSmasq es un servicio muy sencillo y fácil de configurar, con muchas guías disponibles, este simplemente es una más :)

Preámbulo

Un DNS caché es una herramienta que se encarga de hacer las consultas DNS contra servidores externos y almacenarlas el tiempo previsto por el REFRESH de la zona, así, nos ahorramos un montón de tráfico “hacia afuera” a preguntarle a DNS de Google o de CANTV (o el que sea tu ISP).

Para el trabajo utilizaremos una aplicación muy ligera, conocida como DNSmasq, acá las instrucciones para instalarlo.

Instalación

Para instalar en Debian GNU/Linux debemos ejecutar:

aptitude install dnsmasq

Para Fedora, debemos ejecutar:

yum install dnsmasq

Para CentOS, tenemos qué, previamente, añadir los repositorios EPEL para descargar de allí dnsmasq

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

Y luego si ejecutamos la instalación

yum install dnsmasq

Luego de esto, aseguraremos la instalación, para ello, debemos crear un usuario y grupo (por defecto, dnsmasq se instala y correo como root ó como nobody):

groupadd -r dnsmasq
useradd -r -g dnsmasq dnsmasq

A partir de acá, pasamos a configurar el servicio.

Configuración de DNSmasq

Primero, guardamos el archivo de configuración “original” (por si acaso!):

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

Y creamos uno con el siguiente contenido:

archivo: /etc/dnsmasq.conf
#
# Configuration file for dnsmasq acting as a caching nameserver.
#
# Format is one option per line, legal options are the same
# as the long options legal on the command line. See
# "/usr/sbin/dnsmasq --help" or "man 8 dnsmasq" for details.
#
# Updated versions of this configuration file may be available at:
#
#   http://www.g-loaded.eu/2010/09/18/caching-nameserver-using-dnsmasq/
#
#
# Basic server configuration
#
listen-address=127.0.0.1
port=53
bind-interfaces
user=dnsmasq
group=dnsmasq
pid-file=/var/run/dnsmasq.pid
## Logging #
log-facility=/var/log/dnsmasq.log
log-queries
## Name resolution options #
domain-needed
bogus-priv
dns-forward-max=150
cache-size=1000
neg-ttl=3600
resolv-file=/etc/resolv.dnsmasq
no-poll

NOTA: si queremos evitar que dnsmasq lea las entradas del /etc/hosts simplemente agregamos “no-hosts” luego de “no-poll”.

Este archivo simplemente define un dnsmasq como “caching nameserver” con un tamaño de caché de 1000 entradas y un caché negativo (tiempo que se guarda una resolución NXDOMAIN como válida) de una hora.

Guardamos luego el archivo y le damos los privilegios necesarios:

chown dnsmasq.dnsmasq /etc/dnsmasq.conf
chmod 0640 /etc/dnsmasq.conf

Creando el resolv para DNSmasq

El archivo “/etc/resolv.conf” apunta al DNS que debería resolver nuestras direcciones, y este debe ser, obviamente, “127.0.0.1”, o sea, nuestro propio dnscaché.

archivo: /etc/resolv.conf
nameserver 127.0.0.1

Sin embargo, dnsmasq cuenta con su propio archivo, donde se definen los servidores DNS que consultará recursivamente por direcciones:

archivo: /etc/resolv.dnsmasq
nameserver 8.8.8.8 #DNS de GOOGLE, mi favorito
nameserver [Primer DNS de tu ISP]
nameserver [segundo DNS de tu ISP]

Gestionando el log

Hemos creado un log, para gestionar los mensajes de dnsmasq (y la opción “log-queries” creará una bitácora con todas las direcciones que nuestros “usuarios” consultan), pero este log no es el “oficial”, así que hay que incorporarlo al logrotate:

Creamos el archivo con el siguiente contenido:

archivo:  /etc/logrotate.d/dnsmasq

/var/log/dnsmasq.log {
monthly
missingok
notifempty
delaycompress
sharedscripts
postrotate
[ ! -f /var/run/dnsmasq.pid ] || kill -USR2 `cat /var/run/dnsmasq.pid`
endscript
create 0640 dnsmasq dnsmasq
}

Y aplicamos la regla de logrotate ejecutando:

/usr/sbin/logrotate  /etc/logrotate.conf -f

Ya con esto, sólo nos hace falta, iniciar el servicio.

Arranque y parada

Para poder iniciar al arranque del sistema, en Debian ejecutan:

update-rc.d dnsmasq defaults

Y en Fedora/centOS:

chkconfig dnsmasq on

Para luego, iniciar el servicio con:

service dnsmasq start

Con lo cual ya está en operación tu caché de DNS, ¿por qué no probarlo?

Pruebas

Lo más ideal, es realizar una serie de consultas, para determinar su velocidad, para ello utilizamos la herramienta “dig”

Por ejemplo, una consulta sobre un dominio .gob.ve a google (8.8.8.8) le toma:

$ dig @8.8.8.8 -t A localhost.saren.gob.ve
;; Query time: 198 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Apr 26 03:06:12 2013
;; MSG SIZE rcvd: 56

Y a CANTV.NET

;; Query time: 105 msec
;; SERVER: 200.44.32.10#53(200.44.32.10)
;; WHEN: Fri Apr 26 03:39:59 2013
;; MSG SIZE rcvd: 56

Pero consultando 2 veces (una para que resuelva, la segunda ya responde desde caché) a nuestro servidor DNS:

$dig @127.0.0.1 -t A localhost.saren.gob.ve
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Apr 26 03:42:29 2013
;; MSG SIZE rcvd: 56

Lo cual no solo es una mejora significativa en velocidad, sino una además, un ahorro notable de ancho de banda de resoluciones DNS innecesarias.

About these ads

Acerca de Jesus Lara (phenobarbital)

http://about.me/phenobarbital

Publicado el 26 abril 2013 en Blogeando!, Cultura Libre, La nota del día, Linux, PlanetaLinux, Software Libre y etiquetado en , , , , , , , . Guarda el enlace permanente. 1 comentario.

  1. Genial, era lo que necesitaba y lo mejor es que lo explicas claro.
    GRACIAS.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 3.064 seguidores

%d personas les gusta esto: