Comment appliquer dnsmasq pour utiliser un serveur DNS en amont uniquement pour certains noms de domaine spécifiés?

16

En ce moment, j'ai la ligne suivante dans dnsmasq.conf, qui gère bien toutes les demandes ( /#/correspond à n'importe quel domaine; cela est requis):

address=/#/127.0.0.1

Pourtant, certains domaines doivent être résolus en adresses IP autres que 127.0.0.1.

En tant que solution temporaire, ils ont été ajoutés à /etc/hosts:

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

Malheureusement, il s'agit d'une solution très temporaire: elle cessera de fonctionner dès que l'adresse IP de tout domaine cible changera.

Ma question est: comment forcer dnsmasq à utiliser un serveur DNS en amont pour résoudre les adresses IP de certains noms de domaine (spécifiés)?

nrph
la source

Réponses:

29

Vous pouvez le faire en utilisant la server=directive par exemple

server=/ajax.googleapis.com/8.8.8.8

interrogerait le serveur DNS public google pour le domaine ajax.googleapis.com, de la même manière

server=/amazonaws.com/209.244.0.3

interrogerait le serveur DNS public de Level3 pour le domaine amazonaws.com.

Vous pouvez regrouper plusieurs domaines ensemble

server=/co.uk/com/8.8.4.4

Enverrait les domaines .co.uk et .com au serveur DNS à 8.8.4.4

Vous pouvez également avoir plusieurs server=directives

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

Spécifiez directement l'adresse IP des serveurs en amont. La définition de cet indicateur ne supprime pas la lecture de /etc/resolv.conf, utilisez -R pour cela. Si un ou plusieurs domaines facultatifs sont fournis, ce serveur est utilisé uniquement pour ces domaines et ils sont interrogés uniquement à l'aide du serveur spécifié. Ceci est destiné aux serveurs de noms privés: si vous avez un serveur de noms sur votre réseau qui traite les noms de la forme xxx.internal.thekelleys.org.uk au 192.168.1.1, puis en donnant le drapeau -S /internal.thekelleys.org.uk/ 192.168.1.1 enverra toutes les requêtes pour les machines internes à ce serveur de noms, tout le reste ira aux serveurs dans /etc/resolv.conf. Une spécification de domaine vide, // a la signification spéciale de "noms non qualifiés uniquement", c'est-à-dire des noms sans points. Un port non standard peut être spécifié dans le cadre de l'adresse IP à l'aide d'un caractère #.

Un indicateur -S est également autorisé, ce qui donne un domaine mais pas d'adresse IP; cela indique à dnsmasq qu'un domaine est local et qu'il peut répondre aux requêtes de / etc / hosts ou DHCP mais ne doit jamais transmettre de requêtes sur ce domaine à des serveurs en amont. local est un synonyme de serveur pour rendre les fichiers de configuration plus clairs dans ce cas.

La deuxième adresse IP facultative après le caractère @ indique à dnsmasq comment définir l'adresse source des requêtes sur ce serveur de noms. Il doit s'agir d'une adresse appartenant à la machine sur laquelle dnsmasq s'exécute, sinon cette ligne de serveur sera enregistrée puis ignorée. L'indicateur de port de requête est ignoré pour tous les serveurs pour lesquels une adresse source est spécifiée, mais le port peut être spécifié directement dans le cadre de l'adresse source.

user9517
la source
Je ne pense pas qu'il ait besoin de plusieurs serverlignes: quelles que soient les adresses qu'il ne veut pas résoudre (127.0.0.1), il peut les ajouter avec des addresslignes; quoi que ce soit d'autre, DNSMasq interrogera le server. Je suis presque sûr que c'est comme ça que la configuration est mienne.
gravyface
1
@gravyace: J'ai lu la question comme voulant que tout soit résolu en 127.0.0.1 avec quelques exceptions qu'il veut utiliser DNS pour résoudre au cas où ils changeraient d'adresse.
user9517
Oh peut-être. Qui sait. Quoi qu'il en soit, cela devrait le faire avancer.
gravyface
Fonctionne comme un charme!
nrph