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