这个 ipv6 问题真折磨,大佬帮我分析下

333 天前
 FaiChou

上一个帖子IPv6 没问题,但夜间看不了 ipv6 源的电视

今天查看了一下问题,应该是 OpenWRT ipv6 的问题。具体表现在,每天凌晨一点多 OpenWRT 会执行自动重启,到白天 ipv6 都是 work 的,到了晚上连接它的客户端就无法访问 ipv6 地址了。研究了一会,发现重新连接一下 WAN6 这个网口(DHCPv6)后,就可以恢复正常,也就是用命令 (ifdown WAN6 && ifup WAN6)。

在出问题的时候,客户端(手机)无法观看 IPV6 源的电视,电脑( macOS )使用命令执行ping6 2409:8087:1e03:21::2 无响应; 但是 ssh 进 OpenWRT 后执行 ping6 都是正常的。使用 traceroute6 命令也是一样,客户端(macOS)执行后只有一条 1 2408:8224:f27:cc71::1 4.568 ms 4.953 ms 3.863 ms, 但在 OW 内部则是正常有跳转的。

即使出问题的时候,macOS 也是有 ipv6 地址的:

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
	ether 51:ed:3d:03:02:0c
	inet6 fe80::1c00:7578:921:68c1%en0 prefixlen 64 secured scopeid 0xc
	inet6 2408:8224:f27:cc71:cfd:83f:84d8:2748 prefixlen 64 autoconf secured
	inet6 2408:8224:f27:cc71:740e:450:7753:f472 prefixlen 64 autoconf temporary
	inet 192.168.11.109 netmask 0xffffff00 broadcast 192.168.11.255
	inet6 2408:8224:f27:cc71::ea1 prefixlen 64 dynamic
	inet6 fd72:53a3:521f:4e91:1003:46e:4ce2:710a prefixlen 64 autoconf secured

使用 netstat -nr -f inet6 查看路由表也是没有用信息。

仅仅重启了 WAN6 这个网口,没有重启 ipv4 的网口,防火墙也没有改变,所以应该不是防火墙问题。

重启过路由器,也是没有影响。开关过 OpenClash ,也没影响。

难道是租约到期了?但我不知道如何排查租约问题。不能每次挂掉后再登录 OW 重新连接 WAN6 吧。

3730 次点击
所在节点    宽带症候群
33 条回复
sangmingming
333 天前
开启 ipv6 之后还怎么作为网关,给家里的设备翻墙啊,我这开了 v6 之后,翻墙感觉就废了。
FaiChou
333 天前
@sangmingming v6 和 fq 没太大关系吧。我这没影响。
ac169
333 天前
正常情况你应该删除系统自带的 wan6 接口, 正常情况应该让系统在拨号以后自动协商并创建一个 wan_6 虚接口, uci get network.wan.ipv6 检查一下这个值是否为空或 'auto', 如果不是设置值为 auto 即可. 然后 局域网尽量使用 slaac 分配管理 ipv6 地址 uci get dhcp.lan.ra 查看 结果值 最好是 server, 是否是 OP 官方系统, 是否修改过 v6 防火墙 特别是 icmpv6 的那几个
galwen
333 天前
不懂……
lcdtyph
333 天前
可能是 ra 过期了,出问题的时候电脑上 ipv6 的 default 路由还在吗
FaiChou
333 天前
@lcdtyph default 路由正常情况是这样的,很奇怪,并没有路由到正确地址:

```
Destination Gateway Flags Netif Expire
default fe80::56f6:c5ff:fe18:11a1%en0 UGcg en0
default fe80::%utun0 UGcIg utun0
default fe80::%utun1 UGcIg utun1
default fe80::%utun2 UGcIg utun2
default fe80::%utun3 UGcIg utun3
default fe80::%utun4 UGcIg utun4
default fe80::%utun5 UGcIg utun5
default fe80::%utun7 UGcIg utun7
default fe80::%utun8 UGcIg utun8
default fe80::%utun9 UGcIg utun9
default fe80::%utun10 UGcIg utun10
default fd7a:115c:a1e0:: UGcIg utun6
default fd3c:88df:2ffd:: UGcIg utun11
::1 ::1 UHL lo0
```
FaiChou
333 天前
@FaiChou #6 这个情况下 `ping6 2409:8087:1e03:21::2` 是有正常的返回的。
FaiChou
333 天前
@ac169 我的网络: cat /etc/config/network:

```
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.11.1'
option netmask '255.255.255.0'
option delegate '0'
option ip6assign '64'

config interface 'wan'
option ifname 'eth1'
option _orig_ifname 'eth1'
option _orig_bridge 'false'
option proto 'dhcp'

config interface 'WAN6'
option proto 'dhcpv6'
option ifname 'eth1'
option reqaddress 'try'
option reqprefix 'auto'

```

执行 `uci get dhcp.lan.ra` 也是 server
lcdtyph
333 天前
@FaiChou
第一条 via en0 的 link-local 地址就是路由器,是正确的,问题是出问题的时候还有这条路由吗
如果届时这条路由消失了,那去路由器上看看 odhcpd 的进程还在不在
fengchen0vr
333 天前
前几年版本的 openwrt 好像是有 ipv6 问题,这两年的没问题了,就是楼上说的 odhcpd 问题
pagxir
332 天前
openwrt 的 wan 口走 relay 还是 prefix delegate , 是不是 dhcpv6 实现有问题,导致前缀失效没有及时刷新。
pagxir
332 天前
@sangmingming 修改一下 dns 配置,或者改一下/etc/gai.conf
FaiChou
332 天前
@lcdtyph #5
@fengchen0vr
@pagxir #11

