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

OpenWrt 如何修改 IPv6 的默认 router

  •  
  •   skies457 · 2022-09-10 10:45:10 +08:00 · 1120 次点击
    这是一个创建于 566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 呢?

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

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

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

    如果能完美实现是最好。

    v2ex.com/t/879118 , 附言中的图片,反映的是,代理通过 v4 + v6 ,双链路。
    Senorsen
        15
    Senorsen  
       2022-09-10 19:39:30 +08:00
    @skies457 我理解你想要的,是不是让旁路由分配 IPv6 ,主路由不分配?所以是不是让主路由不给除旁路由外的其他设备分配 IPv6 ,旁路由为所有设备分配 IPv6 就可以实现目标?
    connorzone
        16
    connorzone  
       2022-09-11 14:20:27 +08:00   ❤️ 1
    @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
        17
    Kunmona  
       2022-09-12 00:23:03 +08:00 via Android   ❤️ 1
    这里可以利用 DHCPv6 PD 去一级一级的对前缀分配。
    保留下级路由的 wan-lan 区域,一级路由 lan 设置成大于或等于 60 前缀,二级路由的 wan 请求大于上级 lan 的前缀长度,后面路由器依次类推到 64 前缀分配完,这样就可以做到报文一级一级的转发,同时做到地址的自动配置
    参考 https://zhuanlan.zhihu.com/p/362151770
    gyorou
        18
    gyorou  
       2022-09-12 14:10:32 +08:00
    修改 openwrt 的防火墙规则把 gateway 改成旁路由的 link-local address 不行吗。。。
    skies457
        19
    skies457  
    OP
       2022-09-12 17:55:33 +08:00
    最后还是用 @Jirajine 提的方法,通过 cron 自动从主路由更新 PD ,感觉比较简单省事。脚本放在这个 gist 里了: https://gist.github.com/w1ndy/f037efb028e8b7b3a934d334a3da9455
    Jirajine
        20
    Jirajine  
       2022-09-12 18:10:48 +08:00   ❤️ 1
    @skies457 看了一眼你的脚本,openwrt 可以通过 `ifatatus wan_6`直接获取接口的前缀信息,非 openwrt 可以用 `ip --json addr`然后 jq 就行了,这样就用不着 grep 和 sed 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5824 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 06:15 · PVG 14:15 · LAX 23:15 · JFK 02:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.