抓 IPv6 流量的写法
ip6 原语把过滤范围限定在 IPv6 报文,之后可以继续叠加 tcp、udp、icmp6 等关键字。IPv6 的地址自动配置与邻居发现都跑在 ICMPv6 上,排查地址无法配置、网关不可达时不能只看 TCP 与 UDP;双栈环境排障的第一步,也是先分清流量走的是哪个协议族。
基本信息
| 适用平台 | Linux / macOS / BSD 上的 tcpdump |
|---|---|
| 语法 | ip6 [and …] / icmp6 / icmp6 and ip6[40] = <类型> |
| 关键类型 | 128/129 Echo、133/134 路由、135/136 邻居发现 |
| 常用搭配 | -nn 不解析名字、-vv 展开字段、-e 看帧头 |
| 地址匹配 | host 关键字后可直接写 IPv6 地址 |
典型使用场景
- 排查 IPv6 地址配置失败:先确认能否看到路由通告与邻居交互
- 验证双栈服务是否真的走了 IPv6,而不只是解析到了 AAAA 记录
- 检查设备是否按策略放行 ICMPv6,避免邻居发现被拦
- 核对 IPv6 与 IPv4 两条路径的时延差异
- 定位只支持 IPv6 的客户端为何连不上服务
常用示例
常用示例
tcpdump -i eth0 -nn ip6 # 全部 IPv6 流量
tcpdump -i eth0 -nn 'icmp6 and ip6[40] = 135' # 邻居请求 NS
tcpdump -i eth0 -nn 'icmp6 and ip6[40] = 136' # 邻居通告 NA
tcpdump -i eth0 -nn 'ip6 and tcp port 443' # IPv6 上的 HTTPS
tcpdump -i eth0 -nn 'ip6 and host 2400:3200::1' # 限定对端地址ICMPv6 类型速查
| 类型值 | 名称 | 作用 |
|---|---|---|
| 133 | 路由请求 | 主机主动请求路由器通告 |
| 134 | 路由通告 | 路由器下发前缀与默认网关信息 |
| 135 | 邻居请求 | 地址解析与可达性检测 |
| 136 | 邻居通告 | 应答邻居请求 |
| 128 / 129 | Echo 请求与应答 | 等价于 IPv4 环境下的 ping |
屏蔽 ICMPv6 会直接破坏地址自动配置与邻居发现,抓不到 NS 与 NA 时先怀疑策略设备而不是终端。
双栈环境下按域名过滤可能同时命中 IPv4 与 IPv6 两串流量,分析前先明确要看的协议族。
补充要点
- 先确认终端是否真的拿到了 IPv6 地址,再谈过滤表达式怎么写
- 路由器通告被拦截时终端只有链路本地地址,表现与「完全没有 IPv6」一致
- IPv6 基础首部固定 40 字节,扩展头会改变后续协议字段的偏移
- 跨网段排查时源地址可能是临时地址,与设备上的固定地址不同
排查 IPv6 分片与扩展头问题时用 -vv 展开字段,分片信息位于扩展头而非基础首部。
抓包前先用地址查看命令确认本机 IPv6 状态,能省掉大量无效抓包。