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:
- Servidor DNS local (resolución de nombres almacenados en /etc/hosts o en otro archivo)
- Servidor DNS caché
- 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.