警告:这次纯粹是闲得慌🤣
这次改造的目标是原Openwrt更改为(伪)旁路由,主路由这次使用RouterOS系统。
国内国外分流会在RouterOS上执行一次,然后国内流量直接由RouterOS处理和发送,国外流量以及DNS请求会被标记网关会被重定向到Openwrt上.
不过Openwrt这次不会设置为网关,不然所有流量都走openwrt那不就和原来一样了?只有被标记才会走Openwrt.
听了可能比较迷糊,我重新解释一下:
首先是旁路由的第一个功能:DNS服务器,所有的DNS都会被路由到Op上,由Op来做DNS解析。
然后是国内流量的处理,完全由ROS也就是主路由处理,完全不会经过Op.
国外流量在ROS上被标记之后,会被路由到Op上,由Op接管这些连接,然后代替发送连接到代理服务器。
这里贴出我当前的ROS配置: CNIP的合集就不贴出来了,太大了..
1# 2025-06-14 22:01:59 by RouterOS 7.19.1
2# system id = N9pY/4YCgZA
3#
4/interface bridge
5add name=LAN_G
6/interface ethernet
7set [ find default-name=ether2 ] disable-running-check=no name=LAN2
8set [ find default-name=ether1 ] disable-running-check=no name=VM
9set [ find default-name=ether3 ] disable-running-check=no name=WAN
10set [ find default-name=ether1 ] comment=\
11 "\BE\D6\D3\F2\CD\F8\CE\DE\CF\DF\C2\B7\D3\C9\C6\F7" disable-running-check=\
12 no name=WLAN
13/interface pppoe-client
14add add-default-route=yes disabled=no interface=WAN name=pppoe-out1 user=\
15 18072827201
16/ip dhcp-server option
17add code=6 name=openwrt value="'192.168.10.2'"
18add code=3 name=gateway value="'192.168.10.1'"
19/ip firewall layer7-protocol
20add name=Tencent_qq regexp="^.\?.\?[\\x02|\\x05]\\x22\\x27.+|^.\?.\?[\\x02|\\x\
21 05]\\x22\\x27.+[\\x03|\\x09]\$|^.\?.\?\\x02.+\\x03\$|^/xFE/x42../x42/x02/x\
22 0B/x7D/x98/x38/xE4.+"
23/ip pool
24add name=LAN_POOL ranges=192.168.10.100-192.168.10.200
25/ip dhcp-server
26add address-pool=LAN_POOL interface=LAN_G lease-time=8h30m name=LAN_DHCP
27/queue tree
28add name=download parent=LAN_G queue=default
29add name=down_small packet-mark=sp parent=download priority=1 queue=default
30add name=down_big packet-mark=bp parent=download queue=default
31/routing table
32add disabled=no fib name=free
33/interface bridge port
34add bridge=LAN_G interface=WLAN
35add bridge=LAN_G interface=VM
36add bridge=LAN_G interface=LAN2
37/ipv6 settings
38# ipv6 neighbor configuration has changed, please restart the device in order to apply the new settings
39set disable-ipv6=yes
40/ip address
41add address=192.168.10.1/24 interface=LAN_G network=192.168.10.0
42/ip dhcp-client
43# DHCP client can not run on slave or passthrough interface!
44add interface=WLAN
45/ip dhcp-server network
46add address=192.168.10.0/24 dns-server=192.168.10.2 gateway=192.168.10.1
47/ip dns
48set allow-remote-requests=yes max-udp-packet-size=65507 servers=192.168.10.2
49
50/ip firewall mangle
51add action=mark-connection chain=forward comment=\
52 "HTTP/S\C1\F7\C1\BF\B1\EA\BC\C7" dst-port=80,443 new-connection-mark=sp \
53 protocol=tcp
54add action=mark-packet chain=forward comment="\D0\A1\B0\FC\B1\EA\BC\C7" \
55 new-packet-mark=sp packet-size=0-512
56add action=mark-packet chain=forward comment="\B4\F3\B0\FC\B1\EA\BC\C7" \
57 new-packet-mark=bp packet-size=!0-512
58add action=mark-routing chain=prerouting comment=\
59 "\C5\D4\C2\B7\D3\C9\D6\B1\BD\D3\CD\A8\B9\FD" new-routing-mark=main \
60 passthrough=no src-address=192.168.10.2
61add action=accept chain=prerouting comment=\
62 "\C4\DA\CD\F8\B5\D8\D6\B7\CD\A8\B9\FD" dst-address-list=A_LOCAL
63add action=mark-routing chain=prerouting comment=\
64 "DNS\BD\D9\B3\D6\B5\BD\C5\D4\C2\B7\D3\C9" dst-port=53 new-routing-mark=\
65 free passthrough=no protocol=udp
66add action=accept chain=prerouting comment="\B9\FA\C4\DAIP\CD\A8\B9\FD" \
67 dst-address-list=CN
68add action=accept chain=prerouting comment=\
69 "\B9\FA\C4\DAIP\D6\B1\BD\D3\CD\A8\B9\FD" disabled=yes dst-address-list=\
70 CNIP
71add action=accept chain=prerouting comment=\
72 "TCP\B8\DF\B6\CB\BF\DA\D6\B1\BD\D3\CD\A8\B9\FD" dst-port=!0-9000 \
73 protocol=tcp
74add action=accept chain=prerouting comment=\
75 "UDP\B8\DF\B6\CB\BF\DA\D6\B1\BD\D3\CD\A8\B9\FD" dst-port=!0-9000 \
76 protocol=udp
77add action=mark-routing chain=prerouting comment="\B1\EA\BC\C7\B3\F6\B9\FA" \
78 new-routing-mark=free src-address-list=ALLOW_FREE
79/ip firewall nat
80add action=masquerade chain=srcnat out-interface=pppoe-out1
81/ip route
82add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.10.2 \
83 routing-table=free scope=30 suppress-hw-offload=no target-scope=10
84/ipv6 address
85add address=::62be:b4ff:fe02:f521 eui-64=yes from-pool=ipv6-pool-pppoe-out1 \
86 interface=LAN_G
87/ipv6 dhcp-client
88add add-default-route=yes default-route-tables=main interface=pppoe-out1 \
89 pool-name=ipv6-pool-pppoe-out1 request=prefix
90/ipv6 nd
91set [ find default=yes ] disabled=yes
92add interface=LAN_G mtu=1492
93/system clock
94set time-zone-name=Asia/Shanghai
Openwrt 的规则保持原本即可。
RouterOS Firewall:

