警告:這次純粹是閒得慌🤣

這次改造的目標是原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 = XXXXXXXXXXX
 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    your_phone_number
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:

image.png


稍微說一下對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的一部分範圍也在這個裡面…