Je suis connecté au réseau local avec accès à Internet via une passerelle. Il existe un serveur DNS dans le réseau local qui est capable de résoudre les noms d'hôtes des ordinateurs à partir du réseau local.
Je voudrais configurer résolu par systemd et systemd-networkd afin que les demandes de recherche de noms d'hôtes locaux soient dirigées (acheminées) exclusivement vers le serveur DNS local et les demandes de recherche pour tous les autres les noms d'hôte seraient dirigés exclusivement vers un autre serveur DNS distant.
Supposons que je ne sais pas où se trouvent les fichiers de configuration ou si je dois ajouter d'autres fichiers et exiger que leur (s) chemin (s) soient spécifiés dans la réponse.
Dans le fichier de configuration de l'interface réseau locale (un fichier correspondant au modèle de nom /etc/systemd/network/*.network
) nous devons spécifier que nous voulons obtenir l'adresse du serveur DNS local à partir du serveur DHCP en utilisant DHCP=
option :
[Network]
DHCP=yes
ou spécifiez explicitement son adresse en utilisant DNS=
option :
[Network]
DNS=10.0.0.1
De plus, nous devons spécifier (dans la même section) les domaines locaux en utilisant Domains=
option
Domains=domainA.example domainB.example ~example
Nous spécifions les domaines locaux domainA.example domainB.example
pour obtenir le comportement suivant (depuis systemd-resolu.service, systemd-resolu 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.
On précise avec ~example
que tous les domaines se terminant par example
doivent être traités comme des domaines de route uniquement pour obtenir le comportement suivant (d'après la description de this 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 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 y a encore des problèmes en suspens avec cette fonctionnalité - voir option de domaines de recherche DHCP systemd-networkd problème.
Nous devons spécifier le serveur DNS distant comme notre serveur DNS global, à l'échelle du système. Nous pouvons le faire dans /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 -olved - voir page de manuel pour nss-resolver, libnss_resolve.so.2 et page de manuel pour systemd-resolu.service, systemd-resol .
Voir également:
Références:
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 directive hosts
doit ressembler à 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 la directive Domains
dans /etc/systemd/resolved.conf
comme Piotr le précise ci-dessus, le DNS doit ensuite être consulté dans l'ordre des sources de résolution de noms spécifiées /etc/nsswitch.conf
lorsque les domaines sont [~ # ~] pas [~ # ~] trouvés dans la directive Domains
:
Le lien suivant fait référence à l'exigence de spécifier résoudre dans /etc/nsswitch.conf
donc systemd-resolved
est consulté lors de la résolution du nom:
https://github.com/systemd/systemd/issues/94
La documentation de SystemD que j'ai trouvée terrible. J'ai dû reconstituer une compréhension de plusieurs liens, y compris la réponse de Piotr ci-dessus ;-)