概括
默认 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 相关的网络设置。