测连通性:你到底是谁?
预期:一般情况下 IPv6 隐私扩展 开启,通常会显示你的临时 IPv6 地址,固定的 IPv6 地址通常是通过 SLAAC / EUI-64 机制生成的,且一直不会变。你如果想要禁用临时的 IPv6 地址,可以 PowerShell 管理员执行:
Set-NetIPv6Protocol -UseTemporaryAddresses Disabled
预期:显示的IP应该和你做 NAT66 的接口一致,比如 wan_6。然后手机系统里面会显示你之前设置的 ULA 地址。
查路由表:数据包迷路了吗? (ip -6 route)
如果能拿到 IP 却上不了网,大概率是底层的路由表在“打架”。我们需要分别检查“主路由表”和“PC 专表”。
A. 检查主路由表 (ip -6 route show)
这是路由器和 NAT66 设备(手机)的公用地图。
寻找“出海口”:必须看到类似 default dev pppoe-wan metric 1024 的规则。
这是手机和路由器上网的唯一依靠。如果没有这行,你的手机拿到了 fd00: 地址也出不去。
寻找“归家路”:必须看到 240c:xxx::/64 dev br-pc metric 128。
这是我们脚本手动注入的。它告诉路由器,如果有主动找上门的公网流量,请绕过 NAT,直接丢给 br-pc 网桥。
警惕“黑洞”:不能有 unreachable 240c:xxx::/64 dev lo
如果这行还在,说明系统还在自我保护,拒绝转发公网前缀。
B. 检查 PC 专线表 (ip -6 route show table 100)
这是 PC 流量在进入路由器后,被策略路由“劫持”到的 VIP 空间。
在你的 table 100 里,这两行就是 PC 的生命线:
default dev pppoe-vwan1 metric 1024:
作用:这是 PC 的“专属转发机器”。它强制要求 PC 产生的所有流量,必须无视主路由表,死死地从 vwan1 拨号口打出去。这是解决首包绑定、强制流量分流的核心。
240c:xxx::/64 dev br-pc metric 1024:
作用:这是 PC 的“室内走廊”。它保证了在 table 100 这个独立空间里,数据包能找回 br-pc 物理接口。
C. 检查“传送门”规则 (ip -6 rule show)
有了专表,还得有门票。输入这个命令,你必须看到:
from all iif br-pc lookup 100
只要是从 br-pc 进来的流量,全部送进 table 100 处理。只有这行存在,上面的专表才会生效!
3. 查邻居表:谁在抢麦克风? (ip -6 neighbor)
在 Relay 中继模式下,IPv6 的邻居发现协议(NDP)极其容易错乱。输入以下命令查看邻居表(类似于 IPv4 的 ARP 表):
ip -6 neighbor show
# 或者简写为 ip -6 neigh
三种状态
REACHABLE (可达):这是满分状态。说明路由器和电脑之间刚刚完成了“你拍一我拍一”的握手。如果你还是上不了网,那锅 100% 在路由表或防火墙。
STALE (陈旧):这是“待定”状态。路由器知道你电脑的 MAC 地址,但最近 30 秒内没有发生过有效的数据交换。
💡 深度诊断:如果你正在电脑上疯狂 ping -6 却依然显示 STALE,这说明数据包有去无回。路由器把包发出去了,但上级网关的回包没能穿过中继链路回到电脑。如果你发现邻居表死死停在 STALE 动都不动,请不要试图去修邻居表,而是立刻去抓包 tcpdump,看看是不是回包被路由器的黑洞路由给吞了。
FAILED (失败) / 没这一行:这是“断连”状态。说明路由器在 br-pc 网桥上大声呼喊你电脑的名字,却没有任何回应。
💡 解决办法:回头检查 br-pc 物理网桥有没有绑错网口,或者电脑的防火墙(如 Windows Firewall)是否拦截了 ICMPv6 的邻居请求。
检查 MAC 地址的一致性
观察 lladdr 后面的那一串物理地址。
它必须是你电脑网卡的真实 MAC 地址。
如果在 br-pc 接口上看到了上级网关的 MAC 地址,或者出现了一堆奇怪的地址,说明发生了前缀污染或中继死锁(Loop)。
4. 抓包 (tcpdump)
如果你觉得一切配置都完美无缺,但就是 Ping 不通,那就只能用抓包大法了。我们在路由器的外网出口(比如咱们的 pppoe-vwan1 或主 wan)架设监听器:
tcpdump -i pppoe-vwan1 icmp6 -nn
此时,你在电脑上运行 ping -6 240c::6666(北京大学的开源镜像站 IPv6)。
盯着终端的输出,你会看到两种截然不同的场景,它们代表着完全不同的病灶:
场景 A:有去无回(上游网关无情丢包)
你一直看到电脑发出 ICMP6, echo request 去往外网,但屏幕上死活等不到对应的 echo reply 回来。这说明你的包确实成功扔给上级机房了,但被外网网关直接销毁。
🎯 通用排查方向:这通常意味着上级网络存在极其严格的源地址校验(uRPF)、MAC-IP 绑定机制,或者是你发送的源 IPv6 地址根本就不在机房的白名单里。
🔧 本教程对应病灶:这就是典型的“首包绑定被路由器抢跑”现象!机房只认路由器的 IP,不认你 PC 的 IP。检查防止路由器发包的配置。
场景 B:路由器“没收”回包(内网下行不通)
你看到了 echo request 顺利出去,也看到了 echo reply 带着外网的问候回到了你的拨号接口(WAN 侧),但你的电脑终端依然显示 Request timed out。
🎯 通用排查方向:这说明外网的链路是完全畅通的,问题 100% 出在你的路由器内部。要么是路由器不知道怎么把这个包送回给内网设备(回程路由表缺失/错乱),要么就是被路由器自己的防火墙(FORWARD 链)当成恶意请求拦截了。
🔧 本教程对应病灶:重点排查咱们在图形界面加的那条“允许 IPv6 入站”的防火墙通信规则有没有写错接口,以及 Hotplug 脚本里建立的 Table 100 专属路由表是否成功把流量导回了 br-pc。