自动摘要
正在生成中……
问题
本 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