Dnsmasq
Dnsmasq es un promotor de DNS y servidor DHCP ligero y fácil de configurar. Está diseñado para proporcionar DNS y opcionalmente DHCP a una pequeña red. Puede servir los nombres de máquinas locales que no están en el DNS global. El servidor DHCP integrado con el servidor DNS permite que máquinas con direcciones asignadas por DHCP aparezcan en el DNS configuradas en cada host o en un archivo central de configuración. Dnsmasq soporta concesiones DHCP estáticas y dinámicas y BOOTP para el arranque de máquinas sin disco.
Está instalado y preconfigurado en OpenWrt. Ver → /etc/config/dhcp
.
Configuración
La onfiguración es hecha con la ayuda del archivo de configuración uci: /etc/config/dhcp
pero puede usarlo juntamente con el archivo /etc/dnsmasq.conf
.
Dependiendo de la configuración del archivo uci puede usar adicionalmente los archivos /etc/ethers
y /etc/hosts
.
/etc/config/dhcp
→ /etc/config/dhcp es un archivo de configuración UCI y está documentado exhaustivamente en uci. ¡Casi todos los ajustes pueden ser configurados con él!
/etc/dnsmasq.conf
Además puede usar /etc/dnsmasq.conf
, ver arriba.
Ejemplo:
Por defecto dnsmasq viene configurado para poner sus hostsen el dominio .lan
. Esto es especificado en el archivo de configuración así:
# allow /etc/hosts and dhcp lookups via *.lan local=/lan/ domain=lan
Puede cambiarse esto hacia donde quiera que su dominio casero vaya a estar. También si desea que sus hosts sean accesibles por su domino casero sin tener que especificar el dominio en su archivo
/etc/hosts
añada la directiva expand-hosts
a su archivo /etc/dnsmasq.conf
.
Como ejemplo, sin expand-hosts
usted sólo puede alcanzar router, ubuntu-desktop y ubuntu-laptop.
Con expand-hosts activo usted puede alcanzar router, router.lan, ubuntu-desktop, ubuntu-desktop.lan, etc.
Probablemente esto coincide con lo que usted está buscando de todos modos.
Sin este ajuste usted tendría que añadir entradas .lan a su /etc/hosts
.
/etc/ethers
En /etc/ethers
las concesiones estáticas pueden ser asignadas. Ver → static.leases.
/etc/hosts
En /etc/hosts
las entradas DNS son configuradas. dnsmasq usará estas entradas para responder a las peticiones De su red.
Formato:
[IP_address] host_name host_name_short ...
Ejemplo:
192.168.1.1 router OpenWrt localhost 192.168.1.2 debian-server 192.168.1.3 ubuntu-laptop
Puertos DNS y DHCP
DNS necesita los puertos TCP y UDP 53 abiertos en el firewall. DHCP necesita los puertos UDP 67 y 68 abiertos para su zona to/from en el firewall. Ver http://wiki.openwrt.org/doc/recipes/guest-wlan y http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html (viz “--dhcp-alternate-port”) para más información.
Examples
Añadir un DNS secundario
¿Qué debe hacer si usted ya tiene un servidor DNS (servidor DNS secundario) pero quiere que su router (servidor DNS primario) resuelva algunas de las peticiones DNS? Simplemente haga lo siguiente:
rm /etc/resolv.conf
Esto borrará el enlace simbólico resolv.conf. Después debemos añadir la dirección ip del servidor DNS secundario al archivo /etc/resolv.conf
echo "nameserver 192.168.1.2">/etc/resolv.conf
Cambiar 192.168.1.2 por la ip de su servidor DNS después reiniciar o reiniciar el servicio dnsmasq.
reboot
o
killall dnsmasq /etc/init.d/dnsmasq start
Después usted necesita preparar su servidor DNS secundario para que resuelva peticiones DNS de Internet: ssh en su router y:
cat /tmp/resolv.conf.auto
esto mostrará algo como esto:
nameserver 212.68.193.110 nameserver 212.68.193.196
Copie la información y añádala al archivo /etc/resolv.conf de su servidor DNS secundario: en su servidor DNS secundario haga:
rm /etc/resolv.conf echo "nameserver 212.68.193.110">>/etc/resolv.conf echo "nameserver 212.68.193.196">>/etc/resolv.conf
Cambie 212.68.193.110 y 212.68.193.196 por la direcciones IP que ha obtenido con el comando cat /tmp/resolv.conf.auto.
Configurando dnsmasq para redirigir peticiones dns hacia servidores DNS públicos
Si usted quiere usar servidores DNS públicos 1) para resolver peticiones dns públicas puede configurar dnsmasq para ello. Usted puede incluso especificar más de tres servidores de nombres 2).
Para usar Google Public DNS simplemente añada las siguientes líneas a /etc/dnsmasq.conf.
server=8.8.8.8 server=8.8.4.4
En caso de que prefiera usar OpenWrt UCI puede ejecutar estos comandos.
uci add_list dhcp.@dnsmasq[-1].server=8.8.8.8 uci add_list dhcp.@dnsmasq[-1].server=8.8.4.4 uci commit dhcp
También puede editar directamente /etc/config/dhcp.
config dnsmasq option domainneeded '1' option boguspriv '1' option localise_queries '1' option local '/lan/' option domain 'lan' option expandhosts '1' option authoritative '1' option readethers '1' option leasefile '/tmp/dhcp.leases' option resolvfile '/tmp/resolv.conf.auto' option rebind_protection '0' option server '8.8.8.8' option server '8.8.4.4'
En caso de que quiera usar OpenDNS (hay 4 servidores DNS públicos)
uci add_list dhcp.@dnsmasq[-1].server=202.67.222.222 uci add_list dhcp.@dnsmasq[-1].server=202.67.220.220 uci add_list dhcp.@dnsmasq[-1].server=202.67.222.220 uci add_list dhcp.@dnsmasq[-1].server=202.67.220.222 uci commit dhcp
Obviamente puede usar otros servidores DNS. Tan sólo envíe un SIGHUP al proceso dnsmasq o reinicie el servicio dnsmasq para aplicar los nuevos servidores DNS de reenvío.
Configurando dnsmasq para usar diferentes rangos IP para cable e inhalámbrico
Suponga que tiene lo siguiente:
vlan0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 eth1 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX inet addr:10.75.9.1 Bcast:10.75.9.255 Mask:255.255.255.0
Simplemente ponga 2 opciones “dhcp-range” en su archivo
/etc/dnsmasq.conf
:
# dhcp-range=[network-id,],[[,],][,] dhcp-range=lan,192.168.1.101,192.168.1.104,255.255.255.0,24h dhcp-range=wlan,10.75.9.111,10.75.9.119,255.255.255.0,2h
Puede usar diferentes valores “network-id” con “dhcp-option” para personalizar las opciones con las que su servidor DHCP abastecerá a sus clientes DHCP cableados e inhalámbricos.
por ejemplo
#set the default route for dhcp clients on the wlan side to 10.10.6.33 dhcp-option=wlan,3,10.10.6.33 #set the dns server for the dhcp clients on the wlan side to 10.10.6.33 dhcp-option=wlan,6,10.10.6.33 #set the default route for dhcp clients on the lan side to 10.10.6.1 dhcp-option=lan,3,10.10.6.1 #set the dns server for the dhcp clients on the lan side to 10.10.6.1 dhcp-option=lan,6,10.10.6.1
Configurando dnsmasq para generar respuestas DHCP sólo a clientes conocidos
Hay situaciones en que puede desear que dnsmasq genere direcciones DHCP para clientes conocidos (como los definidos en
/etc/ethers
). Primero declare
lan_dhcp_num=0
para indicar que no se deben generar direcciones. Después modifique el archivo
/etc/init.d/S60dnsmasq
para incluir las líneas
if [ "${num:-150}" = "0" ]; then END=static fi
después de las llamadas a
ipcalc.sh
. Reinicie el servicio o reinicie.
Configurando dnsmasq para asociar nombres de máquina a direcciones DHCP
Necesitará las siguientes líneas en su archivo
/etc/dnsmasq.conf
: (Ajuste la dirección IP de su router si no es 192.168.1.1)
dhcp-option=3,192.168.1.1 dhcp-option=6,192.168.1.1
Esto es para dnsmasq en el router. El truco es que el cliente DHCP debe enviar su nombre de máquina durante la negociación DHCP. El archivo
dhclient.conf
puede estar en
/etc/
(debian) o
/etc/dhcp3/
(kubuntu) necesita tener una única línea descomentada y editada:
send host-name "hostname";
Grabe el archivo y reinicie el interfaz. Repita en todos los sistemas de los clientes.
Configurando dnsmasq para transmitir información del servidor WINS
Necesitará la siguiente línea en el archivo
/etc/dnsmasq.conf
: (Ajuste la dirección IP si su servidor WINS no es 192.168.1.2)
dhcp-option=44,192.168.1.2
A medida que sus máquinas liberen y renueven la información DHCP obendrán la dirección del servidor WINS automáticamente.
Configurando dnsmasq para transmitir información a un servidor DNS externo
El siguiente cambio en su archivo /etc/dnsmasq.conf
permitirá la configuración automática de sus clientes DHCP para que usen otros servidores DNS diferentes al del router.
dhcp-option=6,ipaddress1,ipaddress2
O puede hacer lo mismo en /etc/config/dhcp
:
... config 'dhcp' 'lan' list 'dhcp_option' '6,ipaddress1,ipaddress2' ...
A medida que sus máquinas liberen y renueven la información DHCP obendrán las direcciones de los nuevos servidores DNS automáticamente.
Teléfonos SIP y dnsmasq
Por defecto la opción filterwin2k en dnsmasq está activada, lo que parece causar el bloqueo de las peticiones a los registros SRV
.
Los registros SRV
son usados por ordenadores no sólo por Windows para encontrar sus controladores de dominio y para ser usados por teléfonos SIP por ejemplo para encontrar el servidor responsable de un determinado domino.
Los registros SRV
son como los generalizados registros MX
.
Por lo tanto la opción filterwin2k
necesita estar desconectada para permitir que los teléfonos SIP que usan dnsmasq como su servidor DNS funcionen.
Comentado en /etc/dnsmasq.conf
o desactivado en el interfaz web.
O puede hacer lo mismo en /etc/config/dhcp
:
config 'dnsmasq' option 'filterwin2k' '0' ...
Filtrado DNS
Troubleshooting
log continuamente lleno de DHCPINFORM / DHCPACK
Windows 7 y otros consultan su configuración de proxy usando DHCP. El problema es que no se detienen hasta que han recibido una respuesta. Esto provoca que el log contenga mucha información sobre estas peticiones, como se ve en este ejemplo inferior (gracias a http://wiki.excito.org por la info).
Jul 1 06:34:09 MorganB3 dnsmasq-dhcp[1638]: DHCPINFORM(br0) 10.69.10.59 00:23:14:c5:33:fc Jul 1 06:34:09 MorganB3 dnsmasq-dhcp[1638]: DHCPACK(br0) 10.69.10.59 00:23:14:c5:33:fc MorgansVaioF12Z
Para solventar esto editar el archivo /etc/dnsmasq.conf y añadir las siguientes líneas:
# This will tell DHCP clients to not ask for proxy information # Some clients, like Windows 7, will constantly ask if not told NO dhcp-option=252,"\n"
y reiniciar dnsmasq con /etc/init.d/dnsmasq restart
Definiendo el Queryport de dnsmasq
El queryport no es el puerto del servidor DNS usado por los cliente DHCP sino que es el puerto saliente que dnsmasq usa para consultar a otros servidores y es parte integral del éxito de dnsmasq asignando valores DNS a los clientes DHCP. Los valores por defecto crean altos números de puerto arbitrariamente en un rangop de puertos. Asignando una opción como “ option queryport '30000' ” en /etc/config/dhcp es posible contreñir estas conexiones al puerto que usted defina. Asegúrese de que su firewall permite conexiones salientes desde el router en el queryport que usted defina.
Como medida de precaución dnsmasq se ejecuta en OpenWrt bajo el usuario “nobody” por lo que no tiene permitido crear sockets de escucha en puertos < 1024. Usando el puerto estándar DNS 53 para estas consultas fallará. El fallo podrá ser encontrado en los logs. Logread mostará un error “ignoring nameserver” como en esta línea:
Jan 01 01:01:01 MyRoutersName daemon.warn dnsmasq[3490]: ignoring nameserver 8.8.8.8 - cannot make/bind socket: Permission denied
No asigne puertos de consulta menores que 1024 to the queryport.
Notas
- Página del proyecto: http://thekelleys.org.uk/dnsmasq/doc.html