无法从一个特定系统传输数据(MTU 问题?)

无法从一个特定系统传输数据(MTU 问题?)

概括

默认 MTU 值会阻止一个系统的数据传输。手动降低该值可再次启用数据传输,但在相邻的系统上不需要进行此手动调整。

背景

我有一台备份服务器。我在远程位置有两个 Raspberry Pi 系统:一个在英国,一个在阿尔巴尼亚。阿尔巴尼亚 Pi 旁边是 QNAP(Linux 衍生的文件服务器)。我有一个从阿尔巴尼亚到备份服务器网络的 IPSec VPN,还有另一个从英国到备份服务器网络的 IPSec VPN。一切都使用 IPv4。此图可能有帮助:

                                           |--Albania Pi
                    |<--IPSec-->|--Router--|--Albania QNAP
Central  |          |                      |--Other systems
Backups--|--Router--|
Server   |          |                      |
                    |<--IPSec-->|--Router--|--UK Pi
                                           |--Other systems

Pi 系统和备份服务器都具有 nftables,没有任何规则,并且具有默认策略 ACCEPT。

正如预期的那样,两个 RPi 系统、QNAP 和备份服务器都具有默认的有线以太网 MTU 1500。

路由器的阿尔巴尼亚 WAN 端 MTU 为 1442,英国为 1500。根据路由器的路径 MTU 发现选项,这些值是正确的。对于管理包含备份服务器的网络的防火墙,它是 1500,这也是正确的。

问题

  • 如果我将英国 Pi 上的一块数据传输到备份服务器,一切正常
  • 如果我将数据块从阿尔巴尼亚的 QNAP 传输到备份服务器,一切正常
  • 如果我尝试将数据块从阿尔巴尼亚的 Pi 传输到备份服务器,则会失败
  • 如果我将 Pi 的 MTU 降低到 1374,传输就会成功

更多信息

以下是成功/失败的例子

# On the Albanian Pi
dd bs=1M count=100 if=/dev/urandom >100M.dat

# On the Backups Server
ssh albanian_pi cat 100M.dat | pv >100M.dat

# MTU adjustments on Albanian Pi
ifconfig eth0 mtu 1500    # Default before I started fiddling
ifconfig eth0 mtu 1374    # Highest value that permits data flow

传输曾经可以正常工作,但那是在从 Stretch 升级到 Buster 之前。我没有发现我拥有的大多数其他 Pi 系统存在问题,尤其是我在开头提到的现在也运行 Buster 的 UK Pi。

阿尔巴尼亚办事处没有人抱怨网络问题。

我没有故意为 Albanian Pi 和备份服务器之间的数据包设置“不分段”位。我没有故意设置任何阻止 PMTU 发现的设置。

总结一下:

  • 阿尔巴尼亚 QNAP -> 备份服务器:一切正常
  • 阿尔巴尼亚 Pi -> 备份服务器:未减少 MTU 即发生故障
  • UK Pi -> 备份服务器:一切正常

我有一个解决方法,但我不必减少单个系统上的 MTU。

问题

到底是什么问题?我该如何进一步诊断和解决问题的原因?

非常感谢您的建议。谢谢

答案1

看起来像路径 MTU 发现在“Albania Pi”和“Central Backups Server”系统之间出现故障。这通常是由于在路由器、防火墙或iptables相关系统的设置中错误地阻止了 ICMP 数据包。

就您的情况而言,由于“Albania QNAP”系统似乎运行正常,因此主要怀疑对象是“Albania Pi”系统。请检查该系统的配置,特别是任何iptables设置以及与 ICMP 和 PMTUD 相关的网络设置。

相关内容