Dnsmasq
dnsmasq es es un servidor DHCP/DNS sencillo que puede ser utilizado en una red local de hasta unos 1.000 clientes. Sus características fundamentales son una fácil configuración y un bajo consumo de recursos del sistema. También tiene soporte para IPv6.
Instalación
Ajustes USE
Realizar una selección adecuada de los ajustes USE:
USE flags for net-dns/dnsmasq Small forwarding DNS server
+dhcp
|
Enable support for acting as a DHCP server. |
+dumpfile
|
Include code to dump packets to a libpcap-format file for debugging |
+inotify
|
Enable inotify filesystem monitoring support |
+loop
|
Include functionality to probe for and remove DNS forwarding loops |
auth-dns
|
Add support for acting as an authorative DNS server. |
conntrack
|
Add support for Linux conntrack connection marking. |
dbus
|
Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc) |
dhcp-tools
|
Install extra command line tools for manually managing DHCP leases. |
dnssec
|
Enable support DNSSEC validation and caching. |
id
|
Whether report *.bind CHAOS info to clients, otherwise forward such requests upstream instead |
idn
|
Enable support for Internationalized Domain Names |
ipv6
|
Add support for IP version 6 |
libidn2
|
Enable support for Internationalized Domain Names, via net-dns/libidn2 rather than net-dns/libidn |
lua
|
Enable Lua scripting support |
nettlehash
|
Use hashing functions from dev-libs/nettle |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
script
|
Enable support for calling scripts when leases change. |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
static
|
!!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically |
tftp
|
Enables built in TFTP server for netbooting. |
Emerge
A continuación instalar el paquete net-dns/dnsmasq:
root #
emerge --ask net-dns/dnsmasq
Configuración
Hay varios recursos que se pueden modificar para cambiar el comportamiento de dnsmasq. Estos incluyen:
- las opciones de línea de órdenes pasadas al fichero /etc/conf.d/dnsmasq
- el fichero de configuración principal (/etc/dnsmasq.conf)
Servicio
OpenRC
Añadir dnsmasq al nivel de ejecución por defecto si se necesita arrancar automáticamente:
root #
rc-update add dnsmasq default
Para arrancar el servicio ahora:
root #
service dnsmasq start
Configuración del servicio
En el fichero /etc/conf.d/dnsmasq, se pueden configurar las opciones de línea de órdenes que se transmitirán al demonio dnsmasq en la fase de arranque.
DNSMASQ_OPTS="--user=dnsmasq --group=dnsmasq -H /srv/virt/gentoo/hosts --max-cache-ttl=10"
Fichero de configuración principal
La configuración principal de dnsmasq se realiza a través de su fichero de configuración, /etc/dnsmasq.conf. El fichero utiliza una sintaxis clave[=valor]
y el paquete de instalación proporciona uno que está bien documentado y es recomendable leerlo. Dentro del fichero, o a través de las opciones de la línea de órdenes, se pueden obtener referencias a recursos adicionales (como un fichero hosts DHCP).
A continuación se muestra una configuración de ejemplo:
# Escuchar solo a esta interfaz
interface=eth1
# Asignar nombres basados en direcciones mac
dhcp-host=00:1e:68:c2:ff:ee,endor,192.168.0.54,24h
# Cualquier otra solicitud DHCP obtiene una IP en este rango
dhcp-range=eth1,192.168.0.100,192.168.0.120,12h
# Activar el servidor TFTP y definir el directorio raíz de los ficheros disponibles a través de TFTP
enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-boot=/pxelinux.0
Después de editar el fichero de configuración, el servicio tiene que ser reiniciado —la recarga es compatible, pero para otros recursos—.
root #
/etc/init.d/dnsmasq restart
Fichero hosts
La aplicación dnsmasq utiliza el fichero /etc/hosts como una de sus fuentes para proporcionar servicios de DNS, a menos que se pase el argumento de línea de órdenes -h
(--no-hosts
).
Si el fichero /etc/hosts se actualiza, el servicio dnsmasq necesita recibir una señal SIGHUP para recargar los ajustes. Este resultado también se puede logar utilizando los script init con la orden reload:
root #
/etc/init.d/dnsmasq reload
Este comportamiento puede ser desactivado a través del parámetro no-hosts
pasado al fichero de configuración.
Ficheros hosts adicionales
Es posible hacer referencia a un fichero de hosts (adicional) para su uso como fuente de consultas DNS. Para ello, agregue la opción de línea de órdenes -H /ruta/al/fichero hosts
(--addn-hosts=/ruta/al/fichero hosts
). También es posible indicar un directorio; en ese caso, todos los ficheros dentro de ese directorio serán tratados como ficheros hosts adicionales.
Al igual que en el fichero de hosts estándar, una señal SIGHUP recarga el fichero.
Este comportamiento también se puede configurar a través del parámetro addn-hosts
en el fichero de configuración.
Servidores de nombres upstream
Por defecto, dnsmasq utiliza los servidores de nombres especificados en /etc/resolv.conf como sus servidores DNS upstream.
Se puede utilizar un fichero diferencie mediante la opción de línea de órdenes -r
(--resolv-file
).
Este comportamiento también se puede definir con el parámetro resolv-file
en el fichero de configuración.
Características
Dnsmasq admite DNS, TFTP, PXE, router advertisements y servicios DHCP. Como tal, es una herramienta de gestión de red versátil para redes pequeñas y medianas.
Servicios DNS
Con el fin de proporcionar (solamente) servicios de DNS, primero identifique el servidor DNS upstream a utilizar. Si este es el mismo servidor de nombres que se especifica en /etc/resolv.conf entonces no hay pasos adicionales que realizar. De lo contrario, señale a dnsmasq el fichero resolv.conf apropiado con la opción -r
(-resolv-file
). La sintaxis de este último es la misma que la utilizada por el fichero /etc/resolv.conf, aunque dnsmasq considera solamente las definiciones de los servidores de nombres.
Por ejemplo:
root #
echo "nameserver 8.8.8.8" >> /etc/dnsmasq.conf.resolv
A continuación, indique a dnsmasq este fichero en el fichero de configuración:
resolv-file=/etc/dnsmasq.conf.resolv
Para comprobar que el servicio está funcionando (después de recargar el fichero de configuración tan pronto se haya cambiado), utilice la orden dig
(proporcionada por el paquete net-dns/bind-tools), solicitando el servidor DNS (en el ejemplo siguiente se ejecuta sobre localhost) para resolver una dirección local o remota:
user $
dig @localhost +short www.gentoo.org
www-bytemark-v4v6.gentoo.org. 89.16.167.134
DNSSEC
Dnsmasq puede validar los datos DNSSEC mientras pasa los datos a través de él. Esto se puede lograr mediante la adición de estas líneas al fichero de configuración:
# DNSSEC setup
dnssec
trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
dnssec-check-unsigned
- Replies which are not DNSSEC signed may be legitimate, because the domain
- is unsigned, or may be forgeries. Setting this option tells dnsmasq to
- check that an unsigned reply is OK, by finding a secure proof that a DS
- record somewhere between the root and the domain does not exist.
- The cost of setting this is that even queries in unsigned domains will need
- one or more extra DNS queries to verify.
dnssec-check-unsigned }}
La referencia de confianza se puede encontrar en el sitio iana.org. Después de este cambio, dnsmasq devolverá SERVFAIL y no habrá datos de DNS si falla la validación. Si la validación tiene éxito establece el flag ad. En el caso de que el dominio no sea compatible con dnsmasq DNSSEC se comportará como si nada.
Servicios DHCP
Para activar los servicios DHCP en dnsmasq, utilice el ajuste de configuración dhcp-range
.
Por ejemplo, para activar la configuración de direcciones IPv6 a través de la anunciación de enrutadores (RA) con tiempo de concesión ilimitado, y la configuración de direcciones IPv4 también con tiempo de concesión ilimitado:
dhcp-range=2001:db8:81:e2::,ra-only,infinite
dhcp-range=192.168.100.100,192.168.100.149,infinite
Es posible utilizar definiciones estáticas para hosts conocidos, ya sea a través del fichero de configuración principal (ajustando dhcp-host=
) o por medio de un fichero separado. Si se utiliza un fichero separado, indique a dnsmasq el mismo a través de la opción -dhcp-hostsfile
. La ventaja de este último enfoque es que basta enviar una señal SIGHUP (o recargar el servicio) para volver a leer las entradas, mientras que cada modificación del fichero de configuración principal requiere reiniciar el servicio completo.
Para obtener más información acerca de la sintaxis del parámetro dhcp-host
consulte la página del manual o el fichero de configuración, ya que su sintaxis es muy extensa.
Utilización
Esta sección ilustra distintos escenarios (mantenimiento y tareas operativas) para el servicio de dnsmasq.
Restablecer leases
Los clientes que hayan efectuado una actualización de la interfaz de red que se traduzca en una dirección MAC diferente, podrían no obtener la dirección IP deseada inmediatamente. Esto se debe a que el servicio dnsmasq ha proporcionado esta dirección IP a la antigua dirección MAC, y esperará hasta que la asignación (leases) de esta dirección haya expirado antes de reasignarle otra.
El servicio dnsmasq almacena sus asignaciones en /var/lib/misc/dnsmasq.leases. Si la asignación tiene que ser eliminada rápidamente, cierre el servicio dnsmasq, retire la asignación del fichero dnsmasq.leases y reinicie el servicio de nuevo.
root #
/etc/init.d/dnsmasq stop
root #
nano -w /var/lib/misc/dnsmasq.leases
root #
/etc/init.d/dnsmasq start
Recargar ajustes de configuración secundarios
Junto al fichero dnsmasq.conf, el servicio dnsmasq puede usar definiciones externas para los siguientes servicios:
- entradas de configuración del host DHCP (a través de la opción
--dhcp-hostsfile
) - opciones de DHCP (a través de la opción
--dhcp-optsfile
)
Cuando se modifican estos ficheros, una señal SIGHUP recarga dnsmasq con los ajustes de estos ficheros de configuración.
El fichero resolv.conf es consultado, por defecto, por dnsmasq; los cambios en este fichero son aplicados automáticamente, a menos que se haya establecido la opción de línea de órdenes
-n
(--no-poll
) o se haya utilizado el parámetro de configuración no-poll
.