Networking Server

Dnsmasq en OpenBSD

Introducción

El presente artículo estará centrado en la instalación y configuración de Dnsmasq, un pequeño servidor DNS y DHCP que puede brindar a nuestra red de computadoras los siguientes beneficios:

  1. Servidor DNS local (resolución de nombres almacenados en /etc/hosts o en otro archivo)
  2. Servidor DNS caché
  3. Servidor DHCP (con algunos agregados útiles)

El escenario de configuración será:

  • Una red pequeña (~50 computadoras).
  • Un servidor con dos placas de red y que oficia de router.
  • Dos interfaces:
    • sis0 (IP 192.168.0.1, conectada a la red interna)
    • ste0 (IP 10.0.0.2, conectada a la red externa)

Para más información, recomiendo leer página del manual, ubicada en: http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html .

Instalación

Ya que Dnsmasq no está incluido en la instalación estándar, el primer paso es agregarlo desde un sitio FTP:

# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/`uname -r`/packages/`uname -m`/
# pkg_add -v dnsmasq

Luego de instalar el programa, vamos a preparar nuestro servidor de nombres locales. El archivo de configuración de Dnsmasq es /etc/dnsmasq.conf y es ahí donde haremos las modificaciones necesarias.

Configuración como DNS local

Solamente se necesita tener en el servidor el archivo /etc/hosts con los nombres definidos. Por ejemplo:

# Ejemplo de archivo /etc/hosts
127.0.0.1	localhost
192.168.0.1	house
192.168.0.2	reborn
192.168.0.3	butterfly
192.168.0.4	bitbook

Es posible usar otro archivo con nombres, basta con especificarlo en el archivo de configuración:

addn-hosts=/etc/mis_nombres

Configuración como servidor DNS caché

Dnsmasq, de manera predeterminada, lee el archivo /etc/resolv.conf para obtener las direcciones IP de los servidores DNS upstream (por ejemplo, los de nuestro ISP). Si queremos evitar esto y definir nuestros servidores DNS, agregamos lo siguiente al archivo de configuración:

no-resolv
server=200.45.191.35
server=200.45.191.40

Es conveniente definir la interfaz donde Dnsmasq va a escuchar las peticiones DNS y DHCP. En nuestro caso es la interfaz sis0:

interface=sis0

Y por razones de seguridad deshabilitamos el servicio DHCP y DNS en la otra interfaz:

no-dhcp-interface=ste0
except-interface=ste0

Dnsmasq cuenta con una característica que permite asociar un dominio con una dirección IP. Como ejemplo útil vamos a asociar dominios de publicidad a una IP determinada para que no se carguen avisos de publicidad en la página que estamos leyendo:

address=/pmssrv.mercadolibre.com.ar/127.0.0.1
address=/pmstrk.mercadolibre.com.ar/127.0.0.1
address=/smartad.mercadolibre.com.ar/127.0.0.1 

Con estos pasos ya tenemos configurado nuestro servidor DNS caché. Solo resta agregar el arranque de Dnsmasq en /etc/rc.local:

if [[|-x /usr/local/sbin/dnsmasq ]]; then
    echo -n ' dnsmasq' ; /usr/local/sbin/dnsmasq
fi

Luego de levantar Dnsmasq probamos su funcionamiento usando el comando dig:

# dig www.larazon.com.ar | grep "Query time"
;; Query time: 42 msec
# dig www.larazon.com.ar | grep "Query time"
;; Query time: 1 msec

Se ve que en la primer corrida hay un tiempo de espera de 42 milisegundos, es el tiempo de consulta de Dnsmasq a un servidor maestro. En la segunda corrida el tiempo se redujo a 1 milisegundo porque Dnsmasq está usando el caché de nombres.

Configuración como servidor DHCP

Comenzamos definiendo el rango de direcciones y la interfaz donde Dnsmasq va a escuchar los pedidos de IP. La sintaxis es IP_inicio,IP_final,tiempo_de_asignación:

interface=sis0
dhcp-range=192.168.0.2,192.168.0.7,3h

Es posible asignar una determinada IP con la dirección MAC de la placa de red:

dhcp-host=00:1f:3c:5f:d5:fa,192.168.0.4,infinite

Esto significa darle la IP 192.168.0.4 a la máquina que tiene la dirección MAC 00:1f:3c:5f:d5:fa y un tiempo de asignación infinito. Otras combinaciones posibles con dhcp-host permiten denegar peticiones a máquina con determinadas direcciones MAC, asignar nombres, etc.

Existen opciones de configuración adicional que agregan funcionalidad a Dnsmasq. Por ejemplo, se puede informar la dirección IP del gateway, del servidor DNS y del servidor WINS a las máquinas de la red con las opciones 3, 6 y 44 respectivamente:

dhcp-option=3,192.168.0.10
dhcp-option=6,192.168.0.11
dhcp-option=44,192.168.0.12

Si no se realiza la configuración anterior, el servidor Dnsmasq informa a las máquinas de la red que su dirección IP es la del gateway y del servidor DNS.

El resto de las opciones aparecen al invocar Dnsmasq de la siguiente manera:

dnsmasq --help dhcp

Configuración de ejemplo

A continuación se presenta un archivo de configuración para Dnsmasq:

#---------------------------------
# Configuración modelo para Dnsmasq
#---------------------------------

#----------------------
# Configuración general
#----------------------
# Tamaño del caché de nombres
cache-size=150

# Definir nuestros servidores maestros
no-resolv
server=200.45.191.35
server=200.45.191.40

# No reenviar nombres sencillos a los servidores maestros
domain-needed

# No reenviar búsquedas privadas reversas
bogus-priv

# Ejecutar Dnsmasq con un ID de usuario y grupo determinado
user=nobody
group=wheel

# Servicios en interfaces de red
interface=ep1
except-interface=ep0
no-dhcp-interface=ep0

# Redireccionar sitios con publicidad
address=/pagead.googlesyndication.com/127.0.0.1
address=/pagead2.googlesyndication.com/127.0.0.1
address=/barra.uol.com.br/127.0.0.1
address=/de.uol.com.br/127.0.0.1
address=/de.i.uol.com.br/127.0.0.1

# ------------------------------------
# Configuración para el servidor DHCP
# ------------------------------------
# Rango de IPs
dhcp-range=192.168.0.2,192.168.0.25,12h

# Máquinas con IP y nombre definidos
dhcp-host=00:11:25:66:41:68,max,192.168.0.2,12h
dhcp-host=00:aa:34:72:01:28,reborn,192.168.0.3,12h

# Gateway
dhcp-option=3,192.168.0.10

# Servidor de nombres (WINS)
dhcp-option=44,192.168.0.11

# Archivo de información de asignación de IP
dhcp-leasefile=/var/log/dnsmasq.leases

# ------------------------------
# === Fin del ejemplo modelo  ====
# ------------------------------

Conclusión

Como hemos visto, Dnsmasq es un programa versátil y sencillo de configurar. Estas características, sumadas a la poca exigencia de recursos, lo transforman en una opción a considerar cuando se instala una red pequeña de computadoras.


Personal Tools