systemd-nspawn-Container mit separater IP-Adresse (Netzwerk-Namespace) funktioniert nicht

systemd-nspawn-Container mit separater IP-Adresse (Netzwerk-Namespace) funktioniert nicht

Wenn man sich die Dokumentation für ansieht systemd-nspawn, muss es eine sehr benutzerfreundliche Möglichkeit sein, Container in einem anderen Netzwerk-Namespace zu starten. Sie verwenden die -nOption und aktivieren sie einfach systemd-networkd.servicean beiden Enden. Der Container erhält seine eigene IP-Adresse in einem der „privaten“ Bereiche. (DNS erfordert möglicherweise einigezusätzlicher Schritt).

Als Ergebnis erhalte ich eine IP-Adresse im Bereich 169.254.*.*. Die Standardroute zeigt auf die host0Schnittstelle, ohne über ein Gateway/einen Router zu gehen. Versuche, Internetserver zu erreichen, schlagen beispielsweise 8.8.8.8mit „Keine Route zum Host“ fehl. (Es macht keinen Sinn, DNS zu testen, wenn das nicht funktioniert.)

Wenn ich es tcpdump -i ve-fedora-25auf dem Host ausführe, kann ich die DHCP-Anfragen sehen, aber sie werden nicht beantwortet. systemd-networkd läuft definitiv auf dem Host. Die Host-seitigen Protokolle zeigen „Gained Carrier“ an ve-fedora-25, und networkctl zeigt dies als „routable“ und „configured“ an, alles in Grün.

Mein System ist Fedora 25. Ich möchte einen OS-Container, mit dem ich mich über TCP/IP verbinden und gleichzeitig eine Verbindung zur Welt herstellen kann (z. B. um den dnfPaketmanager auszuführen). So wie libvirtVMs sofort einsatzbereit sind, funktioniert das auch ganz einfach. Was ist schiefgelaufen?

Antwort1

Das Problem ist FedorasFirewall. Es scheint, dass nspawn nie in Firewalld integriert war. (nspawn ist auch nicht richtig in die SELinux-Richtlinie von Fedora integriert).

Wie in der Frage erwähnt, funktioniert libvirt einwandfrei :). Wir können den gleichen Trick verwenden, den die Leute für den Betrieb von Containern entdeckt haben mitLXC auf Fedora.

Update: Die Problemumgehung funktionierte nicht mehr, nachdem ich auf Fedora 30 aktualisiert habe.


Führen Sie systemd-nspawn mit der Option aus --network-bridge virbr0. Anstatt sich auf zu verlassen systemd-networkd, wird hiermit genutzt libvirtd.service. Der letztgenannte Dienst ist unter Fedora bereits standardmäßig gestartet. Richten Sie im Gast Ihren bevorzugten DHCP-Client wie üblich ein.

DNS-Auflösung bei Verwendung von systemd-networkd als DHCP-Client

Die Verwendung systemd-networkdals DHCP-Client kannversehentlichfunktioniert allein, wenn Sie möglicherweise noch Reste /etc/resolv.confvon einem vorherigen Container-Boot haben. Sie können sich jedoch nicht darauf verlassen, dass dies generell funktioniert. Es ist eigentlich dafür ausgelegt, zusammen mit ausgeführt zu werden systemd-resolved.service.

systemd-resolved wiederum soll mit verwendet werden nss-resolve. Dies ist jedoch, soweit ich weiß, nicht unbedingt erforderlich.

verwandte Informationen