Ubnt USG 如何给旁路由派发 ipv6 前缀呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nkcfc

Ubnt USG 如何给旁路由派发 ipv6 前缀呢?

  •  
  •   nkcfc 2022 年 5 月 6 日 2779 次点击
    这是一个创建于 1448 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的需求是这样的。USG 拨号作主路由,可以获得 /60 的 ipv6 前缀,因此可以继续下发给子网。如果用一个 Openwrt 作主路由,另外一个 Openwrt 是可以获取到 /62 /63 这样的 ipv6 前缀的,用到了 DHCPv6 。不幸的是,Ubnt USG 的 ipv6 貌似不支持 DHCPv6 server 。大家有什么办法吗? 此外,USG 下发地址用的是 radvd ,可以手动强行修改它的配置,使得它只给指定设备下发 v6 地址。

    第 1 条附言    2022 年 5 月 6 日
    更正,USG 支持 DHCPv6 ,前提是 LAN 接口手动输入地址,使用 fd00::/64 等内网地址,可以实现 nat6 。但不能解决我的问题。
    8 条回复    2022-05-08 10:44:19 +08:00
    Buges
        1
    Buges  
       2022 年 5 月 6 日 via Android
    除非你用的是 dhcpv6 only ,不然怎么可能只给指定设备分配 v6 地址。slaac 是“广播”,且是无状态的。
    如果你要自动划分子网,dhcp pd 可以做到。当然这指的是不同网络,“旁路由”这种 trick 跟 ipv6 根本没法共存。
    huangya
        2
    huangya  
       2022 年 5 月 6 日 via iPhone
    是 ipv6 在某些情况下不好用吗?所以想给指定设备下发?
    nkcfc
        3
    nkcfc  
    OP
       2022 年 5 月 7 日 via Android
    @huangya 论坛中其他人说过 radvd 可以单播,我没试过,不过这不是我要解决的主要问题。
    我的真实目的是 v6 下上科学网。用 usg 会把自己广播成 v6 网关,根据现在查到的东西 radvd 应该直接关闭,想办法把 dhcpv6 server 跑起来,只下发前缀,让二级路由派发 v6 网关。
    nkcfc
        4
    nkcfc  
    OP
       2022 年 5 月 7 日   1
    @Buges radvd 确定可以单播,见手册 https://linux.die.net/man/5/radvd.conf 。Usg 下直接修改 radvd.conf 亲测可用,只要加上 clients { fe80::8122:28ff:ff97:adf1; }; 就变成了只给单个地址分配地址和网关。这里写的是旁路由 Openwrt 的地址,查看网络状态确定 Openwrt 获得了正确的 v6 地址和网关,然后在 LAN 的 DHCP 那里打开路由通告服务的服务器模式。再然后,其他客户端顺利获得了 v6 地址,网关为 Openwrt 。
    geekvcn
        5
    geekvcn  
       2022 年 5 月 8 日
    @nkcfc 标记一下
    Buges
        6
    Buges  
       2022 年 5 月 8 日
    好吧,才知道 ra 居然可以单播,可能我之前踩坑的时候 rfc 没细看。
    但即使这样也没法搞旁路由的,ipv4 可以设置 dhcp 选项来指定特定网关,而 ipv6 的 ra 接收者会自动将 ra 的源地址设为网关,无法修改,除非完全手动管理地址。如果你用旁路由跑 ra 的话,又无法适配动态前缀。
    我建议用 bridge firewall 的方式配置双栈透明代理,代理服务器通过二层劫持的方式操作流量,而不是畸形的旁路由。Linux 下 ebtables BROUTE 或 nftables 中 对以太网地址进行 dnat 都可以实现。
    nkcfc
        7
    nkcfc  
    OP
       2022 年 5 月 8 日
    以下 OP 代表旁路由 openwrt 。

    "但即使这样也没法搞旁路由的,ipv4 可以设置 dhcp 选项来指定特定网关,而 ipv6 的 ra 接收者会自动将 ra 的源地址设为网关,无法修改,除非完全手动管理地址。如果你用旁路由跑 ra 的话,又无法适配动态前缀。"

    不是这样的,OP 分发 ra 不需要 PD ,也就是说得不到子网路由也可以的,我整个的过程都没手动输入任何前缀,它分发的 RA 前缀是从自己获得的 v6 地址里截取的。



    总结一下就是这样,USG 的 radvd 分发 v6 地址和网关给 OP ,此时 OP 可以正常访问 v6 网络了。注意这里,OP 是单独设定的一个 DHCPv6 的接口(物理接口和 LAN 一样)。 然后去 LAN 的 DHCP 下开启路由通告服务。此时,局域网其他主机可以也可以获得 v6 地址和网关了(注意 v6 网关是 OP 的不是 USG 的)。不过局域网其他主机仍无法访问外网 v6 ,下一步在 OP 上开启 ipv6 转发,命令如下:
    ip6tables -t nat -A POSTROUTING -j MASQUERADE 。

    ipv6 数据流向是局域网主机 -> OP -> USG_LAN -> USG_WAN->外网。由于使用了 NAT ,所以测试自己 v6 时地址是 OP 的。 正因为如此,这真的叫 ipv6 旁路由了,如果获得了子网路由,那就是规范的 ipv6 路由了。

    下一个问题就是,反过来呢? 外网能直接访问局域网内主机的 v6 地址吗? 可以访问 OP ,但是外网访问其他主机不通,如果什么都不改,直接 USG 运行 radvd 分发所有地址是没问题。在 USG 上执行 ip6tables -t nat -A POSTROUTING -j MASQUERADE
    后可以。但是仍不完美,内网主机上查看连入的地址是 USG 的。需要继续探索 USG 的内部逻辑。

    其余的工作是把 USG 的手动修改持久化,这个是可以做到,因为一般 v6 的模式就固定的,一般也不需要在 ubnt 的网络控制台 ui 里修改了。还要注意的是 USG 上的 radvd 最好删除分配 DNS 的那个条目。
    nkcfc
        8
    nkcfc  
    OP
       2022 年 5 月 8 日
    忘了说最早的动机了,为了搞科研。在旁路由上运行小 cat ,………………内外分流,然后 test-ipv6.com 会看到外面的 v6 ,访问国内的 v6 还是正常的。 暂时终结,欢迎有同学去复现我的方案,写一个完整的教程,我不是学计算机的,写的比较乱,还请理解。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5420 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 06:44 PVG 14:44 LAX 23:44 JFK 02:44
    Do have faith in what you're doing.
    ubao msn 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