好的,我想知道如何在 LXC 容器上进行联网。不仅仅是从其他网站获得的模糊信息,而是让它们工作的真正的初学者指南。由于大多数示例基本上都是为人们测试而设置的,所以我想在其中运行一项服务...例如 Web 服务器。
我正在运行 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
罗比,非常感谢你发布这个答案,我一直绞尽脑汁试图解决这个问题,这是唯一有效的方法!
我认为我应该提及一些我发现的事情,以帮助其他管理员澄清说明。
我的主机为客户机上的 eth0 分配了多个静态 IP 别名,例如:
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
此外,如果需要,请添加至上游路由器的路由。
可能不是最好的解决方案,但不需要付出很大努力!干杯。