openwrt 路由器有多个来源 IPv6 prefix 下,非默认路由表如何分发?

2020-02-29 19:58:35 +08:00
 s82kd92l
现在路由器分发了多个 prefix:
1. 运营商的 240e::
2. 纯局域网的 fd00::
3. 6in4 的 2001::
现在路由器下面每个设备都至少有三个 v6 地址,我的问题是: 有没有办法在路由器(openwrt)上设置一个路由表并分发到下面所有的设备,使得所有设备都做到根据目标网段分流的效果呢?

目前我没想到如何分发路由表,只能在路由器上做 IPV6 SNAT,但这样路由器开销会更大,而且 IPv6 用 NAT 感觉很奇怪。
3518 次点击
所在节点    宽带症候群
17 条回复
cwbsw
2020-02-29 21:28:42 +08:00
要么像 v4 一样搞 NAT 做策略路由,要么几个前缀都宣告默认路由,用哪个地址由客户端决定。
raysonx
2020-02-29 21:36:51 +08:00
我来补充一些知识,虽然没办法完全解决楼主的问题,但能更进一步。
IPv6 下的路由相比 IPv4 是作了加强的,叫做 source-specific routing。在 IPv4 下,路由选择时只看目标地址,按最长匹配规则选路,而 IPv6 下可以对源地址加以限定。

楼主的“纯局域网的 fd00::”前缀应该不在公网使用。假设访问 fc00::/7 这个网段时使用 fd00::/64 前缀,可以设置如下的路由:

ip -6 route add fc00::/7 from fd00::/64 via 网关地址 dev 网卡

其他的也可类似。
zro
2020-02-29 22:48:56 +08:00
fd00 的没必要用吧?

6in4 的也有干扰,用起来也不爽。。

另外好奇下,OpenWRT 如果有多个 v6 网关,traceroute 会直接出错,也 Ping 不通,还是要另外设置一下哪才行?
elfive
2020-03-01 07:40:39 +08:00
同问题,一直不知道怎么解决,只能先把不常用的 IPv6-PD 先屏蔽了……

https://www.v2ex.com/t/645551
txydhr
2020-03-01 11:46:24 +08:00
@zro 有必要呀,你内网有 nas,服务器之类的不可能改个前缀就改个 dns。
zro
2020-03-01 12:25:36 +08:00
@txydhr #5 DNS 直接用内网 v4 不行?我 v6 是不设 DNS 的,同样能返回 AAAA 记录的。。。
cwbsw
2020-03-01 12:32:12 +08:00
@zro
是不是有 mwan3 之类的?
OpenWrt 默认设置就能支持多个 v6 默认网关,出站入站都没问题。
txydhr
2020-03-01 12:32:50 +08:00
@zro v6 更高级🤓
cwbsw
2020-03-01 12:34:28 +08:00
@raysonx
Windows 有办法手动指定源地址优先级吗?
zro
2020-03-01 13:27:17 +08:00
@cwbsw #7 没装呢,可能我调了 metric,将 ISP 原本是 512 的设成 1024,将 6in4 原本是 1024 的设成 256,然后就。。。

现在都想不出,ISP v6 只走国内,其余走 6in4 的应该怎么设,又不想去弄 NAT6(因为我只要路由器这样走)~~
s82kd92l
2020-03-01 15:20:07 +08:00
@cwbsw @zro Linux client 下面好像可以手动用 ip addrlabel 来选择源地址,windows 不知道。
cwbsw
2020-03-01 16:07:13 +08:00
@s82kd92l
试了下确实有效。
Windows 可以用 netsh int ipv6 set prefixpolicy 来设置。
cwbsw
2020-03-01 16:14:05 +08:00
@zro
设置 6in4 隧道的前缀的 label 等于::/0 的 label,然后把 ISP 的前缀新建个 label,要走 ISP 线路的前缀都设置成相同的 lable,应该就可以了。
zro
2020-03-02 13:33:44 +08:00
@cwbsw #13 好像不是太成功

我的“ip addrlabel list”如下(带 [] 的是我亲自加上的):

[prefix 2409:666::/32 label 99] ------ ISP
prefix ::1/128 label 0
prefix ::/96 label 3
prefix ::ffff:0.0.0.0/96 label 4
[prefix 2001:4860::/32 label 99] ---- Google DNS 走 ISP
[prefix 2001:999::/32 label 1] ------- 6in4
prefix 2001::/32 label 6
prefix 2001:10::/28 label 7
prefix 3ffe::/16 label 12
prefix 2002::/16 label 2
prefix fec0::/10 label 11
prefix fc00::/7 label 5
prefix ::/0 label 1

但在 traceroute 2001:4860:4860::8888,第一跳还是走 6in4 网关,而 traceroute 2620:fe::9 就走 ISP 网关~~

也试过 [prefix 2001:4860:4860::8888/128 label 99] ,仍是走 6in4 的 label 1~~
cwbsw
2020-03-02 15:41:46 +08:00
@zro
看一下 RFC3484,是不是在匹配标签之前符合了其他的规则。
https://blog.csdn.net/dog250/article/details/87815123
zro
2020-03-02 19:32:26 +08:00
@cwbsw #15 排查一圈,也没发现有动过啥,规则也没设过其他的,重装 ip-full 也没变化。。

试过将 6in4 连接断开,终于都走 ISP 的网关了,然而重新连上 6in4,好吧,又挤去 6in4 网关那边了~~
现在换了公网 IP,但 6in4 设置仍用旧 IP,6in4 虽然没断,但访问不了的,仍是如此。。😓😓
zro
2020-03-02 20:00:47 +08:00
@zro #16 哈。。。应该是我忽略了某个细节~~正在测试下是不是搞定了~~~😂😂

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

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

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

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

© 2021 V2EX