ICMPv6 是什么
ICMPv6 是 IPv6 的控制报文协议,除了传统的差错与 ping 功能,还承接了 IPv4 里由 ARP 与部分 DHCP 承担的地址解析、邻居发现与地址自动配置。因此它不只是「可选的网管流量」,而是 IPv6 正常工作的组成部分:类型 1-4 是差错报文,128/129 是 Echo 请求与应答,133-137 是邻居发现(NDP)的五种报文。防火墙上对 ICMPv6 一刀切屏蔽,会直接破坏地址自动配置与路径 MTU 发现。
基本信息
| 规范 | RFC 4443(ICMPv6)、RFC 4861(邻居发现)、RFC 4890(防火墙建议) |
|---|---|
| 差错类型 | 1 目的不可达、2 包太大、3 超时、4 参数问题 |
| 回显类型 | 128 Echo Request、129 Echo Reply |
| NDP 类型 | 133 RS、134 RA、135 NS、136 NA、137 Redirect |
| 组播监听 | 130-132、143(MLD 查询/报告) |
| 不可分片 | IPv6 中间路由器不分片,包太大差错是 PMTUD 的关键 |
常见类型速查
| 类型 | 名称 | 作用 |
|---|---|---|
| 1 | Destination Unreachable | 不可达,码 0-6 细分原因 |
| 2 | Packet Too Big | 路径 MTU 发现,IPv6 下必须放行 |
| 3 | Time Exceeded | 跳数耗尽或重组超时,traceroute6 依赖 |
| 4 | Parameter Problem | 头部参数错误 |
| 128/129 | Echo Request/Reply | ping6 使用 |
| 133-137 | RS/RA/NS/NA/Redirect | 邻居发现与地址自动配置 |
典型使用场景
- 用 ping6 做 IPv6 连通性测试,确认链路与地址配置正确
- 在防火墙上制定 ICMPv6 精细化放行策略而不是全放或全禁
- 排查 IPv6 大包不通:确认包太大(类型 2)是否被放行
- 定位地址自动配置失败:检查 RA/RS 是否被中间设备拦截
- traceroute6 出现星号时,判断是否是超时报文被过滤
- 双栈环境分别验证 v4 与 v6 路径,ICMPv6 的状态不能从 ICMPv4 推断
抓包与测试
抓包与测试
# 抓取 ICMPv6 报文
tcpdump -nn 'icmp6' -c 20
# 只抓邻居请求 NS(类型 135)
tcpdump -nn 'icmp6 and ip6[40] == 135' -c 5
# 只抓包太大差错(类型 2),排查 PMTUD
tcpdump -nn 'icmp6 and ip6[40] == 2' -c 5
# 连通性测试与路径 MTU 探测
ping6 -c 4 -s 1400 host
ping -6 -M do -s 1400 hostIPv6 规定中间路由器不做分片,只能由源端分片,因此「包太大」差错是路径 MTU 发现的唯一信号。屏蔽它会让你看到「小包通、大包静默丢弃」这一典型症状,且没有任何回执提示。
IPv6 防火墙策略必须显式放行必要 ICMPv6(至少类型 1-4 与 133-137,含 ND 相关):一刀切屏蔽会破坏邻居发现与地址自动配置,导致主机拿不到地址或邻居不可达。