前情提要
平时玩PT,我希望我的PT下载机访问网络时不经过代理,这样我的IPv4和IPv6都处于能连通的状态下,能更好的刷上传量。
我在家里通过OSPF的方式来宣告海外的路由,对于IPv4的设备,我在Routing - Rules
中配置指定特定IPv4地址的设备走特定的路由表就可以实现。
而对于IPv6来说,IPv6的地址并不是由路由器分配管理的,我的理解是客户端收到IPv6 Prefix后,自己生成完整的IPv6地址,所以没办法用Routing - Rules
的配置方法
配置IPv6分流
配置IPv6的Routing Mark
在Routing - Table
里添加排除路由表,这里我将新的路由表命名为bypass_ospf_v6
可以用命令配置
1 | [admin@MikroTik] > routing/table/add name="bypass_ospf_v6" fib |
配置IPv6的防火墙规则
既然没办法从地址的信息来匹配源设备,我觉得可以通过源MAC地址来判断设备,一般来说,除非开启了随机MAC地址,或有手动修改,内网设备MAC地址应该是固定不变的,我可以通过MAC地址的信息来判断哪些设备不需要通过代理。
那我就需要配置防火墙mangle规则,位于IPv6 - Firewall - Managle
配置命令如下,记得将xxxxx
替换为你需要的源目标地址
1 | ipv6/firewall/mangle/add chain=prerouting src-mac-address=xxxxx action=mark-routing new-routing-mark="bypass_ospf_v6" passthrough=no |
配置额外的Routing Rule
经过了上面的配置,理论上指定的MAC设备访问IPv6网络的时候,不会在经过OSPF宣告的main表,用traceroute6
命令时,应该也能看到这条防火墙规则有流量变化,但你可能仍然发现指定MAC设备仍然没有按预期运行,总结来说,就是仍然匹配到了main表,在网上查到的解决方案是,添加lookup_only_in_table
规则,命令如下
1 | routing/rule/add routing-mark=bypass_ospf_v6 action=lookup-only-in-table table=bypass_ospf_v6 |
意思就是对于有bypass_ospf_v6
标志的,只在bypass_ospf_v6的路由表中查询路由。
添加bypass_ospf_v6默认路由
1 | ipv6/route/add dst-address=::/0 gateway=pppoe-out1 routing-table=bypass_ospf_v6 |
经过以上步骤的配置,指定设备的IPv6应该就只走bypass_ospf_v6
表而不走main表了。