dnsmasq

Muchas personas conocen y aman dnsmasq y dependen de él para sus servicios de nombres locales. Lo que ahora trataré, será lo siguiente:

– Administración avanzada de archivos de configuración.
– Probar la configuración.
– Aspectos básicos de seguridad.
– Comodines en DNS.
– Consejos y trucos varios.

Testeando configuraciones

Cuando probamos nuevas configuraciones, debemos ejecutar dnsmasq desde la línea de comandos, en lugar de hacerlo como daemon/demonio.

En éste ejemplo lo iniciamos sin el daemon, además de imprimir el resultado del comando y registra toda actividad realizada, así:

# dnsmasq –no-daemon –log-queries
dnsmasq: started, version 2.75 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt
DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack
ipset auth DNSSEC loop-detect inotify
dnsmasq: reading /etc/resolv.conf
dnsmasq: using nameserver 192.168.0.1#53
dnsmasq: read /etc/hosts – 9 addresses

Se pueden ver, en ocasiones toneladas, de información útil en éste pequeño ejemplo, incluida la versión, las opciones compiladas, archivos de servicio del nombre del sistema y su dirección activa. Con ctrl+c se detiene. De forma predeterminada, dnsmasq no tiene su propio archivo de registro, por lo que las entradas caen todas en diferentes ubicaciones, así que en éste ejemplo buscaría en /var/log de manera re-cursiva e imprime los números de línea después de los nombres de archivos y excluye /var/log/dist-upgrade:

# grep -ir –exclude-dir=dist-upgrade dnsmasq /var/log/

En éste caso, tengan en cuenta que la diversión grep gotcha con –exclude-dir=. No especifiquen la ruta completa, sinó sólo el nombre del directorio.

Pueden darle a dnsmasq su propio archivo de registro con ésta opción de la siguiente manera:

# dnsmasq –no-daemon –log-queries –log-facility=/var/log/dnsmasq.log

O pueden ingresar en el archivo de configuración dnsmasq como log-facility=/var/log/dnsmasq.log

Archivos de configuración

dnsmasq tiene su archivo de configuración en /etc/dnsmasq.conf. Dependiendo la distribución de GNU/Linux también puede estar en /etc/default/dnsmasq, /etc/dnsmasq.d/ o también en /etc/dnsmasq.d-available/.

Lo que indico en éste tutorial, como en el anterior, es que no es un método universal, ya que eso va en contra de la misma voluntad Linuxera. También tiene un poco de flexibilidad para organizar su configuración de una manera en que a nosotros nos sirva.

/etc/dnsmasq.conf es, como dicen algunos, la abuela y el jefe. Lo que hace es leer primero en el inicio y éste mismo archivo puede lamar a otros archivos de configuración con la opción conf-file=, por ejemplo:

conf-file=/etc/dnsmasq-extrastuff.conf

Y hasta también directorios con la opción conf-dir= como por ejemplo:

conf-dir=/etc/dnsmasq.d/

Siempre que se realice un cambio en un archivo de configuración debemos reiniciar el demonio dnsmasq:

# systemctl restart dnsmasq

Si queremos, podemos incluir o excluir archivos de configuración por extensión. El asterisco significa incluir y la ausencia del mismo significa excluir:

conf-dir=/etc/dnsmasq.d/,*.conf, *.foo
conf-dir=/etc/dnsmasq.d,.old, .bak, .tmp

También podemos almacenar sus configuraciones de host en múltiples archivos con la opción –addn-hosts=.

Y si en algún momento hicimos los deberes sabrán que dnsmasq incluye un corrector de sintaxis:

$ dnsmasq –test
dnsmasq: syntax check OK.

Configuraciones útiles

Siempre vamos a incluir éstas líneas:

domain-needed
bogus-priv

Ésto evita que los paquetes con nombres de dominio mal formados y paquetes con direcciones IP privadas salgan de su red.

También se puede limitar los servicios de nombre exclusivamente a dnsmasq, y no usará /etc/resolv.conf ni ningún otro archivo de servicio de nombres de sistema:

no-resolv

En referencia a otros servidores de nombres. El primer ejemplo es para un dominio privado local. El segundo y el tercer ejemplo son servidores públicos, en éste caso uso OpenDNS:

server=/unejemplo.com/192.168.0.1
server=208.67.222.222
server=208.67.220.220

Se pueden restringir sólo los dominios locales mientras permitimos búsquedas externas para otros dominios. Éstos sólo se revisan desde /etc/hosts o DHCP:

local=/miejemplo.com/
local=/otroejemplo.com/

Y si deseamos restringir las interfaces de red que dnsmasq escucha lo hacemos así:

interface=eth0
interface=wlan1

NOTA: el nombre de la interfaz puede variar, como por ejemplo para eth0 puede ser enp5s0f5 y para wlan0,1, etc. ahora puede ser: wlp4s0.

Volviendo al tema, dnsmasq, por defecto, lee y usa /etc/hosts. Ésta es una forma muy interesante y rápida de configurar muchos hosts. Y el archivo /etc/hosts sólo debe existir en la misma computadora conf dnsmasq. Podemos hacer que el proceso sea aún más rápido al ingresar sólo los nombres de host en /etc/hosts y usar dnsmasq para agregar el dominio /etc/hosts, se debería ver así:

127.0.0.1 localhost
192.168.0.1 host2
192.168.0.2 host3
192.168.0.3 host4

A continuación, deberían agregar éstas líneas en dnsmasq.conf, usando el dominio propio así:

expand-hosts
domain=mihejemplo.com

Dnsmasq expandirá automáticamente los nombres de host a nombres de dominio completamente calificados, por ejemplo: host2.miejemplo.com.

Comodines en DNS

En general, los comodines en DNS no son una buena práctica porque invitan al abuso. Pero hay momentos en que realmente son útiles, como dentro de los lindos confines protegidos de nuestra LAN. Por ejemplo, los clústeres de Kubernetes son considerablemente más fáciles de administrar con los comodines de DNS, a menos que disfruten de hacer entradas DNS para los cientos o miles de aplicaciones.

Lo pongamos de ésta manera, supongamos que nuestro dominio Kubernetes es miejemplo.com; en dnsmasq, un comodín que resuelve todas las solicitudes a miejemplo.com se ve de ésta manera:

address=/miejemplo.com/192.168.0.5

La dirección a usar en éste caso es la dirección IP pública para su clúster. Ésto responde a las solicitudes de hosts y subdomonios en miejemplo.com a excepción de los que ya están configurados en DHCP o en /etc/hosts.

Básicamente ésto es lo que quería explicar, aunque con más detalles pueden explorar ustedes mismos. Si quieren agregar algo como tip para mejorar nuestra seguridad, sería genial que lo comenten en el blog o en el grupo de Telegram de LinuxerOS.

Espero que les haya servido y recuerden compartir así sigo creciendo.

Un abrazo!