LXC 容器的公用 IP 位址

LXC 容器的公用 IP 位址

好的,所以我想知道如何在 LXC 容器上進行連網。不僅僅是您從其他網站獲得的那種模糊信息,而是使它們工作的真正的初學者指南。 ……就像例如網頁伺服器。

我正在運行 Ubuntu 12.04 LTS,並且安裝了 LXC,我可以建立、啟動和停止容器。我的伺服器顯然有一個面向公眾的 IP,我想知道如何設定一個容器,以便它也可以有一個公共 IP。由於我目前的容器似乎已經建立了一個橋接器,因此我似乎需要為容器提供一個可供它們工作的公共 DHCP 範圍,或者手動為我的容器分配一個靜態 IP 位址。

如果我想給容器靜態分配一個IP,我該怎麼做?我需要對主機上的網橋配置進行任何更改嗎?使用 MACVLAN 選項實際上更好嗎?

任何幫助,將不勝感激。

答案1

我的方法假設您的伺服器有一個 NIC,並且您需要在主機和 LXC 來賓之間共用該 NIC。這涉及到使用橋。該橋擁有並管理eth0。主機現在在br0而不是上配置自己的網路eth0。 LXC 來賓配置為連接到網橋。

  1. 在主機上,sudo apt-get install bridge-utils.

  2. 在主機上,替換eth0為網橋:

    這很危險。如果出錯,您可能會被鎖定在伺服器之外。請務必啟用本機登入並且本機控制台存取有效,以便在出現任何問題時可以還原此變更。

    /etc/network/interfaces

    1. 用。auto eth0auto br0
    2. 代替:

      iface eth0 inet dhcp
      

      和:

      iface br0 inet dhcp
          bridge_ports eth0
      

      如果您有靜態網路配置,那麼您需要替換:

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      和:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      您只需更改並添加該行eth0即可。br0bridge_ports eth0

    3. 重新啟動主機。如果您在本機執行此操作,那麼sudo ifdown eth0在開始之前和sudo ifup br0之後運行也可以。請注意,橋接器可能需要一點時間才能啟動,因此請在重新啟動後等待五分鐘,然後再認為一切都會丟失。

  3. 要將給定的命名 LXC 容器移至公用 IP:

    1. 停止容器。
    2. 在主機上,編輯並更改為./var/lib/lxc/container_name/configlxc.network.linkbr0
    3. 在主機上,像平常一樣編輯和設定您的公用 IP(DHCP 或根據需要進行靜態設定)。請注意,該介面仍然是從容器的角度呼叫的。/var/lib/lxc/container_name/rootfs/etc/network/interfaceseth0
    4. 重新啟動容器。
  4. 若要變更新 LXC 容器的預設值,請/etc/lxc/default.conf在主機上進行編輯並變更lxc.network.linkbr0.

  5. 如果您根本不需要 LXC 提供的 NAT 橋接器(即您的所有容器都將使用新橋接器),則在主機上編輯/etc/default/lxc並變更USE_LXC_BRIDGE"false",然後在主機上執行sudo service lxc restart

答案2

羅比,非常感謝您發布這個答案,我一直在努力讓這一切順利進行,這是唯一有效的方法!

我認為我應該提及一些我發現的事情,以幫助澄清其他管理員的說明。

我的主機有多個靜態 IP 別名分配給來賓上的 eth0,例如:

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

現在我們不想以相同的方式設定 br0,我們只想要一個沒有別名的 IP,就像上面提到的 Robie 一樣。

假設您希望將 5.5.5.5 分配給容器 debian8。

編輯/var/lib/lxc/debian8/etc/network/interfaces並新增:

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

然後發出這個命令:route add default gw <gateway-ip, in my case 5.5.5.1>

之後,重新啟動容器,一切終於可以正常運作了! :)

答案3

我遇到了同樣的問題,我有這個解決方案(快速而骯髒)。

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

在伺服器上:route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

另外,如果需要,請新增到上游路由器的路由。

可能這不是最好的解決方案,但不需要付出很大的努力!乾杯。

相關內容