In der Konfigurationsdatei für die lokale Netzwerkschnittstelle muss entweder angegeben werden, dass die lokale DNS-Serveradresse vom DHCP-Server mit der folgenden DHCP=
Option bezogen werden soll :
[Network]
DHCP=yes
oder geben Sie die Adresse explizit mit der DNS=
Option an :
[Network]
DNS=10.0.0.1
Zusätzlich müssen wir (im selben Abschnitt) lokale Domänen mit der Option angebenDomains=
Domains=domainA.example domainB.example ~example
Wir geben lokale Domänen domainA.example domainB.example
an, um das folgende Verhalten zu erzielen (von systemd-resolved.service, systemd-resolved man page):
Suchen nach einem Hostnamen, der auf eine der Domänen pro Schnittstelle endet, werden ausschließlich an die entsprechenden Schnittstellen weitergeleitet.
Dieser Weg hostX.domainA.example
wird ausschließlich von unserem lokalen DNS-Server gelöst .
Wir legen damit fest, ~example
dass alle Domänen, die auf enden example
, als reine Routendomänen behandelt werden sollen, um das folgende Verhalten zu erzielen (aus der Beschreibung dieses Commits):
DNS-Server mit Nur-Route-Domänen sollten nur für die angegebenen Domänen verwendet werden.
Dieser Weg hostY.on.the.internet
wird ausschließlich von unserem globalen, entfernten DNS-Server gelöst .
Hinweis
Idealerweise sollten bei Verwendung des DHCP-Protokolls lokale Domänennamen vom DHCP-Server bezogen werden, anstatt sie explizit in der Konfigurationsdatei der obigen Netzwerkschnittstelle anzugeben. Siehe UseDomains=
Option . Es gibt jedoch noch offene Probleme mit dieser Funktion - siehe Problem mit der Option systemd-networkd DHCP search domains .
Wir müssen den Remote-DNS-Server als unseren globalen, systemweiten DNS-Server angeben. Wir können dies in /etc/systemd/resolved.conf
Datei tun :
[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
Vorsicht!
Die obigen 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:
Verweise:
.local
in diesem Beispiel darüber nachgedacht, nicht zu verwenden ? Natürlich sollte dies bei Avahi für MDNS reserviert sein, und der Missbrauch war ein großes Nein-Nein. Es wäre klarer zu mir zu verwendenexample.com
oder .example ..local
wird in RFC 6762 - Multicast-DNS im Abschnitt Multicast-DNS-Namen eine spezielle Domäne definiert . Danke, behoben./etc/systemd/network/*.network
? Gefunden hier superuser.com/a/1365864Vergessen Sie nicht, die Konfiguration als Quelle für die DNS-Auflösung
/etc/nsswitch.conf
zu verwenden , um die ausgezeichnete Antwort von @piotrDobrogost zu erweiternsystemd-resolved
. Ihrehosts
Direktive sollte für Ihren speziellen Anwendungsfall wie folgt aussehen:/etc/nsswitch.conf
Wenn Sie also die Auflösung auf nur die Domänen beschränken, die in der
Domains
Direktive in den/etc/systemd/resolved.conf
obigen Piotr-Details angegeben sind, sollte DNS als Nächstes in der angegebenen Reihenfolge der Quellen für die Namensauflösung konsultiert werden,/etc/nsswitch.conf
wenn Domänen in der Direktive NICHT gefunden werdenDomains
:Die folgende Link verweist auf die Anforderung zu spezifizieren Entschlossenheit in
/etc/nsswitch.conf
sosystemd-resolved
bei der Namensauflösung herangezogen wird:https://github.com/systemd/systemd/issues/940
Ich habe festgestellt, dass die SystemD-Dokumentation schlimm ist. Ich musste ein Verständnis aus mehreren Links zusammensetzen, einschließlich der obigen Antwort von Piotr ;-)
quelle
/etc/resolve.conf
sich ein Symlink zu einer/run/systemd/resolve/stub-resolv.conf
Datei befindet, die wiederum die Adresse des DNS-Stub-Resolvers von systemd-resolve enthält , ist es nicht erforderlich, eineresolve
Anweisung in die/etc/nsswitch.conf
Datei einzufügen, da DNS-Anforderungen (aufgrund der Standardanweisungnss-dns
) an geleitet werden Stub-Resolver, der nach den Regeln von systemd-resolved arbeitet ./etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts` (" Dateien ") auf statische IP: Namenszuordnungen überprüft werden, und wenn keine gefunden werden, wird der vom System aufgelöste Stub, der aufgelöst wurde, als nächstes konsultiert . Ich kann nicht sehen, wie es möglich wäre, DNS-Auflösungsquellen ohne Verwendung von bereitzustellen/etc/nsswitch.conf
. Vermisse ich hier einen Trick?/etc/nsswitch.conf
ist nicht erforderlich. Ich sage, wenn man den Stub-DNS-Resolver von systemd-resolved verwendet, ist es ausreichend, diedns
Direktivehosts:
(vermutlich nach derfile
Direktive) in einer Zeile aufzulisten. Dort ist keineresolve
Direktive erforderlich, da der Stub-Resolver der Einstiegspunkt in die Logik von systemd-resolved ist und nicht dasnss-resolve
Plug-in-Modul ...resolve
Richtlinie ➟ NSS-resolve NSS - Plug-in - Modul ➟ systemd aufgelöste oder durchdns
Richtlinie ➟ NSS-dns NSS - Plug-in - Modul ➟ Systemd aufgelösten der 'Stub - DNS - Resolver ➟ systemd-resolvedfiles
damaligenresolve
Ding im/etc/nsswitch.conf
2. Teil deiner Frage angekommen . Beim erneuten Lesen haben Sie anscheinend gerade über das Überprüfen des lokalen Caches auf eine IP: -Namenszuordnung nachgedacht und sich dann an eine Weiterleitung gewandt, wenn diese nicht gefunden wurde. Im Allgemeinen habe ich diefiles
erste DNS-Auflösungsquelle so eingestellt, dass DNS umgangen wird, damit ich die Produktionshosts testen und nicht treffen kann