title | date | categories | tags | |||
---|---|---|---|---|---|---|
旁路由科学上网 |
2021-06-16 14:52:30 -0700 |
Tech |
|
- RouterOS主路由
- RaspBerry Pi旁路由
- 可出国链路(V2ray)
参考这里对旁路由进行设置。 V2ray的配置基本没改什么,就是把域名和id换成自己的。
iptable
的规则我只设置了以下这部分
# 设置策略路由
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
# 代理局域网设备
iptables -t mangle -N V2RAY
iptables -t mangle -A V2RAY -d 127.0.0.1/32 -j RETURN
iptables -t mangle -A V2RAY -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A V2RAY -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p tcp -j RETURN # 直连局域网,避免 V2Ray 无法启动时无法连网关的 SSH,如果你配置的是其他网段(如 10.x.x.x 等),则修改成自己的
iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p udp ! --dport 53 -j RETURN # 直连局域网,53 端口除外(因为要使用 V2Ray 的 DNS)
iptables -t mangle -A V2RAY -j RETURN -m mark --mark 0xff # 直连 SO_MARK 为 0xff 的流量(0xff 是 16 进制数,数值上等同与上面V2Ray 配置的 255),此规则目的是解决v2ray占用大量CPU(https://github.com/v2ray/v2ray-core/issues/2621)
iptables -t mangle -A V2RAY -p udp -j TPROXY --on-ip 127.0.0.1 --on-port 12345 --tproxy-mark 1 # 给 UDP 打标记 1,转发至 12345 端口
iptables -t mangle -A V2RAY -p tcp -j TPROXY --on-ip 127.0.0.1 --on-port 12345 --tproxy-mark 1 # 给 TCP 打标记 1,转发至 12345 端口
iptables -t mangle -A PREROUTING -j V2RAY # 应用规则
另外加了一条
iptables -t nat -I POSTROUTING -j MASQUERADE
在IP->Routers
里添加一个Route,Gateway设置成旁路由的IP地址,Distance
设置为1,Routing Mark
我这里设置为pi
(就是个名字,记住就好),其他不变。
如果你的Router List里有也有一个
Distance
为1的Route(一般是PPPOE),请把它设置为2,否则会冲突!!
主路由负责数据包的分流工作,国外的包转给旁路由处理,国内的包直接处理。 所以首先得让路由器知道哪些IP需要转发,哪些不需要。 执行以下脚本就能获取到国内IP地址的列表
curl -s https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt |sed -e 's/^/add address=/g' -e 's/$/ list=CNIP/g'|sed -e $'1i\\\n/ip firewall address-list' -e $'1i\\\nremove [/ip firewall address-list find list=CNIP]' -e $'1i\\\nadd address=10.0.0.0/8 list=CNIP comment=private-network' -e $'1i\\\nadd address=172.16.0.0/12 list=CNIP comment=private-network' -e $'1i\\\nadd address=192.168.0.0/16 list=CNIP comment=private-network'>cnip.rsc
然后我们把它上传到RouterOS中,在Console执行
import cnip.rsc
打开IP->Firewall->Address Lists
会发现防火墙列表里会多了CNIP的条目。
此外,由于我的V2ray使用了ws,还得添加一条Address Lists,Name一栏填写VPN,Address一栏填入你的域名,方便我们将发送到这个域名的请求直接放行,而不是转发到旁路由,因为那样就循环了。
然后点开IP->Firewall->Mangle
,我们来添加几条规则。
注意域名转发规则要在其他两条规则之前!(因为规则的优先级是按先后顺序的,域名的IP肯定在国外,会被转到旁路由从而引起循环)