抓包看机房路由器发来的是什么“快递”。
如果机房把你当做同一个二层交换机上的邻居(现在的状态),它会先发**“寻人启事 (Neighbor Solicitation)”。
如果机房真正配置了静态路由,它会跳过寻人,直接把“包裹本包 (Echo Request)”**砸到你宿主机的脸上。
我们通过一个**“幽灵 IP 测试法”**就能瞬间让机房路由器的底层配置原形毕露。
准备工作:捏造一个不存在的“幽灵 IP”
在你的 /64 网段里,找一个你绝对没有配置过、也没有在任何虚拟机里用过的 IP。比如:
2602:0001:f::9999
验证步骤
第一步:在 PVE 宿主机上架起“照妖镜”
登录宿主机,监听公网网卡 vmbr0,并且只抓取这个“幽灵 IP”的 ICMPv6 流量。执行:
tcpdump -i vmbr0 -n icmp6 and host 2602:0001:f::9999
第二步:从外网发起“盲打”
千万不要从宿主机或 KVM 内部 Ping!你必须用完全外部的网络(比如断开 WiFi 用手机 5G 网络,或者使用外部的 VPS,或者网页版 Ping 工具如 ping.pe),去 Ping 这个幽灵 IP:
ping6 -c 3 2602:0001:f::9999
第三步:解读 tcpdump–判定
紧紧盯住宿主机上 tcpdump 的屏幕输出,你会看到以下两种结果之一:
结果 A:依然是“同链路 (On-link)” 状态
如果你看到的抓包输出长这样:
... Neighbor Solicitation, who has 2602:0001:f::9999
结论: 机房没有给你做静态路由。他们的路由器依然把你当成二层交换机上的小弟,正在满世界大喊“谁的 MAC 地址是这个?”
对策: 你只能继续依赖 ndppd 来伪造 MAC 宣告,继续玩被动代答的游戏。
结果 B:机房做到了!静态路由已生效!
如果你看到的抓包输出长这样(直接是 Echo Request 请求包):
... Echo Request, id 1234, seq 1
结论: 恭喜!这是最高级别的纯三层网络!机房路由器连问都没问,直接查了它的路由表,知道这个 /64 归你宿主机的网卡管,于是霸道地把真实的数据包(Ping 请求)生生砸给了你的宿主机。
(虽然宿主机收到包后发现本地没这个 IP 会把它丢弃,但“包能不经询问直接到达”这个事实,已经证明了一切!)
结果 C:tcpdump没有任何结果,一片沉寂
结论: 这说明了机房不仅没有给你配置静态路由(Static Route),而且他们的边界路由器极其严苛,甚至连正常的“寻人启事 (NS)”都懒得发,或者被机房的交换机硬防直接拦截了。
原因:当外部 Ping 那个“幽灵 IP”时,包到达机房路由器,路由器一看:“我缓存里没有这个 IP 的 MAC,我也不打算问”,然后直接就把包丢弃(Drop)了。这就是为什么你的宿主机连个包的影子都抓不到。