nkcfc
2022-05-08 10:39:10 +08:00
以下 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 的那个条目。