Wie beharrt die "systemd-resolution" -Konfiguration für eine bestimmte Netzwerkschnittstelle?

1472
quat

Ich habe mein Ubuntu Desktop auf Bionic Beaver aufgerüstet, das auf Systemd-Resolution umgestellt wurde . Mit dieser Änderung funktionierte die LXD-DNS-Auflösung nicht mehr.

Um LXD-Container auffindbar zu machen, kann ich den folgenden Befehl ausführen. Beachten Sie, dass die IP 10.78.38.1 die IP der lxdbr0- Bridge ist.

$ sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd 

Damit kann ich den LXD-Container anhand des Namens erkennen und die Konfiguration sieht wie folgt aus.

$ systemd-resolve --status . . . Link 10 (lxdbr0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 10.78.38.1 DNS Domain: lxd . . . 

Nach einem Systemneustart ist diese Konfiguration jedoch nicht mehr verfügbar.

$ systemd-resolve --status . . . Link 10 (lxdbr0) Current Scopes: none LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no . . . 

Um das oben genannte dauerhaft zu machen, habe ich die Manpage systemd-resolve http://manpages.ubuntu.com/manpages/bionic/man8/systemd-resolved.service.8.html durchgesehen . Es wird empfohlen, eine /etc/systemd/resolved.conf.d/lxd.conf -Datei zu erstellen. Es stehen jedoch keine Parameter zur Verfügung, die es mir ermöglichen, eine solche Konfiguration für eine bestimmte NIC festzulegen.

0

2 Antworten auf die Frage

0
Lubo Diakov

Ich weiß, dass diese Frage schon 2 Monate hier war, aber vielleicht brauchen Sie noch ein paar Antworten?

1) Systemd-networkd speichert Netzwerkkonfigurationen in (mindestens) 3 Verzeichnissen, möglicherweise mehr. Die, die für Sie am relevantesten erscheint, ist:

/etc/systemd/network/ 

(es überschreibt die anderen 2, nämlich / lib / s / n und / run / s / n.

Erstellen Sie eine ähnliche Textdatei:

[Match] Name=enp0s4  [Network] DHCP=yes DNS=192.168.1.1 

Sie können es nennen, was Sie wollen, dass es scheint, solange es in diesem Verzeichnis ist, mein enp0s4.network genannt wird, immer der Inhalt richtig ist entscheidend, wenn Sie es falsch, schlechte Dinge passieren, wie Ihr Netzwerk nicht mehr funktioniert, zumindest auf dieser Schnittstelle, bis Sie eine funktionierende Konfiguration wiederherstellen. Das ist nicht einfach, ich habe meine vermasselt und ich brauchte eine Stunde, um das herauszufinden. Gut, dass sich mein "Server" im nächsten Raum befindet, nicht in einem entfernten Rechenzentrum!

Beispiele zum Einrichten einer Bridge finden Sie hier:

man systemd.network |grep -A 42 "Example 3" 

Die dort aufgeführten Beispiele und mein Code-Snippet können eingerichtet werden:

Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 10.78.38.1 

Nicht sicher, was die Syntax für eine DNS-Domäne ist, sollte es möglich sein, die Manpage ist 30 Seiten lang! Wenn Sie können, überspringen Sie es und probieren Sie "Domain =" durcheinander, mein System. Deshalb weiß ich, dass es falsch ist, wenn ich es falsch mache. :-) Finden Sie also die richtige Syntax oder geben Sie sie nicht ein, es sei denn, Sie können sie wiederherstellen.

Erholung ist ein anderer Beitrag, obwohl ich müde bin.

Hier sind die Nachstellungen, die ich verwendet habe:

So überprüfen Sie, ob das Netzwerk aktiv ist: https://superuser.com/questions/1187633/how-to-debug-systemd-networkd?rq=1#comment1807294_1187633

So aktivieren Sie das Kontrollkästchen, wenn es deaktiviert ist: https://askubuntu.com/posts/681768/revisions

Starten Sie systemd-resolver ohne Neustart neu:

sudo systemctl restart systemd-resolved 

Zu Ihrer Information: Es gibt eine Möglichkeit, systemd mitzuteilen, dass Network-Manager eine Schnittstelle handhabt, "unmanaged" bleibt und mit Flat-File-Konfigurationen wie /etc/resolv.conf läuft. Aber ich würde es so machen, als wäre ich in deinen Schuhen. Ich versuche nur, verschiedene Schnittstellen für einen anderen Zweck zu konfigurieren, aber ich brauchte all diese Informationen. oben, um mir zu helfen, also dachte ich, ich würde es teilen. Da Sie geteilt haben, wie man es vorübergehend ändert, ist das auch nützlich. :-)

HTH

0
ctx

Das hört sich plausibel an, scheint aber keine Wirkung zu haben:

Gemäß dem verlinkten manpage man 8 systemd-resolved.service müssen Sie die Pro-Link-Konfigurationsdatei verwenden in /etc/systemd/network:

Die kontaktierten DNS-Server werden aus den globalen Einstellungen in /etc/systemd/resolved.confden statischen Einstellungen pro Link in /etc/systemd/network/*.networkDateien, den per DHCP erhaltenen dynamischen Einstellungen pro Link und den von anderen Systemdiensten verfügbaren DNS-Server-Informationen ermittelt.

Um Ihre Konfiguration dauerhaft zu machen, müssen Sie die Datei erstellen /etc/systemd/network/lxdbr0.conf:

[Match] Name=lxdbr0  [Resolve] DNS=10.78.38.1 Domains=lxd 
Das hört sich plausibel an, aber diese Einstellung scheint auf meinem System mit LXD keinen Einfluss zu haben. Nachdem ich die erste Frage gestellt hatte, hatte ich einen Systemd-Dienst erstellt, der den oben genannten Befehl ausführt, um DNS für LXD zu konfigurieren, das beim Booten ausgeführt wird. Das funktioniert auch nicht zuverlässig, da die lxdbr0-Schnittstelle zu diesem Zeitpunkt manchmal noch nicht existiert. Ich muss den benutzerdefinierten Systemd-Dienst daher manuell starten. Ich denke, das könnte auch der Grund dafür sein, dass Ihre Lösung nicht mit LXD arbeitet, obwohl es der richtige Weg zu sein scheint ... quat vor 5 Jahren 0
Du hast recht. Aber irgendwie gelang es mir, die gewünschte Ausgabe von `systemd-resol --status` zu erhalten, ohne diesen Befehl einzugeben. Das andere Problem ist, dass die Namensauflösung nicht in Containern funktioniert. Ich werde meine Antwort korrigieren, wenn ich eine bessere Lösung finde. ctx vor 5 Jahren 0