稍微说一下对RouterOS的感受,如同它的名字一样,纯粹的路由器系统。
对比OpenWrt,你无法使用高度自由的命令行工具了,自然也无法在它上面安装各种各样的插件。
有点像思科之类的路由器那种感觉的命令行。
第一次初始化设置起来也相对于Openwrt更加麻烦,比如PPPoE拨号之后你
本身提供了一个GUI界面和各种网络功能支持,还有一个和iptables功能类似的firewall
多亏由这个firewall,所以才能做分流。
不过这个图形化的iptables用起来还是没那么顺手罢了,比如无法同时选择多个协议。
还有一点就是RouterOS的流量监控功能挺全面的。除了能针对接口监控,你还能对QoS队列,甚至防火墙的某一条规则进行流量监控。
顺便记一次脑瘫的BUG修复记录。
一开始我OP使用的DNS使用的是国内直连IP,国外也是直连。
后面我开始使用国内直连IP,国外使用FakeIP的模式。
我就发现FakeIP大部分国外网站无法登录,部分常用网站倒是可以,花了我2个小时排查问题。
ROS分流没问题→DNS解析没问题→连接也是标记路由到OP没问题
问题就出在OP连接发起上,我又查看了Clash的调试日志,访问油管推特时有出现连接发起的日志。
但是访问exhentai和wiki就完全一点连接日志也没有,连DNS解析日志都没有。
后面我就开始排查可能是nftables的规则导致的问题。
我仔细盯着每条规则,脑内把所有流量经过链的顺序都模拟了一遍,也没问题啊。
然后就懵逼了,重新从ROS开始排查,又重复了一遍….
最后又回到了nftables的规则上来。
这次我仔细的查看了所有的规则,以及匹配的集合。
其中有一条规则是daddr = @chnip 的,这个是chinadns-ng自动分流产生的@chnip来做缓存,方便防火墙分流,这个集合里大概有1w以上的IP地址。然后我直接一个grep查找,果然发现了fakeip的一部分范围也在这个里面…