OpenWrt 如何修改 IPv6 的默认 router - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skies457
V2EX    宽带症候群

OpenWrt 如何修改 IPv6 的默认 router

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

    OpenWrt 作为主路由拨号可以从 ISP 获得了 /60 的 IPv6 PD ,但是如果启用了 OpenWrt 的 DHCPv6 ,分配出来的 IPv6 带的默认 router 是 OpenWrt 自己的 link-local 地址。如果要实现旁路由 IPv6 科学上网的话,需要手动把客户端的 routr 修改为旁路由的 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 的接口自动成为默认路由,或者参考下 @ihipopt/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     Solana     2980 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:45 PVG 21:45 LAX 06:45 JFK 09:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86