OpenWrt 如何修改 IPv6 的默认 router

2022-09-10 10:45:10 +08:00
 skies457

OpenWrt 作为主路由拨号可以从 ISP 获得了 /60 的 IPv6 PD ,但是如果启用了 OpenWrt 的 DHCPv6 ,分配出来的 IPv6 带的默认 router 是 OpenWrt 自己的 link-local 地址。如果要实现旁路由 IPv6 科学上网的话,需要手动把客户端的 router 修改为旁路由的 link-local 地址。

目前一个临时的解决方案是关闭 OpenWrt 的 RA 和 DHCPv6 ,改为使用旁路由的 radvd 来分配 IPv6 。这样虽然可以让旁路由作为客户端的 router ,但是每次 OpenWrt 重新拨号,获得的 IPv6 PD 都会发生变化,需要手动修改旁路由的静态 IPv6 地址和 radvd 的配置。

想问一下有没有办法让 OpenWrt 分配的 IPv6 指向旁路由作为默认 router 呢?

1587 次点击
所在节点    宽带症候群
20 条回复
cwbsw
2022-09-10 11:09:51 +08:00
主路由和旁路由各自新建一个 VLAN 接口。
Jirajine
2022-09-10 11:53:19 +08:00
做不到。旁路由本来就是 trick ,v6 相关标准和实现都没有支持。
当然也不是没办法,可以在旁路由上写脚本自动获取前缀信息(通过无密码的 ssh 或 http API )然后重启服务。
cloudsigma2022
2022-09-10 12:45:57 +08:00
op 拨号,只开启 RA , 关闭 dhcpv6 ,下联 旁路由 或其他设备会自动获取 v6.
cloudsigma2022
2022-09-10 12:47:57 +08:00
或者将 旁路路由 ra lifetime 设短一点。1 分钟。
yaott2020
2022-09-10 13:55:18 +08:00
试试 iptables fwmark 策略路由
Senorsen
2022-09-10 14:06:06 +08:00
有个 Workaround ,可以让主路由只给旁路由 IPv6 地址,不给其他客户端分配:

主路由开 RA 和 DHCPv6 但关闭 SLAAC ,然后防火墙建两条规则:允许旁路由 MAC 入站 IPv6 UDP 546 547 ,拒绝所有设备入站 IPv6 UDP 546 547 。
Senorsen
2022-09-10 14:07:52 +08:00
我现在是用上边的方法,让 PS5 等不支持自主关闭 IPv6 的设备不被分配 IPv6 地址(因为似乎其对国内的 IPv6 水土不服,会访问不了任何联机服务)
skies457
2022-09-10 19:03:07 +08:00
@cwbsw 具体怎么操作呢
skies457
2022-09-10 19:04:33 +08:00
@cloudsigma2022 IPv6 地址获取倒不是难事,主要是获取到的 router 是 OpenWrt ,导致 IPv6 流量不会路由经过旁路由
skies457
2022-09-10 19:07:48 +08:00
@Senorsen 这样相当于局域网其他设备就没有 IPv6 了?
skies457
2022-09-10 19:08:48 +08:00
@yaott2020 这个和 fwmark 貌似没啥关系....
cloudsigma2022
2022-09-10 19:09:52 +08:00
@skies457

其实,可以让国内支持 v6 的流量走 v6 。国外隧道代理,走 v4 + v6 。dnsmasq 里 用 address=/google.com/:: 屏蔽 v6 解析
skies457
2022-09-10 19:18:40 +08:00
@cloudsigma2022 是的,不过还是想在旁路由上实现 clash redir-host 模式下自动分流,绕过国内的 IPv6 段
cloudsigma2022
2022-09-10 19:27:13 +08:00
@skies457

如果能完美实现是最好。

v2ex.com/t/879118 , 附言中的图片,反映的是,代理通过 v4 + v6 ,双链路。
Senorsen
2022-09-10 19:39:30 +08:00
@skies457 我理解你想要的,是不是让旁路由分配 IPv6 ,主路由不分配?所以是不是让主路由不给除旁路由外的其他设备分配 IPv6 ,旁路由为所有设备分配 IPv6 就可以实现目标?
connorzone
2022-09-11 14:20:27 +08:00
@skies457 既然两台设备都是 OP ,为什么不试试单臀路由?
IPv6 的默认路由是没办法通过 DHCP 选项广播的,运行 ra 的接口自动成为默认路由,或者参考下 @ihipophttps://www.v2ex.com/t/818661 )提到的 radvd 单播方案:odhcpd 不能指定路由优先级,只能关闭主路由的 ra ,手动指定旁路由的默认路由为主路由的链路地址,开启旁路由的 ra 使其成为默认路由。不过如果主路由是桥接到光猫,似乎 ra 应该在光猫管理界面去关?
或者像楼上说的对 IPv6 用策略路由,可参考 https://superuser.com/questions/1107837/proper-location-for-transparent-squid-proxy-gateway-with-caching ,个人经验,这个效率不高,凑和用,最近 edge 浏览器优先 IPv6 确实很烦,以前 nat6 还能保证双栈通过系统前缀策略优先 IPv4 ,纯 ipv6 站点才会走 IPv6 ,现在直接不成了。
Kunmona
2022-09-12 00:23:03 +08:00
这里可以利用 DHCPv6 PD 去一级一级的对前缀分配。
保留下级路由的 wan-lan 区域,一级路由 lan 设置成大于或等于 60 前缀,二级路由的 wan 请求大于上级 lan 的前缀长度,后面路由器依次类推到 64 前缀分配完,这样就可以做到报文一级一级的转发,同时做到地址的自动配置
参考 https://zhuanlan.zhihu.com/p/362151770
gyorou
2022-09-12 14:10:32 +08:00
修改 openwrt 的防火墙规则把 gateway 改成旁路由的 link-local address 不行吗。。。
skies457
2022-09-12 17:55:33 +08:00
最后还是用 @Jirajine 提的方法,通过 cron 自动从主路由更新 PD ,感觉比较简单省事。脚本放在这个 gist 里了: https://gist.github.com/w1ndy/f037efb028e8b7b3a934d334a3da9455
Jirajine
2022-09-12 18:10:48 +08:00
@skies457 看了一眼你的脚本,openwrt 可以通过 `ifatatus wan_6`直接获取接口的前缀信息,非 openwrt 可以用 `ip --json addr`然后 jq 就行了,这样就用不着 grep 和 sed 。

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

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

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

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

© 2021 V2EX