Quantumult X 规则不生效?先查匹配顺序、DNS 和远程规则
简答:Quantumult X 规则不生效,先停用远程规则并查看请求记录,再核对规则类型、策略名称和 DNS。默认有效序列中本地规则位于远程规则前、FINAL 最后;使用 inserted-resource=true 后,远程资源可能改变插入位置。
定义:Quantumult X 规则是依据域名、请求特征、目标 IP 或 GeoIP 条件,将流量交给直连、拒绝或指定策略的匹配条目。
一分钟自查:先判断是哪一环出错
如果你遇到“写了规则仍走直连”“远程规则集为空”或“geoip 不命中”,先不要继续堆规则。本文为第三方使用指南,Quantumult X 的界面名称可能随版本变化;配置字段以官方 sample.conf为准。公开的官方 Issue 环境记录包含 Quantumult X 1.8.0(build 946),不同版本请以当前 App 页面为准。
- 停用所有远程规则。只保留一条本地
host规则和一条final。 - 查看请求记录。确认请求域名、命中的规则和最终策略,而不是只看配置文件。
- 核对策略名称。
direct、reject是内置策略;自定义名称必须与策略组或节点标签完全一致。 - 再启用一条远程规则。确认资源能更新、内容不是错误网页,并检查是否设置了
force-policy。 - 最后检查 DNS。
ip-cidr和geoip需要目标 IP 或解析结果参与判断。
| 环节 | 要确认什么 | 异常表现 |
|---|---|---|
| 请求进入 Tunnel | 隧道或 VPN 状态已启用 | 所有规则都像没有生效 |
| DNS 解析 | 域名能解析,DNS 没有超时 | geoip、ip-cidr 结果异常 |
| 有效规则序列 | 本地、远程及插入资源的先后关系 | 宽泛规则截获后续规则 |
| 命中策略 | 请求记录显示的策略名称 | 规则命中但出口不符合预期 |
| FINAL | 未命中请求的默认出口 | 未列入规则的流量走错方向 |
先用这份最小配置验证规则链路
下面的配置只使用 Quantumult X 的内置策略 direct 和 reject,不依赖虚构节点名。它适合先验证规则语法、DNS 和请求记录。若要使用代理策略,请把 proxy 替换成你配置中真实存在的策略组名称。
[dns]
server = 223.5.5.5
server = 119.29.29.29
[filter_local]
host, example.com, reject
host-suffix, local, direct
ip-cidr, 192.168.0.0/16, direct
ip6-cidr, 2001:db8::/32, direct
geoip, cn, direct
final, direct
[filter_remote]
FILTER_LAN, tag=LAN, force-policy=direct, update-interval=86400, inserted-resource=true, enabled=trueexample.com 和 2001:db8::/32 仅用于演示语法。官方 sample.conf 展示了 user-agent、host、host-keyword、host-wildcard、host-suffix、ip-cidr 和 ip6-cidr 等类型,并说明 DNS 结果会用于过滤判断或直连策略连接;通过代理服务器连接时,客户端不一定知道目标域名对应的目标 IP。可先用这份小配置确认链路,再加入实际规则集。
filter_local 与 filter_remote 的实际先后关系
默认情况下,本地规则位于远程规则之前,FINAL 位于最后。因此,同一请求同时被本地和远程规则匹配时,应先检查本地规则;但这不等于本地规则中的任何条目都天然能覆盖一切资源,因为远程资源可以使用 inserted-resource=true 改变资源的插入方式。
官方 sample.conf 在 [filter_remote] 中给出了 FILTER_REGION 和 FILTER_LAN 配合 inserted-resource=true 的示例。官方公开 Issue #251 则记录了宽泛的本地规则 host-keyword, ., proxy 截获远程规则的复现,以及使用 inserted-resource=true 后暂时改善的情况。因此,排查时应采用这个结论:默认先看本地规则;启用插入资源后,按实际有效序列和请求记录判断,不要把“本地永远优先”当成绝对规则。
- 先删除或停用所有远程资源。
- 在
[filter_local]放一条明确的host规则和一条final。 - 确认请求记录能看到明确规则命中。
- 逐条恢复远程规则,记录每次启用后的命中变化。
- 发现宽泛规则截获请求时,先移除
host-keyword, .或类似兜底写法,再测试插入资源。
Quantumult X 按有效规则序列匹配,不应按“规则越具体就自动优先”来推断结果。若一条宽泛规则已经先命中,后面的规则不会因为更具体而自动获得优先权。
参考:官方 sample.conf、官方 Issue #251。
常见规则类型:语法和适用场景
| 类型 | 示例 | 适合处理 | 注意事项 |
|---|---|---|---|
host | host, example.com, direct | 单个明确域名 | 不等同于后缀匹配 |
host-suffix | host-suffix, example.com, proxy | 域名及其子域名 | 范围比 host 更宽 |
host-keyword | host-keyword, ads.example, reject | 域名关键词 | 容易误伤,必须尽量缩小关键词 |
host-wildcard | host-wildcard, *.example.com, proxy | 通配符域名 | 检查通配符是否覆盖过宽 |
user-agent | user-agent, ?App*, proxy | 按请求特征匹配 | HTTPS 请求未必能看到 User-Agent |
ip-cidr | ip-cidr, 192.168.0.0/16, direct | IPv4 地址段 | 可能需要 DNS 解析 |
ip6-cidr | ip6-cidr, 2001:db8::/32, direct | IPv6 地址段 | 确认设备和网络具备 IPv6 |
geoip | geoip, cn, direct | 按目标 IP 地区判断 | 依赖目标 IP 和 GeoIP 判断 |
final | final, direct | 所有未命中流量 | 应放在本地规则末尾 |
规则写法与其他客户端不能直接混用。例如 Quantumult X 使用小写的 host-suffix,不是 Clash 常见的 DOMAIN-SUFFIX;远程规则在 [filter_remote] 声明,而不是直接把其他客户端的顶层 rules 或 proxies 粘贴进来。
按需求组织规则:直连、代理、局域网和拦截
局域网和本机地址直连
[filter_local]
ip-cidr, 10.0.0.0/8, direct
ip-cidr, 172.16.0.0/12, direct
ip-cidr, 192.168.0.0/16, direct
ip-cidr, 127.0.0.0/8, direct
ip6-cidr, ::1/128, direct
host-suffix, local, direct
final, direct把指定服务交给代理策略
[filter_local]
host-suffix, service.example, proxy
host, api.example.com, proxy
final, direct实际使用时,应把示例域名替换为你在请求记录中看到的真实域名。对某个 AI 服务、流媒体或通信应用进行分流时,建议先观察请求记录,再添加域名后缀规则;不要凭应用名称猜域名,也不要把一整个大合集直接绑定到代理策略。
广告和跟踪域名拦截
[filter_local]
host, ads.example.com, reject
host-suffix, tracking.example.com, reject
final, direct广告拦截不建议使用 host-keyword, ads, reject 这类过宽写法,因为正常域名中也可能包含相同字符。优先使用精确域名或可信规则集,并在发现误伤时删除该条规则后重新验证。
远程规则集:tag、force-policy、update-interval 和 opt-parser
官方 sample.conf 说明,远程资源默认同步间隔为 86400 秒,也可以用 update-interval=172800 改为 172800 秒;负数表示禁用自动同步。一个常见的远程规则声明可以写成:
[filter_remote]
https://example.com/filter.snippet, tag=Example, force-policy=proxy, update-interval=86400, enabled=true- tag:给远程资源设置显示名称,方便在资源列表中识别。
- force-policy:远程规则命中后强制使用指定策略;官方 sample.conf 说明,设置该参数后,远程资源自身写入的策略会被忽略。
- update-interval:自动同步间隔,单位为秒。
- enabled:控制资源是否启用。
- inserted-resource:用于指定资源的插入方式,遇到本地与远程规则冲突时要结合实际命中记录验证。
opt-parser 不是普通的“远程规则开关”。官方 sample.conf 在 [server_remote] 中展示了 opt-parser=true,同时官方项目提供了 resource-parser.js 作为资源解析器示例;实际配置中,部分规则资源也会使用该参数将其他格式转换为 Quantumult X 可识别的内容。因此,只有当资源提供方明确说明需要解析器时才启用,并确认 resource_parser_url 或资源解析方式可用。解析后的规则仍需检查策略名称、规则数量和实际命中结果。
不要把 opt-parser=true 机械复制到所有资源,也不要把服务器订阅的解析参数与分流规则的格式混为一谈。核验时可先用原生 Quantumult X 格式的规则文件测试,再单独测试需要解析器的资源。
DNS 写法与 geoip、ip-cidr 不命中的排查
官方 sample.conf 的 [dns] 示例支持用 server = 指定 DNS,也支持按域名指定服务器。最小测试片段如下:
[dns]
server = 223.5.5.5
server = 119.29.29.29
;server = /example.com/8.8.4.4- 确认 Quantumult X Tunnel 已启用。
- 在请求记录中确认请求是否出现,以及是否显示 DNS 错误。
- 若是域名规则,先测试域名是否能解析。
- 若是
ip-cidr或geoip,确认请求不是直接使用无法被域名规则覆盖的纯 IP。 - 修改 DNS 后重新连接 Tunnel,再观察新的请求记录。
官方 sample.conf 明确说明,DNS 查询结果会用于评估过滤条件或连接直连策略;当流量通过代理服务器连接时,Quantumult X 可能不会知道相关域名的目标 IP。因此,不能只凭系统中的 ping 或浏览器表现判断规则是否命中,应以客户端请求记录中的命中规则和策略为准。
远程规则为空、请求走错策略时怎么查
- 规则集为空:检查 URL 是否返回规则文本,而不是登录页、错误页或空文件。
- 资源不更新:检查
enabled=true、更新间隔和 Tunnel 网络状态,先手动刷新资源。 - 规则命中但策略错误:核对规则行末策略名,以及远程资源是否设置了
force-policy。 - 远程规则完全不触发:先停用宽泛本地规则,再逐条启用远程资源。
- 应用仍然直连:查看请求记录是否有该应用的连接;若没有,确认 Tunnel 覆盖范围和应用是否使用了特殊连接方式。
- 代理出口不对:以请求记录中的最终策略或出口 IP 对比为准,不要只看策略组名称。
远程规则、远程脚本和 MITM 配置都应单独审查:查看原文内容、维护者和最近更新记录,确认规则是否包含不需要的重写或脚本;没有充分理由时,不要安装来源不明的 MITM 证书,也不要授予不必要的 HTTPS 解密权限。
Quantumult X、Clash、Surge、Loon 规则差异
| 用途 | Quantumult X | Clash 常见写法 | Surge 常见写法 | Loon 常见写法 |
|---|---|---|---|---|
| 精确域名 | host | DOMAIN | DOMAIN | DOMAIN |
| 域名后缀 | host-suffix | DOMAIN-SUFFIX | DOMAIN-SUFFIX | DOMAIN-SUFFIX |
| 域名关键词 | host-keyword | DOMAIN-KEYWORD | DOMAIN-KEYWORD | DOMAIN-KEYWORD |
| 远程规则集 | [filter_remote] | rule-providers 加 RULE-SET | 远程规则或模块资源 | 远程规则集或插件资源 |
| 默认兜底 | final | MATCH | FINAL | FINAL |
表格只用于概念迁移,不能直接复制整段配置。迁移前至少核对规则类型、远程资源声明位置和策略名称;尤其不要把 Clash 的 DOMAIN-SUFFIX、RULE-SET 或顶层 YAML 结构直接放入 Quantumult X 配置。
常见问题
filter_local 一定比 filter_remote 优先吗?
默认有效序列中,本地规则位于远程规则前,FINAL 在最后;但远程资源可以使用 inserted-resource=true 改变插入方式。因此,不能把“本地永远覆盖远程”当成绝对结论。遇到冲突时停用远程资源,再根据请求记录逐条恢复。
Quantumult X 会按规则具体程度自动择优吗?
不会按“越具体越优先”自动择优。规则按有效序列匹配,先命中的规则决定策略。宽泛的 host-keyword 可能先截获请求,所以应把范围大的规则谨慎放置,并用请求记录确认结果。
为什么 geoip 或 ip-cidr 规则不生效?
这类规则需要目标 IP 或 DNS 结果参与判断。先确认 Tunnel 已启用、DNS 能正常解析,再确认请求不是纯 IP 连接,并查看客户端记录中的实际命中项。
filter_remote 可以直接加 opt-parser=true 吗?
不能机械添加。官方 sample.conf 展示了服务器远程资源使用 opt-parser=true,项目同时提供资源解析器示例;只有当具体规则资源明确要求解析器时才启用,并检查解析后的规则和策略名称。
update-interval=86400 是什么意思?
它表示远程资源自动同步间隔为 86400 秒。官方 sample.conf 还说明,默认远程资源同步间隔也是 86400 秒;需要更长间隔时可改成其他秒数。
远程规则集显示为空怎么办?
先检查 URL 返回内容是否为有效规则文本,再确认资源启用、网络可达、策略名称存在,并手动刷新后查看资源详情。若返回登录页、错误页或空文件,客户端无法得到有效规则。
final 应该写 direct 还是 proxy?
看你的默认出口需求。未命中流量希望直连就写 final, direct;希望交给代理策略就写 final, proxy,其中 proxy 必须替换为真实存在的策略名称。
常见问题
filter_local 一定比 filter_remote 优先吗?
默认有效序列中本地规则位于远程规则前、FINAL 在最后;但 inserted-resource=true 可能改变远程资源的插入方式,冲突时应以请求记录中的实际命中项为准。
Quantumult X 会按规则具体程度自动择优吗?
不会。规则按有效序列匹配,先命中的规则决定策略;宽泛的 host-keyword 可能截获后续请求。
为什么 geoip 或 ip-cidr 规则不生效?
先确认 Tunnel 和 DNS 正常,再确认请求不是纯 IP 连接,并查看客户端记录中的命中规则。
filter_remote 可以直接加 opt-parser=true 吗?
不能机械添加。只有资源明确要求解析器时才启用,并检查解析后的规则格式、策略名称和实际命中结果。
update-interval=86400 是什么意思?
表示远程资源自动同步间隔为 86400 秒;官方 sample.conf 也将其列为默认同步间隔。
远程规则集为空怎么办?
检查 URL 是否返回有效规则文本、资源是否启用、策略是否存在,然后手动刷新并查看资源详情。
final 应该写 direct 还是 proxy?
未命中流量希望直连就使用 final, direct;希望交给代理就使用 final, proxy,并确保策略名称真实存在。