LXC容器的公共IP地址

好的,所以我想知道如何在LXC容器上进行联网。 不仅仅是你从其他网站获得的那种模糊的信息,而是一个真正的初学者指南,使它们工作..由于大多数例子基本上是为人们设置测试,我想在一个上运行服务…就像一个例如,web服务器。

我正在运行Ubuntu 12.04 LTS并安装了LXC,我可以制作,启动和停止容器。 我的服务器显然有一个面向公众的IP,我想知道如何设置一个容器,所以它也可以有一个公共IP。 由于我的当前容器似乎已经存在一个桥接器,我似乎需要为容器提供一个公共的DHCP范围,以便它们能够解决或手动为我的容器分配静态IP地址。

如果我想静态地为容器分配IP,我该怎么做? 我是否需要在主机上对我的网桥配置进行任何更改? 使用MACVLAN选项实际上更好吗?

任何帮助,将不胜感激。

我的方法假设您的服务器有一个NIC,您需要在主机和LXC guest虚拟机之间共享该NIC。 这涉及使用桥梁。 该桥拥有并管理eth0 。 主机现在在br0而不是eth0上配置自己的网络。 LXC guest虚拟机已配置为连接到网桥。

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

  2. 在主机上,用桥替换eth0

    这很危险。 弄错了,你可能被锁在服务器外面。 确保已启用本地登录并且本地控制台访问有效,因此如果您遇到任何问题,可以还原此更改。

    /etc/network/interfaces

    1. auto eth0替换为auto 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. 

      您只需更改br0 eth0并添加bridge_ports eth0行。

    3. 重新启动主机。 如果你在本地做这个,那么在你开始之前运行sudo ifdown eth0 ,之后sudo ifup br0也会这样做。 请注意,桥接器可能需要一些时间才能启动,因此请在重新启动后五分钟给它,然后再假设全部丢失。

  3. 要将给定的命名LXC容器移动到公共IP:

    1. 停止容器。
    2. 在主机上,编辑/var/lib/lxc/ container_name /config并将lxc.network.link更改为br0
    3. 在主机上,编辑/var/lib/lxc/ container_name /rootfs/etc/network/interfaces/var/lib/lxc/ container_name /rootfs/etc/network/interfaces配置公共IP(根据需要使用DHCP或静态配置)。 请注意,从容器的角度来看,接口仍称为eth0
    4. 重启容器。
  4. 要更改新LXC容器的默认值, /etc/lxc/default.conf在主机上编辑/etc/lxc/default.conf并将lxc.network.link更改为br0

  5. 如果根本不需要LXC提供的NAT桥(即所有容器都将使用新桥),则在主机上编辑/etc/default/lxc并将USE_LXC_BRIDGE更改为"false" ,然后再打开主机运行sudo service lxc restart

罗比,非常感谢你发布这个答案,我一直在努力让自己的头发变得干净,这是唯一有效的方法!

我想我应该提一些我想出的事情,以帮助澄清其他管理员的说明。

我的主机在guest虚拟机上分配了多个静态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

在那之后,重新启动容器,一切都应该最终工作! 🙂

我有同样的问题,我有这个解决方案(快速和肮脏)。

 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

此外,如果需要,添加到上游路由器的路由。

可能不是最好的解决方案,但不需要太多努力! 干杯。