LXC容器的公用IP地址


26

好的,所以我想知道如何在LXC容器上进行联网。不仅是从其他网站上获得的模糊信息,还是使它们正常工作的真正的初学者指南。.由于大多数示例基本上都是供人们测试的,我想在其中运行一项服务...例如网络服务器。

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

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

任何帮助,将不胜感激。


我对LXC不熟悉,但是通常您的isp只会给您一个公共IP地址。您是否有一个包含多个静态ip的软件包?
wlraider70

面向公众的IP并不是唯一的用例,我们希望将2个公共IP分配给我们的负载均衡器容器,但是我们想要专用于各种其他服务的专用LAN IP。这样,如果我们在不同的硬件上移动容器,就如同移动IP一样容易(DNS在我们使用的某些组件方面不起作用)
David Parks

Answers:


23

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

  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.
      

      你只是改变eth0br0并添加bridge_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


谢谢!周围有很多类似的问题。但是,这个答案最终帮助我使工作正常。
Mausy5043 2015年

1

罗比,非常感谢您发布此答案,我一直在努力尝试以解决问题,这是唯一有效的方法!

我认为我应该提及一些我想出的事情,以帮助阐明其他管理员的说明。

我的主机为访客上的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>

之后,重新启动容器,一切都将终于可以正常工作!:)


1

我有同样的问题,并且我有此解决方案(快速又脏)。

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.