对付奇葩ipv6路由

现象

新买了一个便宜vps,它的ipv6配置特别奇葩。首先装好系统是没有v6的,提工单才人工帮我配了一个,环境是ubuntu server在netplan里配的。其次它的网关居然是“2400:f880:be5:b199::”,即::0,而不是常见的::1。
最严重的问题是刚配好是ok的,大概几分钟之后就不通了。ping任意地址::1会返回icmp destination unreachable。抓包发现外网的包能收到但是发不出去。此时重启又马上正常,过几分钟又发病,复现率百分百。

解决

ip -6 neigh show命令输出如下:

刚开机v6正常工作时
2400:f880:be5:b199::1 dev ens17 lladdr f0:8e:d3:00:06:08 router STALE
fe80::f28e:d3ff:fe00:608 dev ens17 lladdr f0:8e:d3:00:06:08 router STALE
2400:f880:be5:b199:: dev ens17 lladdr 78:9a:18:22:6d:12 router STALE

v6失效后
2400:f880:be5:b199::1 dev ens17 lladdr f0:8e:d3:00:06:08 router STALE
fe80::f28e:d3ff:fe00:608 dev ens17 lladdr f0:8e:d3:00:06:08 router STALE
2400:f880:be5:b199:: dev ens17 lladdr f0:8e:d3:00:06:08 router DELAY

可以看到::0确实是真网关,看mac地址是个Mikrotik路由器。关键原因是失效后它对应的mac地址就变成::1的了。把mac地址给它固定即可解决问题,创建/etc/systemd/network/10-netplan-ens17.network.d/override.conf如下。其中.d目录的名称得和/var/run/systemd/network/目录下由netplan自动创建的.network一致。

[Neighbor]
Address=2400:f880:be5:b199::
MACAddress=78:9a:18:22:6d:12

应用后ip -6 neigh show可以看到手动添加的条目状态是PERMANENT了,不会再发病了。

原因

gemini对此问题的评价:

网络中IP为 …::1 的设备,在收到了您服务器为网关 …:: 发出的邻居请求后,错误地回复了一个邻居通告,谎称自己就是网关。

这种行为可能是由以下原因造成的:

  • 错误的代理NDP (Proxy NDP) 配置:…::1 这台设备可能被错误地配置为对网段内的所有地址进行NDP代理,这在某些场景下有用,但在这里显然是配置错了。
  • 服务商网络架构问题:一种不太常见但可能的情况是,服务商在网络层做了某些特殊的转发或冗余设置,但配置存在缺陷,导致了地址冲突。

当您的VPS的邻居缓存被这个错误的通告“污染”后,它会尝试将本应发往真正网关的数据包,发送到 …::1 设备的MAC地址上。而 …::1 设备并不是一个路由器,它收到这些数据包后不知道如何处理,便将其丢弃。这就完美解释了为什么“外网的包能收到但是发不出去”。

暂无评论

发送评论 编辑评论


				
上一篇