LXC 容器的公共 IP 地址

LXC 容器的公共 IP 地址

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

我正在运行 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 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.
      

      您只是更改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

答案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

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

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

相关内容