ROS主路由分流:国内IP直连,国外走旁路由
首先咱们需要国内 IP 地址的列表,然后将其导入到 ROS 中。使用下面的 bash 命令可以简单地生成一份 rsc 文件供导入。
wget -qO- "https://raw.githubusercontent.com/mayaxcn/china-ip-list/master/chnroute.txt" | awk 'NF {printf "/ip firewall address-list add address=%s list=china-ip\n", $1}' > "china-ip-$(date +%Y-%m-%d).rsc"
由于在列表之外的 IP 是转发到旁路由进行处理的,遂需要将内网 IP 段加入到列表中。此外,下次导入时需要删除之前导入的 IP 列表,于是我们可以得到下面的 bash 脚本:
#!/bin/bash
# China IP list url
cn_cidr_url="https://raw.githubusercontent.com/mayaxcn/china-ip-list/master/chnroute.txt"
# ROS script name
cn_cidr_rsc="china-ip-$(date +%Y-%m-%d).rsc"
# ROS firewall address list name
address_list="china-ip"
# Init script
cat > $cn_cidr_rsc << EOF
# Remove old address list
/ip firewall address-list
:foreach i in=[ find list=$address_list ] do={ remove number=\$i }
# Add new address list
# # Private addresses
# # Class A private
add list=$address_list address=10.0.0.0/8
add list=$address_list address=127.0.0.0/8
add list=$address_list address=0.0.0.0/8
# # Class B private
add list=$address_list address=172.16.0.0/12
add list=$address_list address=169.254.0.0/16
# # Class C private
add list=$address_list address=192.168.0.0/16
# # China addresses list
EOF
curl -fsSL $cn_cidr_url | sed "s#^#add list=$address_list address=#g" >> $cn_cidr_rsc
这段脚本来自这里,感谢作者的分享。我仅作了一点点修改。
生成完文件后,通过 winbox 或者网页端上传。然后使用 /import china-ip-YYYY-mm-dd.rsc 命令导入。
创建 Route 规则
Routing -> Tables
新建一个路由表,名称随意,比如 OpenWrt,勾选 FIB。
IP -> Routes
新建一个 Route 规则,Gateway 填写旁路由的地址,需要与 ROS 在同一个网段,如 192.168.88.2,Des.Address 默认 0.0.0.0/0,Routing Table 选择 OpenWrt。
创建防火墙规则
IP -> Firewall -> Mangle
新建一个 Mangle 规则,General 选项卡中,Chain 选择 prerouting一起看,Dst. Address List 选择 非 china-ip,Action 选项卡中,Action 选择 mark routing,New Routing Mark 选择 OpenWrt,Passthrough需要勾选。
创建一个新的 Mangle 规则,General 选项卡中, Chain 选择 prerouting,Src. Address 填写旁路由的地址,例如 192.168.88.2,Action 选项卡中,Action 选择 accept。
配置旁路由
接口修改 lan 的设备,bridge 改为直接 eth0 接口
删除与 lan 无关的所有防火墙规则,新建一个 NAT 规则。源地址 192.168.3.1一起看博客,出站区域为 eth0 操作为 SNAT,重写 IP 地址为旁路由的地址,如 192.168.88.2。
本文转载自互联网,如有侵权,联系删除

