web-dev-qa-db-fra.com

Comment configurer systemd-resolution et systemd-networkd pour utiliser le serveur DNS local pour résoudre les domaines locaux et le serveur DNS distant pour les domaines distants?

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.

34
Piotr Dobrogost

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:

36
Piotr Dobrogost

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 ;-)

2
F1Linux