In der Konfigurationsdatei für die lokale Netzwerkschnittstelle (eine Datei mit dem Namensmuster /etc/systemd/network/*.network
) müssen wir entweder angeben, dass wir die lokale DNS-Serveradresse vom DHCP-Server mit DHCP=
erhalten möchten Möglichkeit:
[Network]
DHCP=yes
oder geben Sie seine Adresse explizit mit DNS=
an Möglichkeit:
[Network]
DNS=10.0.0.1
Außerdem müssen wir (im selben Abschnitt) lokale Domänen mit Domains=
angeben Möglichkeit
Domains=domainA.example domainB.example ~example
Wir geben lokale Domänen domainA.example domainB.example
an um das folgende Verhalten zu erhalten (von systemd-resolved.service, systemd-resolved Manpage):
Suchen nach einem Hostnamen, der mit einer der Schnittstellendomänen endet, werden ausschließlich an die übereinstimmenden Schnittstellen weitergeleitet.
Hier entlang hostX.domainA.example
ausschließlich gelöst von unserem lokalen DNS-Server.
Wir spezifizieren mit ~example
dass alle Domains auf example
enden sind als Nur-Routing-Domains zu behandeln, um das folgende Verhalten zu erhalten (aus der Beschreibung dieses Commits):
DNS-Server mit Nur-Routing-Domänen sollten nur für die angegebenen Domänen verwendet werden.
Hier entlang hostY.on.the.internet
ausschließlich gelöst von unserem globalen Remote-DNS-Server.
Hinweis
Idealerweise sollten bei Verwendung des DHCP-Protokolls lokale Domänennamen vom DHCP-Server bezogen werden, anstatt explizit in der Konfigurationsdatei der Netzwerkschnittstelle oben angegeben zu werden. Siehe UseDomains=
Möglichkeit. Es gibt jedoch noch offene Probleme mit dieser Funktion – siehe systemd-networkd Problem mit der DHCP-Suchdomänenoption.
Wir müssen den Remote-DNS-Server als unseren globalen, systemweiten DNS-Server angeben. Wir können dies in /etc/systemd/resolved.conf
tun Datei:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
Vergessen Sie nicht, die Konfiguration neu zu laden und die Dienste neu zu starten:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
Achtung!
Obige Garantien gelten nur, wenn Namen von systemd-resolved aufgelöst werden – siehe Manpage für nss-resolve, libnss_resolve.so.2 und Manpage für systemd-resolved.service, systemd-resolved.
Siehe auch:
- Die Beschreibung von Routing-Suchanfragen in systemd-bezogenen Manpages ist unklar
- Wie behebe ich DNS-Probleme mit systemd-resolved?
Referenzen:
- Manpage für systemd-resolved.service, systemd-resolved
- Manpage für resolve.conf, resolve.conf.d
- Manpage für systemd-network
Um die ausgezeichnete Antwort von @piotrDobrogost zu erweitern, vergessen Sie nicht, /etc/nsswitch.conf
zu konfigurieren um systemd-resolved
zu verwenden als DNS-Auflösungsquelle. Ihr hosts
Direktive sollte für Ihren speziellen Anwendungsfall wie folgt aussehen:
/etc/nsswitch.conf
hosts: files resolve dns
Wenn Sie also die Auflösung nur auf die in Domains
angegebenen Domains beschränken Direktive in /etc/systemd/resolved.conf
wie oben von Piotr ausgeführt, sollte DNS als nächstes in der Reihenfolge der Namensauflösungsquellen konsultiert werden, die /etc/nsswitch.conf
angegeben sind wenn Domains NICHT sind gefunden in Domains
Direktive:
Der folgende Link verweist auf die Anforderung, resolve anzugeben in /etc/nsswitch.conf
also systemd-resolved
wird während der Namensauflösung herangezogen:
https://github.com/systemd/systemd/issues/940
SystemD-Dokumentation fand ich schrecklich. Ich musste ein Verständnis aus mehreren Links zusammensetzen, einschließlich Piotrs Antwort oben;-)