01 · PMTUD协议机制:精确语义
路径MTU发现(RFC 1981配套RFC 8200 §5)的运行机制:①源节点以出接口MTU(或此前学到的路径MTU)发送报文;②路径某路由器发现报文超过出接口MTU时,丢弃报文并回送ICMPv6 Packet Too Big(Type 2,Code 0),报文载荷中携带"本机出接口MTU"值;③源节点收到后将该路径MTU记录于目的地址缓存并缩小后续报文尺寸;④若MTU降至最小值1280字节仍不通,协议放弃(IPv6不允许低于1280的分片)。
1.1 三个常被忽略的机制细节
- 1280字节底线:所有链路必须支持1280字节;节点收到通告MTU<1280的Packet Too Big时,应将其视为无效并按1280处理——RFC 8021将此明确为拒绝原子分片生成的规范依据(第4页);
- PTB的载荷引用规则:RFC 4443要求ICMPv6错误消息尽可能多地引用引起错误的原始报文载荷(RFC 4884放宽了上限),使接收方能够将PTB与具体数据报关联——这一"引用"特征既是协议正确性的要求,也是伪造PTB时的鉴别素材;
- PTB本身不得被分片:ICMPv6错误消息应以尽量小的报文发送(RFC 4443 §2.4),实践中不超过1280字节——观察被分片的ICMPv6错误消息本身即是异常信号。
# 观测路径MTU的常用诊断手段(诊断用途示例) ping -6 -M do -s 1400 目标地址 # DF位等价物:IPv6下不分片位恒有效 tracepath6 目标地址 # 路径MTU逐跳测量 tcpdump -ni 接口 'icmp6 and ip6[40] == 2' # 捕获Packet Too Big(Type=2)
02 · 信任假设分析:无认证的报文如何驱动发送行为
PMTUD的安全困境是结构性的:一个无认证的、可被链路旁路者伪造的控制消息,直接决定发送方的报文尺寸与分片行为。信任链上有三个脆弱假设:
| 脆弱假设 | 现实 | 防御含义 |
|---|---|---|
| "PTB来自真实路径上的路由器" | 协议无源认证;旁路攻击者可伪造PTB(仅需猜测目标会话的五元组与序列特征,对UDP等无状态协议更易) | 主机侧校验PTB载荷引用是否与在途数据报匹配;边界侧监测PTB速率与来源分布 |
| "PTB中的MTU值可信" | 伪造者任意填写;极小值(<1280)按规范应被忽略——但依赖实现合规 | 核查协议栈对MTU<1280通告的处置(RFC 8021基线) |
| "过滤ICMPv6错误消息是安全的" | 过度过滤PTB=制造PMTUD黑洞:TCP连接在发送大包时静默挂起(经典"TCP黑洞"在IPv6下同样成立) | RFC 4890基线:PTB不得过滤;监测"PMTUD失败率"作为配置健康指标 |
TCP对ICMP错误的处理硬化是IPv4时代沉淀的通用经验(RFC 5927系统梳理过针对TCP的ICMP攻击面):现代TCP实现对PTB中引用的载荷做一致性校验、对频繁MTU变化做速率限制,但UDP/QUIC以外的无状态协议缺乏同等保护——协议的受保护程度与其状态性成正比,这是评估具体业务PMTUD风险分级的实用标尺。
03 · 攻击谱系:四类PTB操纵模式
| 模式 | 机理(概念层) | 典型后果 |
|---|---|---|
| A1 压制MTU(性能DoS) | 向通信双方持续伪造PTB,将路径MTU压至1280底线 | 连接仍可用但报文尺寸被强制减半以下,吞吐劣化——隐蔽、难以与真实路径问题区分 |
| A2 抑制PTB(黑洞) | 攻击者丢弃路径上的真实PTB(或网络误配置过滤了PTB) | TCP大包静默丢失、连接挂起;UDP大报文永久不通——"TCP黑洞"的IPv6形态 |
| A3 诱发原子分片(已历史性封堵) | 伪造极小MTU的PTB,诱使实现进入原子分片生成路径(RFC 6946旧逻辑) | 开启分片注入攻击链(第4页);合规实现(RFC 8021)在源头即免疫 |
| A4 PTB×分片资源耦合 | 伪造PTB迫使源端以小MTU分片发送,分片数量成倍增加,接收端重组资源消耗同步放大 | 资源消耗型DoS的"合法流量外衣"——每个分片本身都符合规范 |
与原子分片的关系:A3与第4页的原子分片注入链共享第一步(伪造PTB)。RFC 8021封堵了"生成侧"路径后,攻击重心转向A1/A2/A4——它们不需要协议栈漏洞,只需要网络对PTB的无鉴别接受。防御经济学因此从"打补丁"转向"行为监测与信任边界设计"。
04 · PMTUD黑洞诊断方法
| 症状 | 排查动作 | 根因判定 |
|---|---|---|
| TCP小报文通、大包挂起 | ping -M do递增载荷尺寸定位阈值;tracepath6逐跳测量 | 阈值小于预期=路径MTU异常;大包无PTB回送=PTB被过滤(A2/误配置) |
| UDP大报文单向不通 | 双端抓包确认PTB是否生成与到达;检查边界ACL的ICMPv6策略 | PTB生成但被边界丢弃=RFC 4890违规;PTB被伪造压制=A1嫌疑 |
| 特定方向/特定时段劣化 | 长期采样路径MTU变化曲线;比对物理链路MTU配置 | MTU曲线频繁震荡至1280=A1压制嫌疑;恒定异常=配置错误 |
| 隧道内业务黑洞 | 测量隧道内外MTU差;核查隧道MTU配置与PMTUD联动(RFC 4459) | 内层PMTUD失效=隧道未透传PTB或MTU未适配 |
05 · 加固与替代:从信任到验证
- PLPMTUD(RFC 4821,2007年):分组化层路径MTU发现——TCP/传输层主动探测真实可通尺寸,不依赖ICMPv6:以探测报文的实际成败判定PMTU,天然免疫伪造PTB的压制与抑制两类攻击。代价是探测开销与收敛速度,TCP实现普遍具备;
- DPLPMTUD(RFC 8899,2020年):将PLPMTUD思想推广至UDP类数据报应用(如QUIC内建等效机制),提供标准化的探测算法与状态机——无状态协议的PMTUD加固主路径;
- MSS钳制与缓冲区基线:边界按路径最小MTU改写TCP MSS、按RFC 8900建议约束DNS等UDP应用缓冲区(1232字节量级)——从源头减少触发PMTUD的需求;
- PTB透传与核验基线:边界不得过滤PTB(RFC 4890);同时对PTB实施速率限制与来源分析;主机侧启用对PTB引用载荷的一致性校验(现代TCP默认具备的方向);
- 隧道MTU治理:显式配置隧道MTU、确保PTB跨隧道正确传递(RFC 4459)、对隧道内外分片嵌套实施基线监测。
06 · 集体教训:DNS Flag Day 2019与"分片不可靠"共识
2019年2月,多家DNS软件厂商与运营商联合发起"DNS Flag Day",停止对不规范EDNS实现的迁就——其直接背景之一,正是DNS over UDP依赖IP分片时的普遍不可靠(中间设备对分片与ICMP错误的粗放处置)。RFC 8900(2020年)随后将经验固化为标准建议:DNS实现应主动避免IP分片(EDNS缓冲区建议值1232字节),并在必须传输大响应时优先TCP。对本课题的启示:当一种传输机制的现实可靠性低于协议设计预期时,生态会以"弃用机制"而非"修复中间设备"作为终局答案——PMTUD/分片的治理窗口,正是在此类生态共识形成之前。
07 · 检测规则思路(衔接第8页监测基线)
- PTB速率与分布基线:按源/目的/接口统计PTB速率,突增即告警;PTB来源地址与宣称MTU值分布建档;
- MTU行为异常:监测主机路径MTU缓存的长期变化曲线,非物理变更导致的下行跳变(尤其压至1280)标记为A1嫌疑;
- PTB载荷引用校验:抽样核查PTB引用载荷与内网在途数据报的匹配性——不匹配=伪造强信号;
- 分片形态耦合:PTB突增与分片形态突变(第3页指纹)的时序关联分析;
- 黑洞健康指标:"PMTUD失败率"(大包重传率、TCP stuck会话占比)纳入网络健康仪表盘,其长期非零即提示A2或误配置存在。
本节参考来源(第6页)
以下均为真实可查的权威来源,用于支撑本页事实性表述。
IETF RFC 1981《Path MTU Discovery for IPv6》(1996年8月):rfc-editor.org/rfc/rfc1981;RFC 8200(2017年7月)§5最小MTU与PTB处理:rfc-editor.org/rfc/rfc8200。
IETF RFC 4443《ICMPv6》(2006年3月,§2.4错误消息生成规则):rfc-editor.org/rfc/rfc4443;RFC 4884《Extended ICMP to Support Multi-Part Messages》(2007年4月)。
IETF RFC 4890《Recommendations for Filtering ICMPv6 Messages in Firewalls》(2007年5月):rfc-editor.org/rfc/rfc4890;RFC 5927《ICMP Attacks against TCP》(2010年7月):rfc-editor.org/rfc/rfc5927。
IETF RFC 8021《Generation of IPv6 Atomic Fragments Considered Harmful》(2017年1月):rfc-editor.org/rfc/rfc8021;RFC 6946(2013年5月):rfc-editor.org/rfc/rfc6946。
IETF RFC 4821《Packetization Layer Path MTU Discovery》(2007年3月):rfc-editor.org/rfc/rfc4821;RFC 8899《Datagram Packetization Layer Path MTU Discovery (DPLPMTUD)》(2020年9月):rfc-editor.org/rfc/rfc8899。
IETF RFC 8900《Avoiding IP Fragmentation in the DNS》(2020年9月):rfc-editor.org/rfc/rfc8900;DNS Flag Day 2019官方网站:dnsflagday.net/2019。
IETF RFC 4459《MTU and Fragmentation Issues with In-the-Network Tunneling》(2006年3月):rfc-editor.org/rfc/rfc4459。