光猫的 IPv6 WAN 信息获取方式
全局地址获取方式: 无状态自动配置
DHCP 启用前缀代理:√
NATv6 模式:不启用
LAN IPv6 配置
LAN 侧 DNS 获取方式:HGWProxy
LAN 侧前缀获取方式:WANDelegated
路由器 IPv6 联机类型:Passthrough
前两天用着感觉没啥问题,今天早上发现网络有点不太对劲,先是拨打别人微信视频一直连接失败,断开 WiFi 重连以后正常了。
下午发现 NAS 下载 IPv6 的种子 Peer 里没有出现 IPv6 的地址。查看了下 IPv6 地址还在,尝试重启路由器和光猫都不能让 IPv6 正常工作,尝试了很长一段时间发现一个奇怪的现象。
CentOS 系统和 NAS 获取到 IPv6 地址后使用 ping -6 或者 curl -6 都不能正常工作,换什么目标地址都不行,然后我在 CentOS 上使用 mtr -6,NAS 上使用 traceroute -6 连通目标主机以后 ping -6 和 curl -6 就能正常工作了,换个地址也同样能正常工作。
正常工作以后重启了光猫,机器上的 IPv6 地址就多了一个新的,旧的还在,这时候 IPv6 又不能正常访问了,重启网络服务可以让 IPv6 地址恢复成一个,但还是不能正常访问,只有执行 mtr -6 和 traceroute -6 这两台机器的 IPv6 网络才能恢复正常。
不清楚是什么原因造成的这种现象,也不知道该怎么解决,想到的简单粗暴的方法是这两台机器定时跑这两个命令或许可行?
CentOS重启系统后IPv6状态正常,路由表如下:
2408:820c:7517:a940::/64 dev eth0 proto ra metric 100 pref medium
fe80::/64 dev eth0 proto kernel metric 100 pref medium
第一次重启光猫,获取新的IPv6地址,路由表如下:
2408:820c:7511:89c0::/64 via fe80::f22f:74ff:fe6a:9548 dev eth0 proto ra metric 100 pref high
2408:820c:7517:a940::/64 dev eth0 proto ra metric 100 pref medium
fe80::/64 dev eth0 proto kernel metric 100 pref medium
第二次重启光猫,获取新的IPv6地址,路由表如下:
2408:820c:7511:89c0::/64 via fe80::f22f:74ff:fe6a:9548 dev eth0 proto ra metric 100 pref high
2408:820c:7512:4fa0::/64 via fe80::f22f:74ff:fe6a:9548 dev eth0 proto ra metric 100 pref high
2408:820c:7517:a940::/64 dev eth0 proto ra metric 100 pref medium
fe80::/64 dev eth0 proto kernel metric 100 pref medium
问题出现了,路由表中有两条high,这时候IPv6就不能工作了,使用mtr -6以后IPv6恢复工作,但是路由表没变。 CentOS的ip -6 route没有显示expires,NAS系统里有,我看了下,每条路由记录的expires是72小时,看来以后要避免重启光猫,就是不知道这个IPv6自身多久会更新一次。
1
cnbatch 2023-05-09 14:17:48 +08:00
会不会又是经典的“光猫防火墙默认阻止 IPv6 主动入站”,先关掉试试
|
3
xPKK1qofAr6RR09O 2023-05-09 14:48:14 +08:00
多个 ip 不能用是普遍存在的,单 ip 还不能用没遇到过
|
4
cnbatch 2023-05-09 15:01:28 +08:00
排除法,先排除掉光猫。
如果换成路由器接管呢?(比如路由器拨号) |
5
ozOGen 2023-05-09 15:32:29 +08:00 via iPhone 1
看起来是 lifetime 和 preferred timeout 的问题,不过看设置项貌似是 asuswrt 的系统,不记得有没有地方可以设置了
|
6
lcdtyph 2023-05-09 15:41:33 +08:00 via iPhone
路由器上的联机类型改成 native
passthrough 我没理解错的话是中继模式,问题很多 |
7
acbot 2023-05-09 16:45:27 +08:00 1
短时间重启光猫,上一个无状态配置的 ipv6 lifetime 还没到而新的通告又来了, 所以同时存在两个优先级一样的地址问题就出现了,等旧的 ipv6 lifetime 到了正常了! 你这个情况应该是电脑的网卡和光猫之间不是直连中间还有其他设备(比如:交换机)造成电脑的网卡没有断开重连的过程,只要有这个重连的过程系统都能正常清空以前的地址
|
8
cnbatch 2023-05-09 18:18:49 +08:00
@ozOGen 我以前就用华硕路由器来 PPPoE 拨号,IPv6 也是用 Passthrough ,只不过是 WAN 侧 Passthrough 过来。在 Passthrough 状态下,lifetime 这块是没法设置的。一旦在 IPv6 页面选了 Passthrough ,那么该页面的其它选项就会全部消失,什么都不能设置。
于是我就换成了软路由。 不知道 OP 家的网络设备是什么样的,如果也是这样的话,那就没法在路由器上面解决了( Passthrough 状态下不能,除非换成其它选项) |
9
jsq2627 2023-05-09 19:23:02 +08:00
这也是 ipv6 常见问题了。
路由器通过通过 RA 通告广播 IPv6 前缀。 原因就是 7 楼说的,断电重启光猫,旧的 RA 通告还没过期,新的 RA 通告又来了,如果系统没有检测到断网,那就会同时认为这两个地址都有效,而 Windows 在网络通信时候会使用最老的有效 IPv6 地址,导致无网络。 解决办法:如果是光猫拨号,就避免光猫断电硬重启。如果是路由器拨号,那就避免路由器硬重启。慎用光猫 /路由器的定时重启功能。 一部分路由器支持在软重启前(在后台点“重启”按钮,或者定时重启)通告旧前缀无效。但是大部分路由器应该是不支持的,典型如 OpenWRT ( odhcpd )。 |
11
jsq2627 2023-05-09 19:31:37 +08:00
@cnbatch 我当时是 Windows 遇到这个问题,但是装在 VM 里的 Arch 反而会能够使用最新的地址,不会断网。所以对于 Linux 我不敢判断 😂
|
12
jsq2627 2023-05-09 19:34:16 +08:00
@cnbatch 我就是在 OpenWRT 下遇到了这个问题,翻出 odhcpd 代码看了半天,反复确认在重启的时候不会通告 prefix deprecated ,这是问题根源。(但重新 PPPoE 拨号时就能正确宣告旧地址 deprecated )
|
14
zent00 2023-05-09 19:47:02 +08:00
|
15
villa2935 2023-05-10 05:39:17 +08:00 via Android
是不是掉线从连没更新前缀?
|
16
letmefly 2023-05-10 07:37:11 +08:00
我用的 er-x 路由器也遇到这个问题,从自带的固件刷到 openwrt 都有这个问题,一段时间后 lan 口下的设备就没法通过 ipv6 上网了。
|
17
x2009again 2023-05-10 09:04:27 +08:00
我用联通时也有多 ipv6 的问题,但是有 deprecated ,所以不影响上网,换成电信后 ipv6 固定了,重启路由客户端 ipv6 也不会变化,不过路由的 ipv6 是会变化的,和 ipv4 相差 3 秒左右更新
|
18
peasant OP @acbot 昨晚回去尝试了一下,确信拔网线和重启路由器都不会让 CentOS 清除之前的 IPv6 路由,Windows 断开 WiFi 重连确实没有看到还有之前的 IPv6 路由,最后在 NetworkManager 下面加了个钩子,断开网络的时候清空 IPv6 路由表。只要重启网络服务就能正常了,NAS 没找到重启网络服务的方法,暂时先这样吧。
|
19
acbot 2023-05-10 09:42:34 +08:00
@peasant 拔网线和重启路由器...改变端口状态这个就是针对 Windows 说的,Linux 可以禁用 NetworkManager 使用 Network 服务 试试看,我记得这两中方式效果不同,由于要指定后缀和隐私模式的情况所以我也使用了 NetworkManager 遇到这样的情况要不等,要不重启网络服务!
|
20
huaxie1988 2023-05-13 16:43:47 +08:00 2
@jsq2627 openwrt 重启前缀问题我自己解决了,可以通过在关机停止 odhcpd 前关掉 wan 口解决,在 init.d 目录新建个文件,例如 wandown ,内容如下
#!/bin/sh /etc/rc.common STOP=80 USE_PROCD=1 stop_service() { ifdown wan sleep 1 } 然后给该文件加上运行权限 chmod +x /etc/init.d/wandown 允许该脚本 /etc/init.d/wandown enable 然后关闭 odhcpd 前 wan 口会先被关闭,odhcpd 就会发 preferred_lifetime 为 0 的 ra 给下方设备让 ip 前缀失效。 |