
好的,所以我想知道如何在 LXC 容器上進行連網。不僅僅是您從其他網站獲得的那種模糊信息,而是使它們工作的真正的初學者指南。 ……就像例如網頁伺服器。
我正在運行 Ubuntu 12.04 LTS,並且安裝了 LXC,我可以建立、啟動和停止容器。我的伺服器顯然有一個面向公眾的 IP,我想知道如何設定一個容器,以便它也可以有一個公共 IP。由於我目前的容器似乎已經建立了一個橋接器,因此我似乎需要為容器提供一個可供它們工作的公共 DHCP 範圍,或者手動為我的容器分配一個靜態 IP 位址。
如果我想給容器靜態分配一個IP,我該怎麼做?我需要對主機上的網橋配置進行任何更改嗎?使用 MACVLAN 選項實際上更好嗎?
任何幫助,將不勝感激。
答案1
我的方法假設您的伺服器有一個 NIC,並且您需要在主機和 LXC 來賓之間共用該 NIC。這涉及到使用橋。該橋擁有並管理eth0
。主機現在在br0
而不是上配置自己的網路eth0
。 LXC 來賓配置為連接到網橋。
在主機上,
sudo apt-get install bridge-utils
.在主機上,替換
eth0
為網橋:這很危險。如果出錯,您可能會被鎖定在伺服器之外。請務必啟用本機登入並且本機控制台存取有效,以便在出現任何問題時可以還原此變更。
在
/etc/network/interfaces
:- 用。
auto eth0
auto br0
代替:
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
即可。br0
bridge_ports eth0
重新啟動主機。如果您在本機執行此操作,那麼
sudo ifdown eth0
在開始之前和sudo ifup br0
之後運行也可以。請注意,橋接器可能需要一點時間才能啟動,因此請在重新啟動後等待五分鐘,然後再認為一切都會丟失。
- 用。
要將給定的命名 LXC 容器移至公用 IP:
- 停止容器。
- 在主機上,編輯並更改為.
/var/lib/lxc/container_name/config
lxc.network.link
br0
- 在主機上,像平常一樣編輯和設定您的公用 IP(DHCP 或根據需要進行靜態設定)。請注意,該介面仍然是從容器的角度呼叫的。
/var/lib/lxc/container_name/rootfs/etc/network/interfaces
eth0
- 重新啟動容器。
若要變更新 LXC 容器的預設值,請
/etc/lxc/default.conf
在主機上進行編輯並變更lxc.network.link
為br0
.如果您根本不需要 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
另外,如果需要,請新增到上游路由器的路由。
可能這不是最好的解決方案,但不需要付出很大的努力!乾杯。