world of Engine.png

Credit world of Engine

前两天需要在 Termius手机端 登录服务器,登录失败,提示 “connection is closed by foreign host”,打开 Quantumult X(以下称QX)看了下网络活动TCP,大概猜出是A机场节点问题,在用的机场节点禁用了22端口。于是切换到B机场节点,登录成功。

于是决定单独给该服务器的IP 设置一条分流,让其走B机场节点,而访问其他app,如YouTube/telegram等仍然使用A机场节点。

QX 提供为IP 提供 ip-cidr / ip6-cidr / ip-asn 3种分流规则类型

[filter_local]
;ip6-cidr, 2001:4860:4860::8888/32, direct
;ip-cidr, 10.0.0.0/8, direct
;ip-asn, 6185, proxy

而博主的服务器为IPv4的IP,172.67.128.185(已模糊处理),该怎么给IP地址添加分流规则呢?遂从新捡起了 CIDR(英语:Classless Inter-Domain Routing,简称CIDR,无类别域间路由

因上,总结记录整理出本文。

本文部分内容较以前文章有所重复,但不妨碍再次深入阅读

开启“规则分流”模式及画板设置

QX 首页功能图示-QX-底部按钮-三色按钮代表当前处于“规则分流”模式.png

首先,你需要确认的是你的QX处于规则分流模式:QX - 进入设置页面 - 滑至底部其他设置 - 模式 - 选择规则分流

QX - 进入设置页面 - 滑至底部画板&工具栏 - 样式 - 画板样式,选择

分流规则优先级

[filter_local] > [filter_remote] > final

QX - 设置 - 配置文件 - 示例配置中 [filter_local] 部分示例如下:

[filter_remote]
https://limbopro.com/Adblock4limbo.list, tag=毒奶特供(去网页广告计划), force-policy=🛑 广告拦截, update-interval=172800, opt-parser=false, enabled=true
https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/QuantumultX/OpenAI/OpenAI.list, tag=🤖 OpenAI, force-policy=🤖 Ai, update-interval=172800, opt-parser=false, enabled=true

[filter_local]
;user-agent, ?abc*, proxy
;host, www.google.com, proxy
;host-keyword, adsite, reject
;host-wildcard, *.goo?le.com, proxy
;host-suffix, googleapis.com, proxy
;host-suffix, googleapis.com, proxy, force-cellular
;host-suffix, googleapis.com, proxy, multi-interface
;host-suffix, googleapis.com, proxy, multi-interface-balance
;host-suffix, googleapis.com, proxy, via-interface=pdp_ip0
;ip6-cidr, 2001:4860:4860::8888/32, direct
;ip-cidr, 10.0.0.0/8, direct
;ip-cidr, 127.0.0.0/8, direct
;ip-cidr, 172.16.0.0/12, direct
;ip-cidr, 192.168.0.0/16, direct
;ip-cidr, 224.0.0.0/24, direct
;geoip, cn, direct
;geoip, cn, direct, force-cellular
;ip-asn, 6185, proxy
# You can add below host-keyword rule to skip the DNS query for all the non-matched hosts. Pure IP requests won't be matched by the host related rules.
;host-keyword, ., proxy
final, proxy

以上 [filter_local] 下的分流规则较 [filter_remote] 下的远程分流规则,有着更高的优先级;当你打开一个网站时,假设这个网站是 limbopro.com ,QX 将从 [filter_local] 第一行开始查询匹配,如果匹配得到则执行相应的策略,如direct,proxy,或你设置的其他策略或策略组;

直到 final, proxy ,如果仍然还没有匹配到将会继续从 [filter_remote] 第一行开始匹配,直到最后一个;如果仍然没有匹配到,才会最终走 final, proxy

其中,除了 final 外,一般分流规则包含3个部分:规则的类型参数,对应的策略偏好,(其中策略:direct,proxy,reject 为 Quantumult X 自带的3个策略;策略 proxy 对应的是 QX - 首页 - 节点 - proxy - 下你选中节点):

host, www.google.com, proxy

OK,以上。

那么,分流规则的 类型的优先级 又是怎样的呢?

host > host-suffix > host-wildcard > host-keyword > user-agent > ip-cidr  ip6-cidr  geoip  ip-asn
ip-cidr > ip6-cidr > geoip > ip-asn

举例示例如下

[filter_local]
host-keyword, limbopro, proxy
host-wildcard, limbopro.com, proxy
host-suffix, limbopro.com, proxy
host, limbopro.com, proxy

你猜会优先执行哪条规则?你可以尝试将上述举例中的分流规则复制到 [filter_local] 下方;然后再在新页面打开 limbopro.com;最后再在 QX - 首页 - 网络活动TCP(记录),如下图:

网络活动TCP记录-分流-策略走向.jpg

你可以在 网络活动TCP 功能页,查看各类网络活动请求,如刚刚你打开 limbopro.com 后,QX 发生了什么?分流以及策略走向是怎样的,是否已按照你的设置的分流规则执行

QuantumultX - 网络活动.png

以上。

ip-cidr/ip6-cidr/geoip/ip-asn

ip-cidr, 10.0.0.0/8, direct

现在我们需要单独给一个IP地址设置分流规则该怎么做?比如 172.67.128.185,让它走proxy,标准答案是:

ip-cidr, 172.67.128.185/32, proxy

一头雾水?先来了解一下 ip-cidr

无类别域间路由(英语:Classless Inter-Domain Routing,简称CIDR/ˈsaɪdər, ˈsɪ-/)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。是IP地址及其关联网络掩码的紧凑表示。该表示法由 Phil Karn 在 20 世纪 80 年代发明。 CIDR 表示法指定 IP 地址、斜杠(“/”)字符和十进制数。 Credit Wikipedia

关于IP地址/CIDR/子网掩码更多介绍可以参阅上文(总结成文于2022年,如有疏漏可联系博主反馈);

前缀聚合

IP/CIDR Δ 与最后一个地址的差值 掩码 主机数 (*)
a.b.c.d/32 +0.0.0.0 255.255.255.255 1
a.b.c.d /31 +0.0.0.1 255.255.255.254 2
a.b.c.d /30 +0.0.0.3 255.255.255.252 4
a.b.c.d /29 +0.0.0.7 255.255.255.248 8
a.b.c.d /28 +0.0.0.15 255.255.255.240 16
a.b.c.d /27 +0.0.0.31 255.255.255.224 32
a.b.c.d /26 +0.0.0.63 255.255.255.192 64
a.b.c.d /25 +0.0.0.127 255.255.255.128 128
a.b.c.0 /24 +0.0.0.255 255.255.255.000 256
a.b.c.0 /23 +0.0.1.255 255.255.254.000 512
...... ...... ...... ......

Credit wikipedia

主机数 = 2^(32-CIDR) > a.b.c.d /29 -> 2^(32-29) =8;

回到例子CIDR块 172.67.128.185/32:

主机数的计算:2^(32-CIDR),172.67.128.185/32 可用主机数为 2^(32-32) = 1,即 172.67.128.185 本身。接着往下,172.67.128.185/31,可用主机数为 2^(32-31) = 2,第一个可用主机为 172.67.128.184,第二个为 172.67.128.184。get?

172.67.128.184 是怎么算出来的呢?(不是简单的加减...),往下:

将子网掩码转换为二进制(注释:TCP/IP体系规定用一个32位的子网掩码来表示子网号字段对应的长度。具体的做法是:子网掩码由一连串的“1”和一连串的“0”组成,“1”对应于网络号和子网号字段,而“0”对应主机号。)
172.67.128.185/31

等价于

172.67.128.185 -> IP地址
255.255.255.254 -> 子网掩码

其中 172.67.128.185 换算为二进制:

10101100 01000011 10000000 10111001

其中 255.255.255.254 为子网掩码,换算成二进制:

11111111 11111111 11111111 11111110

进行与运算,得出网络地址:(🔔即最小可能地址;)

10101100 01000011 10000000 10111001
11111111 11111111 11111111 11111110
------
10101100 01000011 10000000 10111000

将与结果转换为10进制 172.67.128.184

广播地址:将转换为二进制的IP地址中的主机号全部变为1;子网掩码 11111110 中的 0 上方对应的为IP地址的主机号;(🔔广播地址通常是某个网络的最大可能地址;)

10101100 01000011 10000000 10111001
11111111 11111111 11111111 11111110
------
10101100 01000011 10000000 10111001

转换为10进制 172.67.128.185,最终得到

网络地址 172.67.128.184
广播地址 172.67.128.185

geoip

关于GEOIP相关介绍细节,可以参阅上文;
...
geoip, cn, direct
final, proxy

geoip,基于IP地理位置数据库,cn 代码则表示中国;

分流规则应用场景

特指 [filter_remote]

你可以在GitHub上创建并维护一个去广告project,

另外,也可尝试为当前热门 分流规则 GitHub仓库,如 blackmatrix7 的 ios_rule_script 贡献你的力量:该项目提供众多app的分流规则,如 Google/YouTube/Twitter/Netflix/Chatgpt 等。

以抖音分流规则举例:远程分流规则资源介绍 -> https://github.com/blackmatrix7/ios_rule_script/tree/master/rule/QuantumultX/DouYin 远程分流规则raw -> https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/QuantumultX/DouYin/**DouYin.list**;

https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/QuantumultX/DouYin/DouYin.list

QX -> 设置 - 分流 - 资源引用 - + 粘贴上述 raw 资源链接🔗,开启策略偏好按需求选择direct,proxy,reject,或其他你自己设置的策略;如果不想给小孩看抖音,那策略偏好就选 reject,如果想在抖音上扮洋人,可以选择proxy,你在抖音评论区的留言或许过不了多久就会显示为你机场节点所在国;

# NAME: DouYin
# AUTHOR: blackmatrix7
# REPO: https://github.com/blackmatrix7/ios_rule_script
# UPDATED: 2024-07-03 16:17:40
# HOST: 2
# HOST-SUFFIX: 11
# TOTAL: 13
HOST,lf3-static.bytednsdoc.com,DouYin
HOST,v5-dy-o-abtest.zjcdn.com,DouYin
HOST-SUFFIX,amemv.com,DouYin
HOST-SUFFIX,douyincdn.com,DouYin
HOST-SUFFIX,douyinpic.com,DouYin
HOST-SUFFIX,douyinstatic.com,DouYin
HOST-SUFFIX,douyinvod.com,DouYin
HOST-SUFFIX,idouyinvod.com,DouYin
HOST-SUFFIX,ixigua.com,DouYin
HOST-SUFFIX,ixiguavideo.com,DouYin
HOST-SUFFIX,pstatp.com,DouYin
HOST-SUFFIX,snssdk.com,DouYin
HOST-SUFFIX,toutiao.com,DouYin

蛮好玩的,但博主不建议大家扮洋人,毕竟你的实际地理位置还在中国,或许会有不好的影响。

以上。

最后修改:2024 年 09 月 03 日 10 : 46 AM