不工作的时候,odhcpd 进程还在,并且路由也正常, fe80::56f6:c5ff:fe18:11a1 就是 OW 的 br-lan:

```
~ netstat -nr | grep default
default 192.168.11.1 UGScg en0
default link#26 UCSIg utun6
default fe80::56f6:c5ff:fe18:11a1%en0 UGcg en0
```

但我发现每次失效前都会有这样的日志:


```
Sat Dec 23 13:16:49 2023 daemon.info netdata[12304]: Initializing file /var/cache/netdata/ipv6.icmpechos/main.db.
Sat Dec 23 13:16:49 2023 daemon.info netdata[12304]: Initializing file /var/cache/netdata/ipv6.icmpechos/InEchos.db.
Sat Dec 23 13:16:49 2023 daemon.info netdata[12304]: Initializing file /var/cache/netdata/ipv6.icmpechos/OutEchos.db.
Sat Dec 23 13:16:49 2023 daemon.info netdata[12304]: Initializing file /var/cache/netdata/ipv6.icmpechos/InEchoReplies.db.
Sat Dec 23 13:16:49 2023 daemon.info netdata[12304]: Initializing file /var/cache/netdata/ipv6.icmpechos/OutEchoReplies.db
```
FaiChou
332 天前
大概率还是 dhcp 续租问题,我的 OW 设置的凌晨 1 点重启,租期是 12 小时,查看日志在 13 点的时候有:

Sat Dec 23 13:01:11 2023 daemon.notice netifd: wan (6047): udhcpc: sending renew to server 192.168.1.1
Sat Dec 23 13:01:11 2023 daemon.notice netifd: wan (6047): udhcpc: lease of 192.168.1.2 obtained from 192.168.1.1, lease time 86400

但并没有 odhcp6c 的续租日志。

@pagxir @lcdtyph
ac169
332 天前
@FaiChou

1. 系统版本是否是有点低,就是 18 左右的版本?

2. 系统防火墙默认规则:Allow-ICMPv6-Input Allow-ICMPv6-Forward Allow-MLD 这三条是否存在和启用

3.

config interface 'WAN6'
option proto 'dhcpv6'
option ifname 'eth1'
option reqaddress 'try'
option reqprefix 'auto'

曾经遇到过系统自带的这个接口与 pppoe 连接不同步的情况 ,所以这一段你可以删除然后拨号试试,正常情况拨号之后系统会自动创建一个 wan_6 的虚拟 dhcpv6 接口,断开拨号自动删除。但是不知道你系统的版本所以说只能试试。或者说如果 network.wan.ipv6 这个值为空或 'auto' 的情况下 你拨号之后没有产生一个 wan_6 的虚拟 dhcpv6 接口 那么就说明你的版本有不同(要不太老 要不不是官方的)
FaiChou
332 天前
@ac169 #15 谢谢回复。我的版本是 R23.3.3 (2023-03-05),并且 3 条防火墙规则都在。一开始好用,12 小时后不工作,大概率说明租约问题,我已经改成 24 小时,看看明天是否有效吧。我看了下,这个系统的 dhcp 服务器是 dnsmasq(v4)+odhcpd(v6)。折腾这么多(对我小白来讲)真不如拿掉 OW 。
ac169
332 天前
@FaiChou 没想到你版本还很新,但看之前你给的配置文件有很多参数是移除的,比较疑惑! 个人认为是 IPv6 地址 / 路由 / 邻居 后续维护过程有问题,并不是租期的问题,因为出问题的时候你地址还在! 也就是可以在局域网抓包 看看是否能收到和相应网关 icmpv6:134 (RA) 135 (NS) 136 (NA) 三种类型消息,很有可能是你只收到过一次 RA 消息(就是你说 WAN6 接口重播的时候) 当然这个只是思路,其实 OP 从 18 版本(官方)开始用 v6 一点问题都没有!
lcdtyph
332 天前
@FaiChou
那可能是 wan 的 ipv6 pd 没有续租,导致 odhcp 不在 lan 侧广播 ra 了
linuxyz
332 天前
`ip neigh` 看一下,如果不是 WAN 的 PD/DHCPv6 到期了,就是 neigh 失效了
FaiChou
332 天前
@linuxyz
@lcdtyph #18
@ac169 #17

我的理解是,光猫拨号后,给 OpenWrt 分配了 PD 前缀,有了前缀,OpenWrt 作为 DHCPv6 服务器向下 RA 广播,这样连接它的客户端就有了 v6 地址(不管是 SLAAC 还是 DHCPv6 )。如果是 PD 到期了,OpenWrt 需要提前检测并重新向光猫续租。我的问题大概是续租出了问题,所以现在要查看租约文件。我查了一下,找不到 DHCPv6 客户端的租约文件在什么地方。`ip neigh` 是查看 ARP 表的吧?需要等下次 v6 宕机时候再验证了。而抓包 `icmpv6:134 (RA) 135 (NS) 136 (NA) ` 对我更陌生。所以我上面的分析是正确的吧?没问题的话,我下次遇到再按照这个逻辑查找问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1002732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX