¿Cómo hacer que dnsmasq use un servidor dns ascendente solo para algunos nombres de dominio específicos?

16

En este momento tengo la siguiente línea en dnsmasq.conf, que maneja bien todas las solicitudes ( /#/coincide con cualquier dominio; esto es obligatorio):

address=/#/127.0.0.1

Sin embargo, hay algunos dominios que deben resolverse en direcciones IP que no sean 127.0.0.1.

Como solución temporal se han agregado a /etc/hosts:

209.85.148.95   ajax.googleapis.com
207.97.227.245  underscorejs.org
72.21.194.31    s3.amazonaws.com

Desafortunadamente, esta es una solución muy temporal: dejará de funcionar tan pronto como cambie la dirección IP de cualquier dominio de destino.

Mi pregunta es: ¿cómo hacer cumplir dnsmasq para usar un servidor DNS ascendente para resolver las direcciones IP de algunos nombres de dominio (especificados)?

nrph
fuente

Respuestas:

29

Puede hacerlo utilizando la server=directiva, p. Ej.

server=/ajax.googleapis.com/8.8.8.8

consultaría al servidor DNS público de Google para el dominio ajax.googleapis.com, de manera similar

server=/amazonaws.com/209.244.0.3

consultaría el servidor DNS público de Level3 para el dominio amazonaws.com.

Puede agrupar varios dominios juntos

server=/co.uk/com/8.8.4.4

Enviaría los dominios .co.uk y .com al servidor DNS en 8.8.4.4

También puedes tener múltiples server=directivas

−S, --server = [/ [<domain>] / [domain /]] [<ipaddr> [# <port>] [@ <source> [# <port>]]]

Especifique la dirección IP de los servidores ascendentes directamente. Establecer este indicador no suprime la lectura de /etc/resolv.conf, use -R para hacerlo. Si se dan uno o más dominios opcionales, ese servidor se usa solo para esos dominios y se consultan solo usando el servidor especificado. Esto está destinado a servidores de nombres privados: si tiene un servidor de nombres en su red que se ocupa de los nombres del formulario xxx.internal.thekelleys.org.uk en 192.168.1.1 y luego le da la bandera -S /internal.thekelleys.org.uk/ 192.168.1.1 enviará todas las consultas de máquinas internas a ese servidor de nombres, todo lo demás irá a los servidores en /etc/resolv.conf. Una especificación de dominio vacía // tiene el significado especial de "solo nombres no calificados", es decir, nombres sin ningún punto en ellos. Se puede especificar un puerto no estándar como parte de la dirección IP utilizando un carácter #.

También se permite una bandera -S que proporciona un dominio pero no una dirección IP; esto le dice a dnsmasq que un dominio es local y puede responder consultas de / etc / hosts o DHCP, pero nunca debe reenviar consultas en ese dominio a ningún servidor ascendente. local es un sinónimo de servidor para aclarar los archivos de configuración en este caso.

La segunda dirección IP opcional después del carácter @ le dice a dnsmasq cómo configurar la dirección de origen de las consultas para este servidor de nombres. Debe ser una dirección perteneciente a la máquina en la que se está ejecutando dnsmasq; de lo contrario, esta línea del servidor se registrará y luego se ignorará. El indicador de puerto de consulta se ignora para cualquier servidor que tenga una dirección de origen especificada, pero el puerto puede especificarse directamente como parte de la dirección de origen.

usuario9517
fuente
No creo que necesite varias serverlíneas: cualquiera que sea la dirección que quiera resolver (127.0.0.1), puede agregarlas con addresslíneas; cualquier otra cosa, DNSMasq consultará el server. Estoy bastante seguro de que así es como está configurado el mío.
gravyface
1
@gravyace: leí la pregunta como queriendo hacer que todo se resuelva a 127.0.0.1 con algunas excepciones que quiere usar DNS para resolver en caso de que cambien de dirección. Como veo, la forma de hacerlo es usar las directivas del servidor.
user9517
Oh tal vez Quién sabe. De cualquier manera, eso debería ponerlo en marcha.
gravyface
¡Funciona de maravilla!
nrph