VXLAN 隧道中的 PMTUD/ICMP 黑洞问题

VXLAN 隧道中的 PMTUD/ICMP 黑洞问题

我正在运行 Proxmox PVE 主机,并尝试使用 VXLAN 将其上运行的机器连接到我们实验室中的各种网络。但是,我遇到了一些奇怪的 MTU 相关问题,我不明白。

首先是我的设置。基本布局是 PVE 主机上的虚拟机通过桥接器连接到 VXLAN 隧道。在隧道的另一侧,我在实验室中有一台物理机器,它充当 VXLAN 端点 (EP)。它通过桥接器连接到 VTEP 的一个以太网端口,而后者又连接到承载我试图将 VM 放入的网络的交换机。

在 PVE 主机上(以一个 VM 和一个 VXLAN 为例):

 ___________     __________     __________     ___________
|  VM eth0  |   |  Bridge  |   |  VXLAN   |   | Host eno1 |
| 192.168.. |___|   ----   |___|  VNI 1   |___|   10...   |___ to LabNet
| MTU 1500  |   | MTU 1550 |   | MTU 1550 |   | MTU 1600  |
|___________|   |__________|   |__________|   |___________|

在实验室中(以一条隧道+一台实验室设备的端点为例):

 ___________                        __________     __________     __________     ___________
| LabDevice |                      | EP eth1  |   |  Bridge  |   |  VXLAN   |   | EP eth0   |
| 192.168.. |___ lab switch etc ___|  ----    |___|   ----   |___|  VNI 1   |___|   10...   |___ to PVE Host
| MTU 1500  |                      | MTU 1500 |   | MTU 1550 |   | MTU 1550 |   | MTU 1600  |
|___________|                      |__________|   |__________|   |__________|   |___________|

现在,我明白 PMTUD 在这里实际上不起作用,因为 - 作为 L2 - 大多数设备无法报告回来,这就是为什么我增加了那些必须处理 VXLAN 开销的设备的 MTU(它是 1600 而不是 1550 是无关的,我只是想准确描述原样状态)。

但是,我仍然遇到 MTU 不匹配/ICMP 黑洞问题:

问题 1) 链中的某些东西声称仅支持 1450 的 MTU。如果我尝试通过 SSH 从 VM 连接到 LabDevice,连接会挂起然后超时。如果我通过ping -M do -s 1450某个地方的某些东西测试 MTU,它会回答通常的 fragmentation required... 消息,则存储了最大 MTU 1450,并且后续的 SSH 连接尝试有效(直到存储的 MTU1450 条目超时)。PVE 主机确实有 MTU 设置为 1450 的设备,但它们都没有连接到 VM。

问题 2) PMTUD 甚至对与隧道无关的设备都不起作用。如果我降低虚拟机 eth0 的 MTU 并从 LabDevice ping -s... ,结果对虚拟机来说太大了,但对其他所有东西都正常,我得到的响应为零,尽管据我所知,虚拟机应该能够回答 ICMP fragmentation required... 消息。

半相关:我可以在 PVE 主机和端点设备上做些什么来允许连接到端点的设备发现减小的 MTU?因为有些实验室我可能无法发送巨型帧,而且我不希望在这些实验室的每台设备上设置较低的 MTU。

编辑:可能也相关:我目前没有运行多播,但已通过设置了远程 IP bridge fdb ...。此外,在 VM 主机上,VM 不是直接连接到网桥,而是通过一些 veth magic 连接到网桥。

相关内容