Ip

如何使區域網路可以訪問 lxd 容器

  • February 28, 2018

如果我使用 Virtualbox 來啟動 VM,我可以選擇“橋接”作為網路適配器類型,這會導致來賓/虛擬 NIC 連接到我的物理 LAN,從而從我的路由器獲取 LAN IP(通過 DHCP)。

我想實現同樣的功能,但我不想使用 Virtualbox,而是想使用 lxc/lxd 容器。

我怎樣才能做到這一點?

編輯 1

我正在執行 Ubuntu,並嘗試遵循本指南:

https://insights.ubuntu.com/2015/11/10/converting-eth0-to-br0-and-getting-all-your-lxc-or-lxd-onto-your-lan/

……但這無濟於事。原來的主機介面之後應該有一個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)。

  1. 如果您的 LXD 主機實際上是虛擬機,請確保將虛擬機的網路適配器配置為混雜模式,以便 LXD 容器流量從物理網路傳遞到虛擬網路。
  2. 在 lxd 容器中設置靜態 IP 地址,因為 DHCP(來自您的物理網關)似乎不起作用。

在我的第 6 次編輯中,我說我需要在容器中手動添加預設路由,但事實並非如此。我只需要這樣做,因為我忘記在/etc/network/interfaces文件中指定網關 LAN IP 地址。所以這不是 LXD 問題,只是不要忘記指定它。

引用自:https://serverfault.com/questions/759381