Ich habe meinen Ubuntu-Desktop auf Bionic Beaver aktualisiert und auf systemd-resolve umgestellt . 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- Brücke ist.
$ sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd
Mit dieser Option kann ich den LXD-Container anhand seines 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 vorhanden.
$ systemd-resolve --status
.
.
.
Link 10 (lxdbr0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
.
.
.
Um dies dauerhaft zu gewährleisten, habe ich die systemd-resolve- Manpage http://manpages.ubuntu.com/manpages/bionic/man8/systemd-resolved.service.8.html überprüft . Es wird vorgeschlagen, eine Datei /etc/systemd/resolved.conf.d/lxd.conf zu erstellen, es sind jedoch keine Parameter verfügbar, mit denen ich eine solche Konfiguration spezifisch für eine bestimmte Netzwerkkarte vornehmen könnte.
systemd-resolve --status
ohne diesen Befehl einzugeben. Das andere Problem ist, dass die Namensauflösung in Containern nicht funktioniert. Ich werde meine Antwort korrigieren, wenn ich eine bessere Lösung finde.Mir ist klar, dass diese Frage seit 2 Monaten hier ist, aber vielleicht brauchen Sie noch einige Antworten?
1) Systemd-networkd speichert Netzwerkkonfigurationen in (mindestens) 3 Verzeichnissen, möglicherweise mehr. Das, was Ihnen am relevantesten erscheint, ist:
(es überschreibt die anderen 2, nämlich / lib / s / n und / run / s / n.
Erstellen Sie eine Textdatei ähnlich der folgenden:
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. Was nicht einfach ist, ich habe meine durcheinander gebracht und es dauerte ungefähr eine Stunde, um es zu klären. Gut, dass mein "Server" im Nebenzimmer ist, nicht in einem entfernten Rechenzentrum!
Beispiele zum Einrichten einer Brücke finden Sie hier:
Die dort angegebenen Beispiele und mein Code-Snippet können Folgendes einrichten:
Sie sind sich nicht sicher, wie die Syntax für die DNS-Domain lautet. Möglicherweise umfasst die Manpage 30 Seiten. Wenn Sie es können, überspringen Sie es und versuchen Sie "Domain =", mein System zu zerstören, so weiß ich, dass es eine schlechte, persönliche Erfahrung ist, wenn ich es falsch mache. :-) Finden Sie also die richtige Syntax oder geben Sie sie nur ein, wenn Sie sie wiederherstellen können.
Erholung ist ein weiterer Beitrag, obwohl ich müde bin.
Hier sind die Referenzen, die ich verwendet habe:
So überprüfen Sie, ob das Netzwerk ausgeführt wird: https://superuser.com/questions/1187633/how-to-debug-systemd-networkd?rq=1#comment1807294_1187633
So aktivieren Sie, wenn es deaktiviert ist: https://askubuntu.com/posts/681768/revisions
Starten Sie systemd-resolver neu, ohne neu zu starten:
Zu Ihrer Information: Es gibt eine Möglichkeit, systemd anzuweisen, Network-Manager die Verwaltung einer Schnittstelle zu überlassen sowie diese "nicht verwaltet" zu lassen und mit Flatfile-Konfigurationen wie /etc/resolv.conf auszuführen. 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 selbst zu helfen, so dachte ich, ich würde teilen. Da du mitgeteilt hast, wie man es vorübergehend ändert, ist das auch nützlich. :-)
HTH
quelle
Diese Frage hat immer noch keine akzeptierte Antwort und da ich auch enorme Probleme beim Auflösen von Containernamen auf dem Host hatte, dachte ich, ich sollte meine Lösung anbieten. Ich mache das auch, da diese Seite das erste Google-Ergebnis ist, wenn ich beständige Änderungen an sytemd-resolved.service nachschlage. Zuletzt möchte ich erwähnen, dass dieses Problem spezifisch zu sein scheint
Ubuntu >= 18.04
und seine Version vonsystemd-resolved.service
.Die Hilfeseite systemd-resolved.service wurde bereits erwähnt. Im Falle von LXD wurden jedoch irreführende Schlussfolgerungen gezogen. Die LXD-Schnittstelle muss nicht in definiert werden
/etc/systemd/network/<iface>.{conf|network}
. Die Schnittstelle funktioniert bereits und muss daher nicht für den Netzwerkmanager von systemd definiert werden. Standardmäßig hat LXD bereits einen funktionierenden DNS-Server, der die erste Hostadresse seines Netzwerks überwacht. Alles, was wir tun müssen, ist,systemd-resolved.service
diesen Server zu erkennen.Die oben verlinkte Manpage erwähnt dies für
/etc/systemd/resolved.conf
:Ich möchte hervorheben, dass diese Datei bearbeitet werden kann, um lokale Überschreibungen zu erstellen . @quat tatsächlich verweisen Sie auch in Ihrer eigentlichen Frage darauf:
1. Hinzufügen des dnsmasq-Dienstes von lxd zu den globalen dns-Einstellungen von systemd-resolved.service:
Ich verstehe Ihren letzten Satz jedoch nicht. Sie müssen die Netzwerkkarte nicht angeben. Sie müssen lediglich die LXD-DNS-Serveradresse angeben. Wenn Sie Ihre Netzwerkinformationen verwenden,
/etc/systemd/resolved.conf
sieht eine funktionierende Konfiguration folgendermaßen aus (Kommentar zum Ändern der Standardeinstellungen):Nach dem Speichern der Datei starten Sie entweder Ihren Server neu oder
systemctl restart systemd-resolved.service
bei mir funktionierte dies bei einer neuen Ubuntu-18.04.02-Installation einwandfrei. Wenn es bei Ihnen nicht funktioniert, haben Sie vermutlich entweder eine nicht standardmäßige lxd-Installation durchgeführt, oder Sie haben Probleme / Konflikte aufgrund Ihres Betriebssystem-Upgrades.2. UPDATE (NIC-spezifisches Setup):
Laut Simos 'Blog besteht die einzige Möglichkeit, weiterhin
$ sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd
einen benutzerdefinierten systemd-Dienst zu erstellen, der die NIC-spezifische Konfiguration beim Systemstart initialisiert. Dieser Weg ist derzeit der "akzeptierte" Ansatz auf "semi-offiziellen" linuxcontainers.orgIm Blog erwähntes Beispiel:
Shell-Skript, das nic-spezifische DNS über systemd-resolve (lxdhostdns_start.sh) aktiviert
Shell-Skript, das nic-spezifische DNS über systemd-resolve deaktiviert (lxdhostdns_stop.sh)
Erstellen eines systemd-Dienstes zum Verwalten der beiden Skripte und zum Initialisieren dieser beim Systemstart:
Führen Sie
systemctl enable lxd-host-dns.service
zum Schluss den Host aus und starten Sie ihn neu, um zu überprüfen, ob die Änderungen dauerhaft sindsystemd-resolve --status
. Dielxbr0
Schnittstelle sollte sich jetzt im DNS-Bereich (Current Scopes: DNS
) befinden. In Anbetracht Ihres Netzwerks sollte es so aussehen:Mir ist klar, dass dies nicht die ideale Lösung ist, und technisch gibt es immer noch keine Antwort auf Ihre Frage, wie Sie diese Konfiguration in systemd-resolve beibehalten können. Das Problem bei der Beibehaltung liegt jedoch in der Tatsache, dass die lxbr0-Schnittstelle nicht von netplan, sondern von systemd unter Ubuntu18.04 verwaltet wird. Da netplan nichts über die Schnittstelle weiß, können Sie die oben genannten
*.network
Schnittstellenkonfigurationen nicht verwenden, um DNS- und Domäneneinstellungen hinzuzufügenlxbr0
.Diese Antwort ist jetzt eine lange, lange Textwand, aber ich hoffe, sie klärt das Problem ein wenig. Beide Lösungen lösen Containernamen auf einem Ubuntu-Host auf. Der zweite ist genauer, aber wenn die einzige Anforderung die Namensauflösung auf dem Host ist,
/etc/systemd/resolved.conf
ist es eine praktikable Alternative, den dnsmasq-Dienst von lxd über global verfügbar zu machen, zumal nur zwei Änderungen in einer Konfigurationsdatei erforderlich sind.quelle
systemd-resolve --status
mit Ihren Einstellungen ausgeführt werden, werden Sie feststellen, dass imLink 10 (lxdbr0)
Abschnitt nicht die DNS-Konfiguration, sondern die globale Konfiguration vorhanden ist. Ab jetzt glaube ich , dass @ctx Antwort der nächste Anruf ist superuser.com/a/1365864/433376 aber möglicherweise ein Fehler ist der Grund dafür , nicht zu arbeiten. Gerade habe ich das mit Ubuntu 19.04 getestet.