V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
peasant
V2EX  ›  宽带症候群

开启 IPv6 后遇到的奇怪现象

  •  
  •   peasant · 2023-05-09 13:57:43 +08:00 · 4327 次点击
    这是一个创建于 564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    光猫的 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 网络才能恢复正常。

    不清楚是什么原因造成的这种现象,也不知道该怎么解决,想到的简单粗暴的方法是这两台机器定时跑这两个命令或许可行?

    第 1 条附言  ·  2023-05-09 16:13:39 +08:00

    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自身多久会更新一次。

    20 条回复    2023-05-13 16:43:47 +08:00
    cnbatch
        1
    cnbatch  
       2023-05-09 14:17:48 +08:00
    会不会又是经典的“光猫防火墙默认阻止 IPv6 主动入站”,先关掉试试
    peasant
        2
    peasant  
    OP
       2023-05-09 14:20:28 +08:00
    @cnbatch 不是入站问题,是我访问不了外网
    ppbaozi
        3
    ppbaozi  
       2023-05-09 14:48:14 +08:00
    多个 ip 不能用是普遍存在的,单 ip 还不能用没遇到过
    cnbatch
        4
    cnbatch  
       2023-05-09 15:01:28 +08:00
    排除法,先排除掉光猫。
    如果换成路由器接管呢?(比如路由器拨号)
    ozOGen
        5
    ozOGen  
       2023-05-09 15:32:29 +08:00 via iPhone   ❤️ 1
    看起来是 lifetime 和 preferred timeout 的问题,不过看设置项貌似是 asuswrt 的系统,不记得有没有地方可以设置了
    lcdtyph
        6
    lcdtyph  
       2023-05-09 15:41:33 +08:00 via iPhone
    路由器上的联机类型改成 native
    passthrough 我没理解错的话是中继模式,问题很多
    acbot
        7
    acbot  
       2023-05-09 16:45:27 +08:00   ❤️ 1
    短时间重启光猫,上一个无状态配置的 ipv6 lifetime 还没到而新的通告又来了, 所以同时存在两个优先级一样的地址问题就出现了,等旧的 ipv6 lifetime 到了正常了! 你这个情况应该是电脑的网卡和光猫之间不是直连中间还有其他设备(比如:交换机)造成电脑的网卡没有断开重连的过程,只要有这个重连的过程系统都能正常清空以前的地址
    cnbatch
        8
    cnbatch  
       2023-05-09 18:18:49 +08:00
    @ozOGen 我以前就用华硕路由器来 PPPoE 拨号,IPv6 也是用 Passthrough ,只不过是 WAN 侧 Passthrough 过来。在 Passthrough 状态下,lifetime 这块是没法设置的。一旦在 IPv6 页面选了 Passthrough ,那么该页面的其它选项就会全部消失,什么都不能设置。

    于是我就换成了软路由。

    不知道 OP 家的网络设备是什么样的,如果也是这样的话,那就没法在路由器上面解决了( Passthrough 状态下不能,除非换成其它选项)
    jsq2627
        9
    jsq2627  
       2023-05-09 19:23:02 +08:00
    这也是 ipv6 常见问题了。
    路由器通过通过 RA 通告广播 IPv6 前缀。
    原因就是 7 楼说的,断电重启光猫,旧的 RA 通告还没过期,新的 RA 通告又来了,如果系统没有检测到断网,那就会同时认为这两个地址都有效,而 Windows 在网络通信时候会使用最老的有效 IPv6 地址,导致无网络。

    解决办法:如果是光猫拨号,就避免光猫断电硬重启。如果是路由器拨号,那就避免路由器硬重启。慎用光猫 /路由器的定时重启功能。
    一部分路由器支持在软重启前(在后台点“重启”按钮,或者定时重启)通告旧前缀无效。但是大部分路由器应该是不支持的,典型如 OpenWRT ( odhcpd )。
    cnbatch
        10
    cnbatch  
       2023-05-09 19:29:28 +08:00
    @jsq2627 OP 用的似乎不是 Windows ( CentOS 肯定不是; NAS 大概率也不是)
    jsq2627
        11
    jsq2627  
       2023-05-09 19:31:37 +08:00
    @cnbatch 我当时是 Windows 遇到这个问题,但是装在 VM 里的 Arch 反而会能够使用最新的地址,不会断网。所以对于 Linux 我不敢判断 😂
    jsq2627
        12
    jsq2627  
       2023-05-09 19:34:16 +08:00
    @cnbatch 我就是在 OpenWRT 下遇到了这个问题,翻出 odhcpd 代码看了半天,反复确认在重启的时候不会通告 prefix deprecated ,这是问题根源。(但重新 PPPoE 拨号时就能正确宣告旧地址 deprecated )
    cnbatch
        13
    cnbatch  
       2023-05-09 19:40:15 +08:00
    @jsq2627 不同的路由、甚至不同的软路由都对 IPv6 支持得各不相同,这确实十分头大😓
    zent00
        14
    zent00  
       2023-05-09 19:47:02 +08:00
    我发现有相当一部分人说的 IPv6 的问题都是这两个问题:

    https://www.v2ex.com/t/800024
    https://www.v2ex.com/t/829436
    villa2935
        15
    villa2935  
       2023-05-10 05:39:17 +08:00 via Android
    是不是掉线从连没更新前缀?
    letmefly
        16
    letmefly  
       2023-05-10 07:37:11 +08:00
    我用的 er-x 路由器也遇到这个问题,从自带的固件刷到 openwrt 都有这个问题,一段时间后 lan 口下的设备就没法通过 ipv6 上网了。
    x2009again
        17
    x2009again  
       2023-05-10 09:04:27 +08:00
    我用联通时也有多 ipv6 的问题,但是有 deprecated ,所以不影响上网,换成电信后 ipv6 固定了,重启路由客户端 ipv6 也不会变化,不过路由的 ipv6 是会变化的,和 ipv4 相差 3 秒左右更新
    peasant
        18
    peasant  
    OP
       2023-05-10 09:19:08 +08:00
    @acbot 昨晚回去尝试了一下,确信拔网线和重启路由器都不会让 CentOS 清除之前的 IPv6 路由,Windows 断开 WiFi 重连确实没有看到还有之前的 IPv6 路由,最后在 NetworkManager 下面加了个钩子,断开网络的时候清空 IPv6 路由表。只要重启网络服务就能正常了,NAS 没找到重启网络服务的方法,暂时先这样吧。
    acbot
        19
    acbot  
       2023-05-10 09:42:34 +08:00
    @peasant 拔网线和重启路由器...改变端口状态这个就是针对 Windows 说的,Linux 可以禁用 NetworkManager 使用 Network 服务 试试看,我记得这两中方式效果不同,由于要指定后缀和隐私模式的情况所以我也使用了 NetworkManager 遇到这样的情况要不等,要不重启网络服务!
    huaxie1988
        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 前缀失效。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.