Dans le fichier de configuration de l'interface réseau local, nous devons spécifier si nous voulons obtenir l'adresse du serveur DNS local à partir du serveur DHCP en utilisant l' DHCP=
option :
[Network]
DHCP=yes
ou spécifiez explicitement son adresse en utilisant l' DNS=
option :
[Network]
DNS=10.0.0.1
De plus, nous devons spécifier (dans la même section) les domaines locaux en utilisant l' Domains=
option
Domains=domainA.example domainB.example ~example
Nous spécifions les domaines locaux domainA.example domainB.example
pour obtenir le comportement suivant (à partir de systemd-resolu.service, page de manuel systemd-resolu ):
Les recherches d'un nom d'hôte se terminant par l'un des domaines par interface sont exclusivement acheminées vers les interfaces correspondantes.
Cette façon hostX.domainA.example
sera résolue exclusivement par notre serveur DNS local.
Nous spécifions ~example
que tous les domaines se terminant par example
doivent être traités comme des domaines de route uniquement pour obtenir le comportement suivant (à partir de la description de ce validation):
Les serveurs DNS qui ont des domaines de routage uniquement ne doivent être utilisés que pour les domaines spécifiés.
Cette façon hostY.on.the.internet
sera résolue exclusivement par notre serveur DNS global et distant.
Remarque
Idéalement, lors de l'utilisation du protocole DHCP, les noms de domaine locaux doivent être obtenus auprès du serveur DHCP au lieu d'être spécifiés explicitement dans le fichier de configuration de l'interface réseau ci-dessus. Voir UseDomains=
option . Cependant, il reste des problèmes en suspens avec cette fonctionnalité - voir l' option domaines de recherche DHCP systemd-networkd .
Nous devons spécifier le serveur DNS distant comme notre serveur DNS global, à l'échelle du système. Nous pouvons le faire en /etc/systemd/resolved.conf
fichier:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
N'oubliez pas de recharger la configuration et de redémarrer les services:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Mise en garde!
Les garanties ci-dessus s'appliquent uniquement lorsque les noms sont résolus par systemd-resolved - voir la page de manuel pour nss-resolver, libnss_resolve.so.2 et la page de manuel pour systemd- resolu.service , systemd-resolu .
Voir également:
Les références:
.local
dans cet exemple? Certes, avec avahi, cela était censé être réservé au MDNS et en abuser était un gros non-non. Il serait plus clair pour moi d'utiliserexample.com
ou .exemple ..local
est défini comme domaine spécial dans la RFC 6762 - DNS multidiffusion dans la section Noms DNS multidiffusion . Merci, réparé./etc/systemd/network/*.network
? Trouvé ici superuser.com/a/1365864Juste pour développer l'excellente réponse de @piotrDobrogost, n'oubliez pas de configurer
/etc/nsswitch.conf
pour l'utilisersystemd-resolved
comme source de résolution DNS. Votrehosts
directive doit se présenter comme suit pour votre cas d'utilisation particulier:/etc/nsswitch.conf
Donc, si vous limitez la résolution aux seuls domaines spécifiés dans la
Domains
directive en/etc/systemd/resolved.conf
tant que détails Piotr ci-dessus, DNS devrait ensuite être consulté dans l'ordre des sources de résolution de noms spécifiées/etc/nsswitch.conf
lorsque les domaines NE SONT PAS trouvés dansDomains
directive:Les références de lien suivant la exigence de préciser la détermination de
/etc/nsswitch.conf
sisystemd-resolved
est consulté lors de la résolution de nom:https://github.com/systemd/systemd/issues/940
La documentation de SystemD que j'ai trouvée terrible. J'ai dû rassembler une compréhension de plusieurs liens, y compris la réponse de Piotr ci-dessus ;-)
la source
/etc/resolve.conf
trouve un lien symbolique vers un/run/systemd/resolve/stub-resolv.conf
fichier qui contient à son tour l'adresse du résolveur de stub DNS de systemd- resolver, il n'est pas nécessaire de placer uneresolve
directive dans le/etc/nsswitch.conf
fichier car les requêtes DNS seront dirigées (en raison de lanss-dns
directive standard ) vers résolveur de stub qui agit selon les règles de systemd-resolution ./etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts` (" fichiers ") seraient vérifiées pour l' IP statique : les mappages de noms et si aucun n'est trouvé, le stub résolu par systemd résolu serait ensuite consulté . Je ne vois pas comment il serait possible de mettre en scène des sources de résolution DNS sans utiliser/etc/nsswitch.conf
. Ai-je raté un tour ici?/etc/nsswitch.conf
n'est pas nécessaire. Je dis que lorsque l'on utilise le résolveur DNS de stub résolu par systemd, il suffit alors d'avoir ladns
directive listée enhosts:
ligne (probablement après lafile
directive). Il n'y a pas besoin deresolve
directive car c'est le résolveur de stub qui est le point d'entrée de la logique de systemd-resolution et non lenss-resolve
module plug-in ...resolve
directive ➟ module plug-in NSS -resolve NSS ➟ par systemd-resolu ou par ladns
directive ➟ module plug-in NSS nss-dns ➟ 'résolveur DNS stub de systemd-resolu ' résolu par systemdfiles
alors de la 2ème partie de votre question. En le relisant, il semble que vous parliez simplement de vérifier le cache local pour un mappage IP: nom , puis de contacter un redirecteur s'il n'est pas trouvé. Je règle généralement la première source de résolution DNS pour contourner le DNS pour me permettre de tester et de ne pas toucher les hôtes de productionresolve
/etc/nsswitch.conf
files