Networking

從兩個物理主機連接虛擬子網

  • April 17, 2016

我在兩台主機 A 和 B 上有基於 debian 8 的 proxmox 4。兩者都有兩個 NIC。每個主機的一個 NIC 通過交叉電纜連接。

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

從 Host AI 可以 ping 到

  • 它的容器在 10.0.0.10
  • 主機的 B eth1 在 10.0.1.2
  • 主機 B vmbr1 在 10.0.1.1
  • 但不適用於 10.0.1.10 上的主機 B 容器

從 Host BI 可以 ping 到

  • 它的容器在 10.0.1.10
  • 主機在 10.0.0.2 上的 A eth1
  • 主機的 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 沒有顯示任何內容。

如何將數據包路由到其他主機的容器中?

嘗試將 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

另一種方法是在 vmbr1 定義中包含 eth1。從長遠來看,這可能是更好的方法。

引用自:https://serverfault.com/questions/770946