上一个帖子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 吧。
各位,我放弃了,不想研究了,生活明明那么多美好的事,非要花时间研究这个。
写个 corn 任务 0 12,18 * * * ifdown WAN6 && ifup WAN6
解决问题。
1
sangmingming 2023-12-22 19:03:38 +08:00
开启 ipv6 之后还怎么作为网关,给家里的设备翻墙啊,我这开了 v6 之后,翻墙感觉就废了。
|
2
FaiChou OP @sangmingming v6 和 fq 没太大关系吧。我这没影响。
|
3
ac169 2023-12-22 20:54:35 +08:00
正常情况你应该删除系统自带的 wan6 接口, 正常情况应该让系统在拨号以后自动协商并创建一个 wan_6 虚接口, uci get network.wan.ipv6 检查一下这个值是否为空或 'auto', 如果不是设置值为 auto 即可. 然后 局域网尽量使用 slaac 分配管理 ipv6 地址 uci get dhcp.lan.ra 查看 结果值 最好是 server, 是否是 OP 官方系统, 是否修改过 v6 防火墙 特别是 icmpv6 的那几个
|
4
galwen 2023-12-22 21:14:32 +08:00 via Android
不懂……
|
5
lcdtyph 2023-12-22 21:25:55 +08:00 via iPhone
可能是 ra 过期了,出问题的时候电脑上 ipv6 的 default 路由还在吗
|
6
FaiChou OP @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 ``` |
8
FaiChou OP @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 |
9
lcdtyph 2023-12-23 09:13:16 +08:00 via iPhone
|
10
fengchen0vr 2023-12-23 11:11:11 +08:00 via iPhone
前几年版本的 openwrt 好像是有 ipv6 问题,这两年的没问题了,就是楼上说的 odhcpd 问题
|
11
pagxir 2023-12-23 13:36:56 +08:00
openwrt 的 wan 口走 relay 还是 prefix delegate , 是不是 dhcpv6 实现有问题,导致前缀失效没有及时刷新。
|
12
pagxir 2023-12-23 13:41:28 +08:00
@sangmingming 修改一下 dns 配置,或者改一下/etc/gai.conf
|
13
FaiChou OP @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 ``` |
14
FaiChou OP 大概率还是 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 |
15
ac169 2023-12-23 16:21:45 +08:00
@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 接口 那么就说明你的版本有不同(要不太老 要不不是官方的) |
16
FaiChou OP @ac169 #15 谢谢回复。我的版本是 R23.3.3 (2023-03-05),并且 3 条防火墙规则都在。一开始好用,12 小时后不工作,大概率说明租约问题,我已经改成 24 小时,看看明天是否有效吧。我看了下,这个系统的 dhcp 服务器是 dnsmasq(v4)+odhcpd(v6)。折腾这么多(对我小白来讲)真不如拿掉 OW 。
|
17
ac169 2023-12-23 17:26:05 +08:00
@FaiChou 没想到你版本还很新,但看之前你给的配置文件有很多参数是移除的,比较疑惑! 个人认为是 IPv6 地址 / 路由 / 邻居 后续维护过程有问题,并不是租期的问题,因为出问题的时候你地址还在! 也就是可以在局域网抓包 看看是否能收到和相应网关 icmpv6:134 (RA) 135 (NS) 136 (NA) 三种类型消息,很有可能是你只收到过一次 RA 消息(就是你说 WAN6 接口重播的时候) 当然这个只是思路,其实 OP 从 18 版本(官方)开始用 v6 一点问题都没有!
|
18
lcdtyph 2023-12-23 18:27:40 +08:00 via iPhone
@FaiChou
那可能是 wan 的 ipv6 pd 没有续租,导致 odhcp 不在 lan 侧广播 ra 了 |
19
linuxyz 2023-12-23 20:27:08 +08:00
`ip neigh` 看一下,如果不是 WAN 的 PD/DHCPv6 到期了,就是 neigh 失效了
|
20
FaiChou OP @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) ` 对我更陌生。所以我上面的分析是正确的吧?没问题的话,我下次遇到再按照这个逻辑查找问题。 |
21
keegan 2023-12-23 23:38:07 +08:00
试试这个?打开通告,感觉可能有用
``` echo "net.ipv6.conf.default.accept_ra=2" >> /etc/sysctl.conf echo "net.ipv6.conf.all.accept_ra=2" >> /etc/sysctl.conf ``` |
22
ac169 2023-12-24 08:30:13 +08:00
@FaiChou 你说的仅仅是 DHCPv6 流程, SLAAC 不是这样的!
SLAAC 是系统根据 RA 消息中的前缀 和 各种 lefttime 参数 自己生成和维护地址(包括阴私扩展的临时地址), 生成之后地址是否可用 (比如: 是否重复) 路由是否可用等维护都是通过一定周期不断的收发 icmpv6 包来维护的. 当最大 lefttime 快到期了,又没有收到新 ra 消息,现在地址就会失效 (直接变没) 这个操作都是系统自己完成的 当重新拨号或者是上游更新了网关(或者说 slaac 服务端)会发送一个上一个前缀和 各种 lefttime 为零 RA 消息, 系统收到后就会让旧地址失效. 另外,在 3# 中提到 uci get dhcp.lan.ra 这里说的并不严谨, 因为他不代表 dhcpv6 是关闭的,个人建议只使用 slaac 模式禁用掉 dhcpv6 ( uci get dhcp.lan.dhcpv6 值是否为空或 disable) 这个就是我的经验了,后续的只能你自己研究,实际环境还是有差别. |
23
xpn282 2023-12-24 16:43:45 +08:00
@sangmingming
你给设备开了 v6 ,你就要用代理工具接管 v6 ,不然代理工具只处理 v4 而不处理 v6 ,那你翻墙绝对会出问题 另:旁路由(旁网关)好像不会处理设备的 v6 ,因为设备只是把 v4 的网关指向旁路由而已,v6 好像没过旁,所以开了旁,设备又使用 v6 的话,大概率翻墙有问题 |
24
sangmingming 2023-12-25 10:11:03 +08:00
@xpn282 现在就是旁路由,还没找到怎么设置 v6 的网关。
|
25
pagxir 2023-12-25 15:47:32 +08:00
@sangmingming 修改一下旁路由的 radvd.conf 配置,将路由的 priority 修改成 high 。不过如果你主路由广播 ipv6 的 DNS 估计解析还会有问题,不过如果是 android 机器的话,可以在你旁路由打开 DOT 支持,并将手机的 private DNS 设置成自动。 至于 ios ,怎么打开自动 DOT ,就不清楚了,因为我没有 ios 设备。
|
26
xdzhang 2023-12-26 11:13:41 +08:00
v6 开了之后不要分配 v6 的 dns 给局域网的设备,或者把 v6 的解析劫持到你自己用来防污染的 dns 上,要不大概率代理不了,直接给你返回 AAAA ,到时候 v4 的代理用不了的。
|
27
veSir 2023-12-27 03:32:12 +08:00
之前也有同样问题, 更新 OpenWrt 版本后已解决.
|
28
Franzx 363 天前 via Android
同样的问题,同时观察到 WAN6 在正常的时候是有一个/ 128 的 ipv6 和一个/ 60 的 ipv6-PD ,LAN 口会使用这个 PD 给下游设备。当运营商玄学更换 ipv6 (或者手动重启光猫)后 WAN6 口新获取到的是/ 64 的 ipv6 ,同时旧的/ 128 和/ 60PD 也还在,结果就是下游设备 ipv6 全部失效断网。WAN6 口新获取 ipv6 时甚至获取到的 ipv6 的 DNS 都会和旧的一起重复显示,哪怕新旧 DNS 是一样的。
|
29
shomaru 359 天前
接口-全局-IPv6 ULA 前缀 删掉
|
30
yyysuo 358 天前 1
这题目我会啊,最近刚刚解决的,楼主的猜想是正确的,就是租期的问题,是临时 ipv6 地址租期的问题。解决的办法就是用 SLAAC ,不用 dhcpv6 ,同时取消 ipv6 格式的 dns 的下发,解决步骤如下:
1:lan 口 dhcp 服务器设置中,路由通告服务-服务器模式,dhcpv6-已禁用,NDP 代理-已禁用,取消通告的 dns 服务器。 2:删除 ipv6 ula 前缀。 3:删除所有固定 IP 地址分配的租期(如果之前有指定),dhcp 中的 ipv4 租期默认为 30m 4:修改/etc/config/dhcp 文件,在 lan 部分,添加或者修改如下项目,自己删除#及注释 option ra_dns '0' #不下发 ipv6 格式 dns option ra_useleasetime '1' #ipv6 地址使用 ipv4 的租期 option preferred_lifetime '30m' #preferred lifetime30 分钟 option leasetime '30m' #租期 30 分钟 完整的 lan 参考: config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option force '1' option ra 'server' option ra_dns '0' list dhcp_option '6,10.10.10.1' option ra_default '1' option ra_useleasetime '1' option preferred_lifetime '30m' option leasetime '30m' |
32
yyysuo 358 天前
再补充一下,如果不改路由配置,连接不上的时候,重启一下 ap 或者断开重连一下 wifi ,一般就能连接了。我猜想你用的 ipv6 源是网上流行的那个吧,高峰时候,有时候也是卡。
|
33
yjzll 254 天前
ip6tables -I zone_lan_input -p udp --sport 546 --dport 547 -j ACCEPT
解决 DHCPv6 续约的 icmpv6 通讯,lan 侧到路由器本身。此消息经过中继后再传到上级光猫。 过程:Solicit---Advertise---Request---Reply PC 端口 546 ,发送请求 Solicit 至,路由器本身[ff02::1:2]:547 端口 路由器本身 546 端口,中继到,光猫 547 端口 光猫 547 端口,回应一个 Advertise 给,路由器 546 端口 路由器本身 547 端口,中继到,PC 端口 546 PC 端口 546 ,回应一个 Request 给路由器 547 端口 路由器本身 546 端口,中继到,光猫 547 端口 光猫 547 端口,回应一个 Reply 给,路由器 546 端口结束。 |