×

MTU 黑洞修复(2026-07-10)

Falcon 2026-07-13 views:
自动摘要

正在生成中……

问题

本 VPS 到部分目标(如 mori.teracloud.jp)的路径 MTU 低于 1500 字节。 中间路由器不回复 ICMP fragmentation-needed 消息,导致 PMTUD(路径 MTU 发现)失效。 OpenSSL 3.0.20 生成的 TLS ClientHello 报文超出路径 MTU,被分片后静默丢弃。

症状:

  • ping 正常(小包能通)
  • ping -M do -s 1472(1500 字节 ICMP)100% 丢包
  • HTTP(80 端口)正常
  • HTTPS(443 端口)TLS 握手超时:SSL connection timeout
  • pip/pypi 连接失败:ReadTimeoutError

根因:PMTUD 失效(MTU 黑洞)

瓶颈链路已定位:

| 跳数 | IP | 归属 | 1500B ICMP | |-----|----|------|------------| | 1 | 66.103.202.1 | CloudCone(网关) | 通(0% 丢包) | | 2 | (无回复) | — | — | | 3 | 209.249.183.186 | Zayo Bandwidth(上游) | 100% 丢包 | | 4+ | 64.125.x.x | Equinix | 100% 丢包(继承) |

瓶颈位于 第 3 跳——CloudCone 到上游 Zayo Bandwidth(AboveNet)的链路。 该链路路径 MTU 约 1470 字节(1448B 能通,1478B 不通),且此节点不回 ICMP fragmentation-needed 消息,形成 PMTUD 黑洞。

此故障与 2026-07-10 的 CloudCone 基础设施事件 时间吻合。

正常 PMTUD 流程:

VPS (MTU=1500) → SYN (MSS=1460, DF=1) → 路由器 (MTU=1400)
                                          → ICMP: 需要分片, MTU=1400
VPS ← 获悉路径 MTU=1400 ←
VPS → SYN (MSS=1340) → 握手成功

MTU 黑洞(本 VPS):

VPS (MTU=1500) → SYN (MSS=1460, DF=1) → 路由器 (MTU<1500)
                                          → ICMP 被防火墙拦截
VPS(无应答,反复以 MSS=1460 重传)→ 超时

CloudCone 基础设施中的中间设备丢弃了 ICMP fragmentation-needed 消息, 发送方无从获知真实路径 MTU。所有 DF=1 且超过瓶颈链路 MTU 的数据包均被静默丢弃。

ping -M do -s 1472 丢包原因:-M do 设置 DF 标志,-s 1472 载荷 + 28 字节头 = 正好 1500 字节,超出瓶颈 MTU,数据包被丢弃且无 ICMP 错误返回。

修复方案

/etc/network/interfaces 中对 IPv4 和 IPv6 默认路由均钳制 TCP MSS 为 1300:

# IPv4
gateway 103.7.136.1 advmss 1300

# IPv6
gateway 2607:f130:0000:0163::1 advmss 1300

确保所有出站 TCP SYN 包(IPv4/IPv6)声明的 MSS 为 1300 字节,使 TLS ClientHello 等报文始终处于实际路径 MTU 范围内,绕过 PMTUD 协议缺陷。

验证

# 查看当前路由
ip route show default

# 测试连通性
curl -svo /dev/null https://pypi.org
pip install --dry-run some-package
本文收录于