想用指定 gre1 (绑定 v4 和 v6 )接口送出流量:ping6 -I gre1 ipv6.site
但只有 ipv4 通,ipv6 提示 Network is unreachable (无法匹配指定路由表),不知道对路由规则理解哪里出了问题
规则如下:
~ # ip -6 address add 2001::2/28 dev gre1 #设置 gre1 ip = 2001::2
~ # ip -6 rule add from 2001::/28 table 0x66 #将源 ip 为 2001::/28 的流量转至 0x66 表处理
~ # ip -6 route add default via 2001::1 dev gre1 table 0x66 #0x66 表网关设置为 2001::1
~ # ip -6 route get 2a00:1450:4001:82f::200e dev gre1 #测试:通过 gre1 匹配,匹配不到路由
RTNETLINK answers: Network is unreachable
~ # ip -6 route get 2a00:1450:4001:82f::200e from 2001::2 #测试:通过源 IP 匹配,匹配到路由
2a00:1450:4001:82f::200e from 2001::2 via 2001::1 dev gre1 table 102 src 2001::2 metric 1024 pref medium
又试了:
~ # ip -6 rule add from all table 0x66 #所有源 ip 流量都转至 0x66 表
~ # ip -6 route get 2a00:1450:4001:82f::200e dev gre1 #测试:通过 gre1 匹配,匹配到路由,但源 ip 不是 2001::2
2a00:1450:4001:82f::200e from :: via 2001::1 dev gre1 table 102 src 2001::2 metric 1024 pref medium
为什仅仅指定 gre1 网卡,不会使用网卡的 2001::2 作为发出 ip,被匹配进 0x66 表?
IPv4 相同配置却能匹配:
~ # ip address add 10.0.0.2/24 dev gre1
~ # ip rule add from 10.0.0.0/24 table 0x44
~ # ip route add default via 10.0.0.1 dev gre1 table 0x44
~ # ip route get 142.250.186.174 dev gre1
142.250.186.174 dev gre1 src 10.0.0.2 uid 0
查了man手册,解决方法是应该直接根据网卡匹配,而非根据源IP匹配。
~ # ip -6 rule add oif wg0 table 0x66
~ # ip -6 route get 2a00:1450:4001:82f::200e oif wg0
2a00:1450:4001:82f::200e from :: via 2001::1 dev wg0 table 102 src 2001::2 metric 1024 pref medium
但还是不清楚为什么ipv4跟ipv6相同规则,结果却不同。
1
LGA1150 2021-05-01 02:33:27 +08:00 via Android
2001::/32 是 Teredo 保留地址,优先级会比 IPv4 低
|