![VXLAN 隧道中的 PMTUD/ICMP 黑洞问题](https://linux22.com/image/776656/VXLAN%20%E9%9A%A7%E9%81%93%E4%B8%AD%E7%9A%84%20PMTUD%2FICMP%20%E9%BB%91%E6%B4%9E%E9%97%AE%E9%A2%98.png)
我正在运行 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 连接到网桥。