如何使區域網路可以訪問 lxd 容器
如果我使用 Virtualbox 來啟動 VM,我可以選擇“橋接”作為網路適配器類型,這會導致來賓/虛擬 NIC 連接到我的物理 LAN,從而從我的路由器獲取 LAN IP(通過 DHCP)。
我想實現同樣的功能,但我不想使用 Virtualbox,而是想使用 lxc/lxd 容器。
我怎樣才能做到這一點?
編輯 1
我正在執行 Ubuntu,並嘗試遵循本指南:
……但這無濟於事。原來的主機介面之後應該有一個IP嗎?因為當我嘗試手動橋接時它不會。
編輯 2
如果有幫助,我的 lxd/lxc 主機是執行 Ubuntu 的 Virtualbox 虛擬機,設置了與我的物理乙太網 NIC 的橋接網路。
編輯 3
如果我使用 tcpdump 監控橋接介面、物理/主機介面和容器/虛擬介面上的 icmp 流量,只有容器/虛擬介面沒有任何流量。其他兩個可以。
編輯 4
根據本指南:
http://www.microhowto.info/troubleshooting/troubleshooting_ethernet_bridging_on_linux.html
我的網橋設置沒有問題。
然而,正如“編輯 3”中所述,容器介面沒有獲得任何流量。需要找出原因,但我不知道如何…
我覺得它與路線有關。
容器沒有路由,而主機有。
編輯 5
使用 tcpdump 監控 arp 流量,表明 arp 流量實際上正在到達容器/虛擬介面。
所以只是icmp流量不是。
編輯 6
如果我在容器中設置了一個靜態 IP(通過 /etc/network/intefaces*),那麼我就可以從主機(這是一台 Virtualbox 機器)對容器進行 ping 操作。
如果我隨後更改 Virtualbox 中的網路配置以允許混雜流量,那麼我可以從我的物理機(Virtualbox 機器的主機)ping 容器。然而,從這裡,我仍然無法從容器內 ping 到我的物理 LAN 之外。
最後一步,如果我在容器中手動添加“預設”路由,如下所示:
route add default gw 192.168.0.1 eth0
這允許我從容器內部 ping 物理 LAN 外部。
因此,除非其他人可以提供解釋(我會在發布答案之前等待),否則我猜測缺少容器 DHCP 支持(通過橋接)與 lxc/lxd 使用 netmasq 處理 DHCP 的事實有關(和 DNS)。
- 如果您的 LXD 主機實際上是虛擬機,請確保將虛擬機的網路適配器配置為混雜模式,以便 LXD 容器流量從物理網路傳遞到虛擬網路。
- 在 lxd 容器中設置靜態 IP 地址,因為 DHCP(來自您的物理網關)似乎不起作用。
在我的第 6 次編輯中,我說我需要在容器中手動添加預設路由,但事實並非如此。我只需要這樣做,因為我忘記在
/etc/network/interfaces
文件中指定網關 LAN IP 地址。所以這不是 LXD 問題,只是不要忘記指定它。