从两个物理主机连接虚拟子网

从两个物理主机连接虚拟子网

我在两台主机 A 和 B 上安装了基于 debian 8 的 proxmox 4。两台主机都有两个网卡。每台主机的一个网卡通过交叉电缆连接。

Host A:
eth0: public IP
eth1: 10.0.0.2/24
vmbr1: 10.0.0.1/24

Host B:
eth0: public IP
eth1: 10.0.1.2/24
vmbr1: 10.0.1.1/24

在 vmbr1 上,每个主机上都附加了一个带有 10.0.x.10 的容器。我将这样表示:

Host A:
veth100i1@if12: 10.0.0.10/24 (IP only visible inside container on eth0)

Host B:
veth100if1@if30: 10.0.1.10/24 (IP only visible inside container on eth0)

路由表主机A:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         X.X.X.X         0.0.0.0         UG    0      0        0 eth0
X.X.X.0         X.X.X.X         255.255.255.224 UG    0      0        0 eth0
X.X.X.0         0.0.0.0         255.255.255.224 U     0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 vmbr1
10.0.1.0        10.0.0.2        255.255.255.0   UG    0      0        0 eth1
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1

路由表主机B:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         Y.Y.Y.Y         0.0.0.0         UG    0      0        0 eth0
Y.Y.Y.0         Y.Y.Y.Y         255.255.255.224 UG    0      0        0 eth0
Y.Y.Y.0         0.0.0.0         255.255.255.224 U     0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.0.0.0        10.0.1.2        255.255.255.0   UG    0      0        0 eth1
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 vmbr1

从主机 AI 可以 ping 到

  • 其容器位于 10.0.0.10
  • 主机 B 的 eth1 在 10.0.1.2 上
  • 主机 B 的 vmbr1 在 10.0.1.1 上
  • 但不能到达 10.0.1.10 上的主机 B 容器

从主机 BI 可以 ping 到

  • 其容器位于 10.0.1.10
  • 主机 A 的 eth1 在 10.0.0.2 上
  • 主机 A 上的 vmbr1 在 10.0.1.1
  • 但不在 10.0.0.10 上的主机 A 容器上

当我尝试从主机 BI 中的容器上的主机 A ping 10.0.1.10 时,可以在主机 B 的 eth1 上看到以下内容:

tcpdump -nni eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
12:42:48.567438 ARP, Request who-has 10.0.1.10 tell 10.0.0.2, length 46

在主机 B 的 vmbr1 上,tcpdump 没有显示任何内容。

如何将数据包路由到其他主机的容器中?

答案1

尝试将 eth1 接口设置为第三个子网中的地址,例如 10.0.3.0/24。您可能还需要添加转发,如下所示。

或者尝试代理可用服务器的 ARP 请求。您可以使用以下命令手动启用此功能。

systctl -w net.ipv4.conf.eth1.proxy_arp=1

一旦它工作了,你就可以通过添加一个/etc/sysctl.d包含如下行的文件来让它在重启后继续运行:

net.ipv4.conf.eth1.proxy_arp = 1

您可能还需要使用以下任一设置来启用转发:

net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.eth1.forwarding = 1

另一种方法是将 eth1 包含在 vmbr1 定义中。从长远来看,这可能是一种更好的方法。

相关内容