Dans le fichier de configuration de l'interface réseau local (un fichier correspondant au modèle de nom /etc/systemd/network/*.network
) nous devons soit spécifier que nous voulons obtenir l'adresse du serveur DNS local à partir du serveur DHCP en utilisant DHCP=
choix :
[Network]
DHCP=yes
ou spécifiez son adresse explicitement en utilisant DNS=
choix :
[Network]
DNS=10.0.0.1
De plus, nous devons spécifier (dans la même section) les domaines locaux en utilisant Domains=
possibilité
Domains=domainA.example domainB.example ~example
Nous spécifions les domaines locaux domainA.example domainB.example
pour obtenir le comportement suivant (à partir de systemd-resolved.service, systemd-resolved page de manuel):
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.
Par ici hostX.domainA.example
sera résolu exclusivement par notre serveur DNS local.
Nous spécifions avec ~example
que tous les domaines se terminant par example
doivent être traités comme des domaines de routage uniquement pour obtenir le comportement suivant (d'après la description de ce commit) :
Les serveurs DNS qui ont des domaines de routage uniquement ne doivent être utilisés que pour les domaines spécifiés.
Par ici hostY.on.the.internet
sera résolu 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 à partir 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 existe encore des problèmes avec cette fonctionnalité - voir le problème de l'option des 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
Attention !
Les garanties ci-dessus s'appliquent uniquement lorsque les noms sont résolus par systemd-resolved – voir la page de manuel pour nss-resolve, libnss_resolve.so.2 et la page de manuel pour systemd-resolved.service, systemd-resolved.
Voir aussi :
- La description du routage des requêtes de recherche dans les pages de manuel relatives à systemd n'est pas claire
- Comment résoudre les problèmes de DNS avec systemd-resolved ?
Références :
- Page de manuel pour systemd-resolved.service, systemd-resolved
- Page de manuel pour resolve.conf, resolve.conf.d
- Page de manuel pour systemd-network
Juste pour développer l'excellente réponse de @piotrDobrogost, n'oubliez pas de configurer /etc/nsswitch.conf
utiliser systemd-resolved
comme source de résolution DNS. Votre hosts
La directive doit ressembler à ce qui suit pour votre cas d'utilisation particulier :
/etc/nsswitch.conf
hosts: files resolve dns
Donc, si vous limitez la résolution aux seuls domaines spécifiés dans le Domains
directive en /etc/systemd/resolved.conf
comme le détaille Piotr ci-dessus, le DNS doit ensuite être consulté dans l'ordre des sources de résolution de noms spécifié /etc/nsswitch.conf
lorsque les domaines ne sont PAS trouvé dans Domains
instruction :
Le lien suivant fait référence à l'exigence de spécifier résoudre en /etc/nsswitch.conf
donc systemd-resolved
est consulté lors de la résolution du nom :
https://github.com/systemd/systemd/issues/940
Documentation SystemD que j'ai trouvée désastreuse. J'ai dû reconstituer une compréhension à partir de plusieurs liens, y compris la réponse de Piotr ci-dessus;-)