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 von systemd-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
:
Die Standardkonfiguration wird während der Kompilierung definiert, sodass eine Konfigurationsdatei nur benötigt wird, wenn von diesen Standardeinstellungen abgewichen werden muss. Standardmäßig enthält die Konfigurationsdatei in / etc / systemd / auskommentierte Einträge, die die Standardeinstellungen als Leitfaden für den Administrator enthalten. Diese Datei kann bearbeitet werden, um lokale Überschreibungen zu erstellen.
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:
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 /etc/systemd/resolved.conf.d/lxd.conf
Datei zu erstellen , es sind jedoch keine Parameter verfügbar, die es mir ermöglichen würden, eine solche Konfiguration spezifisch für eine bestimmte Netzwerkkarte vorzunehmen.
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):
[Resolve]
DNS=10.78.38.1
#OBFallbackDNS=
Domains=LXD
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
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.org
Im Blog erwähntes Beispiel:
Shell-Skript, das nic-spezifische DNS über systemd-resolve (lxdhostdns_start.sh) aktiviert
$ cat /usr/local/bin/lxdhostdns_start.sh
#!/bin/sh
LXDINTERFACE=lxdbr0
LXDDOMAIN=lxd
LXDDNSIP=`ip addr show lxdbr0 | grep -Po 'inet \K[\d.]+'`
/usr/bin/systemd-resolve --interface ${LXDINTERFACE} \
--set-dns ${LXDDNSIP} \
--set-domain ${LXDDOMAIN}
Shell-Skript, das nic-spezifische DNS über systemd-resolve deaktiviert (lxdhostdns_stop.sh)
$ cat /usr/local/bin/lxdhostdns_stop.sh
#!/bin/sh
LXDINTERFACE=lxdbr0
/usr/bin/systemd-resolve --interface ${LXDINTERFACE} --revert
Erstellen eines systemd-Dienstes zum Verwalten der beiden Skripte und zum Initialisieren dieser beim Systemstart:
$ sudo cat /lib/systemd/system/lxd-host-dns.service
[Unit]
Description=LXD host DNS service
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/local/bin/lxdhostdns_start.sh
RemainAfterExit=true
ExecStop=/usr/local/bin/lxdhostdns_stop.sh
StandardOutput=journal
[Install]
WantedBy=multi-user.target
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 sind systemd-resolve --status
. Die lxbr0
Schnittstelle sollte sich jetzt im DNS-Bereich ( Current Scopes: DNS
) befinden. In Anbetracht Ihres Netzwerks sollte es so aussehen:
Link 3 (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
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ügen lxbr0
.
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.