LXC容器的外部IP配置

LXC容器的外部IP配置

我租了一台专用服务器,想使用LXC而不是KVM。我想为每个容器购买 IP。现在我有两个外部IP:

  • 193.XX30/32
  • 213.XX31/32

我更喜欢路由解决方案而不是 NAT。

我最后的尝试是这样的:

              -------------------
              |     INTERNET    |
              -------------------
                       |
                       V
----------------------------------------------
|  -------------------      -------  [HOST]  |
|  | br0: 193.X.X.30 | <--- | em1 |          |
|  -------------------      -------          |
|           |                                |
|           V                                |
|  -------------------                       |
|  |    vethXXXX     |                       |
|  -------------------                       |
|           |                                |
|           V                                |
|  --------------------------------------    |
|  |  --------------------  [CONTAINER] |    |
|  |  | eth0: 213.X.X.31 |              |    |
|  |  --------------------              |    |
|  |                                    |    |
|  --------------------------------------    |
----------------------------------------------

我的主机上的网络配置:

auto br0
iface br0 inet static
  bridge_ports    em1
  bridge_fd       0
  address         193.X.X.30
  netmask         255.255.255.0
  gateway         193.X.X.1
  dns-nameservers 8.8.8.8 8.8.4.4

我的容器配置:

lxc.network.type = veth
lxc.network.link = br0
lxc.network.ipv4 = 213.X.X.31/24
lxc.network.ipv4.gateway = 213.X.X.1

我的容器网络配置:

auto eth0
iface eth0 inet static
   address   213.X.X.31
   netmask   255.255.255.0
   gateway   213.X.X.1

   dns-nameservers 8.8.8.8
   dns-nameservers 8.8.4.4

我没有成功直接连接容器。容器成功托管 Web/邮件/DNS 等服务的正确配置/拓扑应该是什么。

答案1

我不知道这是正确的方法或最佳解决方案,但它无需 NAT 即可工作。网络拓扑相同。我们为每个容器配备一个物理 NIC (em1) 和多个 IP。也许以后我可以买一个子网。但现在我会购买 4 - 5 个 IP。

              -------------------
              |     INTERNET    |
              -------------------
                       |
                       V
----------------------------------------------
|  -------------------      -------  [HOST]  |
|  | br0: 193.X.X.30 | <--- | em1 |          |
|  -------------------      -------          |
|           |                                |
|           V                                |
|  -------------------                       |
|  | vethMyContainer |                       |
|  -------------------                       |
|           |                                |
|           V                                |
|  --------------------------------------    |
|  |  --------------------  [CONTAINER] |    |
|  |  | eth0: 213.X.X.31 |              |    |
|  |  --------------------              |    |
|  |                                    |    |
|  --------------------------------------    |
----------------------------------------------

这是我在主机上的网络配置(/etc/network/interfaces):

auto lo
iface lo inet loopback    

auto br0
iface br0 inet static
  bridge_ports    em1
  bridge_fd       0
  address         193.X.X.30
  netmask         255.255.255.0
  gateway         193.X.X.1
  dns-nameservers 8.8.8.8 8.8.4.4

容器的配置文件(/var/lib/lxc/my-container/config):

lxc.include                      = /usr/share/lxc/config/ubuntu.common.conf
lxc.rootfs                       = /var/lib/lxc/my-container/rootfs
lxc.utsname                      = my-container
lxc.arch                         = amd64
lxc.network.type                 = veth
lxc.network.veth.pair            = vethMyContainer
lxc.network.link                 = br0
lxc.network.ipv4                 = 213.X.X.31/32
lxc.network.ipv4.gateway         = 193.X.X.1
lxc.network.script.up            = /var/lib/lxc/my-container/script-up.sh
lxc.network.flags                = up
lxc.network.hwaddr               = 00:16:3e:aa:bb:cc
lxc.cgroup.memory.limit_in_bytes = 2048M

我们必须命名我们的 veth 设备。因为我们将在脚本文件中使用该名称。包无法自动从 br0 路由到 veth 设备。所以我添加了一条路由规则,但我的 ARP 表无法自动更新。所以我添加了静态ARP记录。

脚本文件(/var/lib/lxc/my-container/script-up.sh):

#!/bin/bash

route del 213.X.X.31 br0
route add 213.X.X.31 br0

我的容器上的网络配置:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

所以我可以直接 ping 到我的容器而不使用 NAT。如果我找到一种不使用 arp 和路由命令的方法,我会更新答案。

相关内容