具有單獨 IP 位址(網路命名空間)的 systemd-nspawn 容器無法正常運作

具有單獨 IP 位址(網路命名空間)的 systemd-nspawn 容器無法正常運作

查看 的文檔systemd-nspawn,它一定是為了以一種非常用戶友好的方式在不同的網路命名空間中啟動容器。您使用該-n選項,只需systemd-networkd.service在兩端啟用即可。容器在「私有」範圍之一中取得自己的 IP 位址。 (DNS 可能需要一些額外的步驟)。

結果是我得到了範圍內的IP位址169.254.*.*。預設路由指向該host0接口,不經過任何網關/路由器。例如,嘗試存取網際網路伺服器8.8.8.8失敗,並顯示「沒有到主機的路由」。 (如果這不起作用,那麼解決 DNS 就沒有意義)。

如果我tcpdump -i ve-fedora-25在主機上運行,我可以看到 DHCP 請求,但它們沒有回應。 systemd-networkd 肯定在主機上運作。主機端日誌在 上顯示“獲得運營商” ve-fedora-25,networkctl 將其顯示為“可路由”和“已配置”,全部顯示為綠色。

我的系統是 Fedora 25 dnf。就像libvirt虛擬機器可以輕鬆開箱即用一樣。出了什麼問題?

答案1

問題出在 Fedora 上防火牆。 nspawn 似乎從未與firewalld 整合。 (nspawn 也沒有與 Fedora 的 SELinux 策略正確整合)。

正如問題中提到的,libvirt 工作正常:)。我們可以使用人們發現的用於運行容器的相同技巧Fedora 上的 LXC

更新:升級到 Fedora 30 後,解決方法停止運作。


使用選項執行 systemd-nspawn --network-bridge virbr0systemd-networkd這不是依靠,而是槓桿libvirtd.service。後一個服務在 Fedora 上已經預設啟動。在訪客中,照常設定您首選的 DHCP 用戶端。

使用 systemd-networkd 作為 DHCP 用戶端時的 DNS 解析

systemd-networkd以 DHCP 用戶端使用可能偶然/etc/resolv.conf如果您可能有先前容器啟動留下的痕跡,則可以自行工作。但一般來說你不能依賴這份工作。它確實被設計為與 一起運行systemd-resolved.service

反過來,systemd-resolved 旨在與nss-resolve.然而這並不是AIUI的本質。

相關內容