QuantumultX 重要操作和配置记录

8 minute

前言

本文记录了通过 QuantumultX 配置代理,书写分流规则,抓包分析并重写规则,启用定时任务等简易操作流程,另外还记录了其他一些相关操作。

配置代理

可以导入自己搭建的节点,也可以通过引用导入 QuantumultX 格式的订阅链接,步骤比较简单略过,记录一个点,如果相关机场不支持 QuantumultX 格式的订阅,可以通过解析器完成转换,在配置中引用转换脚本即可:

1[general]
2resource_parser_url=https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/resource-parser.js

resource-parser.js 是 github 上的一个资源解析转换脚本,主要功能是将其它格式的订阅解析成 QuantumultX 格式的订阅,以及可以对引用的重写/分流规则进行转换和筛选。

书写分流规则

分流规则可以简单理解,就是对某一类地址进行分流,通过一定的分流策略来处理这些地址的相关请求,这里以一个例子引入:

我需要在访问 *.dmm.co.jp 这类日本网址时使用日本节点,那么可以首先创建一个分流策略,名为 Japan,类型可以选择 avaiable(可用性) 或者 static(静态指定),也可以视情况选择如负载均衡之类的其他策略,匹配的节点标签可以根据自己的日本节点名称来填写,比如“日本”。

接着可以书写分流规则,host 需要填写一个正则式,这里就填 *.dmm.co.jp,类型即是 HOST-WILDCARD(通配符类型),策略即指定为 Japan。

以上操作同样都可通过直接编辑配置文件完成:

1[filter_local]
2host-wildcard, *.dmm.co.jp, Japan
3
4[policy]
5available=Japan, server-tag-regex=日本, img-url=🇯🇵

抓包分析并重写规则

由于很多请求是 https 的,为了抓包和重写 https 请求,需要安装并信任证书。

首先在设置界面开启重写和 MitM(中间人攻击),然后点击生成、配置证书。

接着,对于 IOS,需要在设置界面信任证书。对于 MacOS,点击生成证书会在 Safari 完成生成,然后双击证书在 Keychain Access 应用进行信任操作,如提示不可安装,则手动从 finder 将证书拖到 Keychain Access 的 login 列表中。

完成以上步骤后,即可开启 Http 抓取功能进行抓包和重写规则了,注意对于每个 https 请求,需要在 mitm 处添加对应的域名才能进行抓包和重写,而 http 请求则不用。

下面以屏蔽知乎的开屏广告为例子来进行一次规则重写。

开启抓包,如果是通过 http 加载的广告则很方便,直接开始抓包,但一些广告的加载可能是通过 https 加载,所以可以先通过 Activity 观察一下一些可能的 https 广告网址,然后在 mitm 处配置域名。

打开知乎加载开屏广告,抓包发现加载开屏广告图片的请求为:

1http://images.pinduoduo.com/marketing_api/2023-11-09/ce00e978-7d7f-11ee-81f3-0a580a4a3166.png?filtered=pread&filtered=pread

这是一个 http 请求,我们就可以通过一个正则式来 reject 这类请求,添加重写规则,类型可以指定为 reject,匹配的 url 为以下正则式:

1^https?:\/\/images\.pinduoduo\.com

考虑到同网址可能有 https 相关的广告,可以在 mitm 处再添加 images.pinduoduo.com

接着重新打开知乎,发现开屏广告已经不出现了。注意这只是一个简陋的例子,很多广告是通过 https 加载的,广告地址可能动态变化且繁多,需要更多更复杂的匹配,建议直接引用社区维护的规则:AdvertisingLite,但是不保证一直可用,关键还需自己抓包分析。

同样以上操作对应到配置文件如下:

1[rewrite_local]
2^https?:\/\/images\.pinduoduo\.com url reject
3
4[mitm]
5hostname = images.pinduoduo.com

设置定时任务

QuantumultX 支持以 crontab 格式设置定时任务,任务脚本为 js 脚本,可以实现定时签到等操作,具体可以自行抓包分析并书写自动化脚本。

下面以书写一个简单的定时汇率播报脚本为例:

 1// currency.js
 2const from_cur = "USD"
 3const to_cur = "CNY"
 4const amount = 1
 5const token = "your_exchangerate-api_token"
 6const url = `https://v6.exchangerate-api.com/v6/${token}/pair/${from_cur}/${to_cur}/${amount}`;
 7const method = "GET";
 8const headers = {};
 9const data = {};
10
11const myRequest = {
12    url: url,
13    method: method,
14    headers: headers,
15    body: JSON.stringify(data)
16};
17
18$task.fetch(myRequest).then(response => {
19    let m = JSON.parse(response.body).conversion_result;
20    $notify("今日汇率 -- 美元兑人民币", "", `${m}`); // 中间那个是副标题
21    $done();
22}, reason => {
23    $notify("今日汇率 -- 美元兑人民币", "", reason.error); // Error!
24    $done();
25});

其中注意这几个 QuantumultX 提供的 API:

  1. $task.fetch 可以触发定时任务发送 http 请求
  2. $notify 可以方便地调用系统通知
  3. $done 标志一个任务的完成

接着把脚本放到 Quantumult X/Scripts/ 这个文件夹下,然后编写配置,在早上 10 点定时播报汇率情况:

1[task_local]
20 10 * * * currency.js, tag=今日汇率, enabled=true

另外,QuantumultX 还支持引用社区的脚本,但是感觉不太安全,建议阅读完代码确认没问题再引用。

配置 GeoIP 数据库源

目前市面上绝大多数的代理工具都依赖于 GeoIP2 数据库判断地址所属地,QuantumultX 也不例外。GeoIP2 数据库是来自于 MaxMind 的 GeoLite2 免费数据库,据官方说法,这个数据库目前存在一下几个问题:获取不便,数据量大,准确度低。

GeoIP2-CN 是一个小巧精悍、准确、实用 GeoIP2 数据库,而支持 QuantumultX,在设置页的 GeoLite2 项设置来源为如下链接,即可引用 GeoIP2-CN:

1https://github.com/Hackl0us/GeoIP2-CN/raw/release/Country.mmdb

IOS 与 MacOS 配置双向同步

首先在每个端的设置-资源开启 icloud,然后在一个端的关联配置下点击 icloud 新增 profile,然后其他端都 link profile,之后即可实现双向同步,默认有更新延迟,可以点击立即更新强制更新。