Shadowrocket 规则手册
配置结构与匹配参考
第一次连接应从哪里开始?请先沿着快速上手教程完成已有订阅导入、服务器选择和连接验证。本页用于随后系统查阅:解释配置各分区怎样协作、规则为什么按顺序命中,以及修改后如何证明结果符合预期。
本页以用户已有自己的订阅或服务器信息为前提。客户端一次性买断 ≠ 线路套餐;本站不提供、不销售、不推荐节点或订阅。需要核对应用来源时,先阅读App Store 正版核验说明。Shadowrocket 的唯一获取入口是 App Store,设备兼容性与系统要求以 App Store 页面标注为准。
01 配置文件结构与启用范围
配置与订阅是同一份内容吗?
不是。订阅通常用于维护一组服务器连接信息;配置文件则描述请求如何处理,例如选择什么策略、使用哪些域名规则,以及是否需要特定的解析或重写行为。导入已有订阅后,服务器列表出现条目,并不等于某份规则配置已经启用。排查时应分别核对 Home 中可选的服务器、Config 中当前使用的配置,以及 Global Routing 的状态,不能用其中一项替代另外两项的检查。
应先看哪部分?先识别方括号包围的分区名,再读取分区内的行。不同分区采用不同语法:General 常见的是键值设置,Rule 是按行排列的匹配条件,Host 是域名与地址的映射,URL Rewrite 则使用匹配表达式和动作。不要把一行域名规则粘贴到 General,也不要因为文本可以保存,就认为它一定被解释成了预期功能。
[General]
dns-server = system
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT
[Host]
portal.example.com = 192.0.2.10
这个最小片段表达了什么?
它在 General 中使用系统 DNS 设置,在 Rule 中先处理示例域名后缀,再检查地址归属,最后指定兜底策略;Host 中的地址来自文档示例地址范围,仅演示映射格式。这里没有服务器连接凭据,也没有展示所有可用设置。PROXY 能否实际建立连接,仍依赖当前选择的服务器及其参数。复制片段时应连同分区位置一起理解,不要只看某个英文关键字。
如何建立可回退的编辑流程?在 Config 中找到当前使用的配置,先保留原件,再创建可辨认的副本。记录修改前的 Global Routing、当前服务器和准备验证的目标域名。每次只更改一个逻辑单元,例如增加一条 DOMAIN 规则,而不是同时更换 DNS、服务器与兜底策略。保存以后再次确认正在使用的是副本,避免编辑了文件甲,却用文件乙进行测试。
General 中的设置要全部照抄吗?
不需要。General 属于基础行为设置,应该根据具体问题逐项确认。现有配置可能已包含 DNS、连接处理或网络相关选项,完整替换会改变原先正常工作的部分。对不熟悉的键,先在应用内编辑界面核对名称与允许值;无法确认含义时保留原值。手册只给出能清楚解释的片段,不建议通过堆叠参数寻找所谓通用配置。
远程配置更新会怎样影响本地修改?如果当前文件来自远程来源,更新后是否保留编辑,应按应用内实际操作结果核对,不能预设所有修改都会自动合并。更稳妥的方式是保留原始来源和本地测试副本,更新后对照自己改过的规则位置。发现行为变化时,先比较启用文件、规则顺序和基础设置,而不是立即判定服务器失效。
哪些内容适合写入备注?可以记录规则目的、测试目标和回退方法,但不要把自己的订阅地址、密码或其他连接凭据写进准备公开分享的示例。分享排查信息时,保留分区名、关键字和先后关系即可;把敏感字段移除以后,再检查截图或文本中是否还藏有查询参数。配置是可执行的网络行为说明,不只是方便收藏的文本列表。
02 域名规则的匹配范围
DOMAIN 与 DOMAIN-SUFFIX 应怎样选择?
要只处理一个完整域名,优先使用 DOMAIN;要覆盖根域名及其子域名,使用 DOMAIN-SUFFIX。例如 DOMAIN,api.example.com,PROXY 只针对这个完整域名,不会自动覆盖另一个主机名。DOMAIN-SUFFIX,example.com,PROXY 则用于 example.com 及其下属域名。两者的差异是目标集合大小,不是连接速度差异,也不是某一种写法天然优先于另一种。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,DIRECT
上面的两行为什么不矛盾?第一行先匹配 api.example.com,将它作为例外送往 PROXY;第二行再处理同一域名空间的其他请求。如果交换两行位置,宽泛的后缀规则可能先命中,精确例外便失去作用。编写时应先描述例外,再描述共同范围。只有明确了解范围与顺序,才能解释同一根域名下不同请求为什么采取不同策略。
| 关键字 | 用于匹配 | 主要边界 |
|---|---|---|
DOMAIN | 完整域名 | 不自动包含其他子域名 |
DOMAIN-SUFFIX | 域名后缀 | 覆盖根域名及下属域名 |
DOMAIN-KEYWORD | 域名中的关键字 | 范围可能跨越不同域名 |
DOMAIN-KEYWORD 为什么需要谨慎?
它按域名中是否包含指定关键字判断,而不是按网站归属判断。某个短词可能出现在多个互不相关的域名中;以品牌词或通用词作为关键字,可能扩大匹配范围。若目的只是处理 example.com,通常应使用精确域名或后缀规则,而不是从这个域名中截取一个普通单词。规则能命中,不代表其边界与业务意图一致。
[Rule]
DOMAIN-KEYWORD,example,PROXY
FINAL,DIRECT
这段示例是在推荐关键字策略吗?不是,它用于展示语法。实际采用前,应列出希望覆盖的域名和不希望覆盖的域名各若干个,检查关键字是否误伤后者。如果无法明确排除范围,回到 DOMAIN 或 DOMAIN-SUFFIX。规则维护中,能够准确说明“为什么匹配”通常比节省几行文本更重要,尤其当配置会长期使用或由多人阅读时。
域名规则里需要写完整网址吗?
不需要。域名条件中不填写 https://、端口、路径或查询参数。api.example.com 是域名,而 https://api.example.com/account 是完整 URL;后者不能直接当作 DOMAIN 的参数。想按页面路径区分请求,属于另一层问题,不能通过在域名规则后面追加斜杠解决。先将输入拆成域名、端口与路径,再判断当前规则类型是否看得见该字段。
一个网页为什么仍会出现不同策略?网页可能同时请求主站、图片、接口和其他资源域名。只为地址栏中的域名添加规则,不会自动覆盖所有资源。验证时应查看实际请求目标,而不是凭页面名称猜测。遇到部分内容失败,应先找出失败资源对应的域名,再为确有需要的范围补充规则;不要为了一个资源直接扩大到含糊的关键字。
域名规则为什么有时没有出现预期命中?请求可能直接使用 IP,或客户端可用的目标信息与预想不同。应先检查记录中是否确实存在对应域名,再判断条件是否写错。大小写、额外空格、复制时混入的全角标点也值得检查。关于这些规则的基础阅读,可继续查看规则关键字入门;实际排错仍以应用内观察到的目标为依据。
03 IP、GEOIP 与 USER-AGENT
IP-CIDR 的斜杠数字是什么意思?
它表示网络前缀长度,用来确定一个地址范围,不是端口,也不是规则优先级。IPv4 中 /32 表示单个地址,/24 常用于包含二百五十六个地址的网络块。范围越宽,可能覆盖的目标越多。编写前应确认自己要处理的是单台主机还是整个网络,不应根据地址看起来相似就随意缩短前缀。范围错误可能把无关请求也导向同一策略。
[Rule]
IP-CIDR,192.0.2.25/32,DIRECT
IP-CIDR,198.51.100.0/24,PROXY
IP-CIDR6,2001:db8::/32,DIRECT
FINAL,DIRECT
这些地址能用来测试服务吗?不能,它们是文档示例地址。第一行说明单地址规则,第二行说明 IPv4 网络范围,第三行说明 IPv6 前缀。IP-CIDR6 与 IP-CIDR 分别处理不同地址族,写了一条 IPv4 规则不会自动覆盖同一服务的 IPv6 地址。如果设备同时获得两类地址,测试时应检查实际使用的目标,避免将地址族变化误认为规则随机失效。
什么时候考虑 no-resolve?
IP 类规则可能涉及为域名取得地址再判断范围。no-resolve 用于表达不为该规则额外触发域名解析的意图;它不等于整个应用停止 DNS,也不保证请求永远不会出现地址信息。若请求本来就是 IP,或已有可用地址,仍应根据实际条件理解匹配。使用前先想清楚:这条规则是只处理已知地址,还是希望域名解析后也纳入范围。
[Rule]
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
为什么不在每条地址规则后都加相同选项?因为它会改变域名请求到达此处时的处理条件。对于希望通过解析结果识别的目标,限制额外解析可能使后续 FINAL 更常被使用;对于仅处理已有 IP 的例外,则可能符合目的。应在一个目标上比较修改前后的记录,不要用“选项越多越完整”的方式编写配置。可用语法还应在当前应用内核对。
GEOIP 是否表示网站属于哪个地区?
不是。GEOIP 根据目标 IP 的地理归属数据进行判断,不能从网页文字、注册信息或页面内容推导结果。使用 CDN 的域名可能解析到不同地址,网络切换后归属结果也可能变化。GEOIP,CN,DIRECT 的含义是让匹配到相应地址归属的请求使用 DIRECT,不是“所有中文网站直连”,也不是“某个域名以后永远走同一策略”。
什么时候应让域名规则排在 GEOIP 前面?当某个域名需要确定策略,而不希望解析地址变化影响决定时,应把明确的域名例外放在较前位置。GEOIP 适合承担较宽的地址分类,不适合替代所有精细规则。如果同一服务在不同网络表现不同,先比较它的解析地址和命中规则,再决定是否增加域名例外,避免不断调整地理范围。
USER-AGENT 能可靠地按应用分流吗?
不能把它当作通用的应用身份识别。USER-AGENT 匹配的是请求中可见的对应字段,而不是系统里的应用名称。加密连接中字段是否可见、具体请求是否携带该字段,都影响规则是否有机会工作。并且多个应用可能使用相同字符串,同一应用也可能产生不同字符串。应先确认实际字段,再讨论匹配表达式。
[Rule]
USER-AGENT,ExampleClient*,DIRECT
FINAL,PROXY
这条演示只说明 USER-AGENT 的位置和通配写法,不代表存在名为 ExampleClient 的实际请求。若记录里没有可核对的字段,优先使用已确认的域名或地址条件。不要仅为使这种规则命中而扩大对加密流量的处理范围;规则条件不可见与服务器不可用是两类问题,应该分别验证。
04 Global Routing 与连接策略
Config、Proxy、Direct 与规则中的策略相同吗?
不完全相同。Global Routing 是整体路由模式入口;规则末尾的 PROXY、DIRECT、REJECT 是某条匹配结果指定的处理策略。界面词保留 Config、Proxy、Direct,规则关键字则按配置语法写成大写。调试之前先检查全局模式,否则即使 Rule 中的条件和顺序都正确,也可能因为当前未按配置规则工作而观察不到预期结果。
| 界面模式 | 中文说明 | 查阅重点 |
|---|---|---|
| Config | 配置 | 按当前配置的规则选择策略 |
| Proxy | 代理 | 用于对照代理路径,不能代替规则验证 |
| Direct | 直连 | 用于对照直接连接路径 |
上表能否理解为所有流量在任何情况下都完全相同?不能。网络连通性、系统行为和配置中的相关设置仍可能影响实际请求。这里区分的是用户核对路由的入口。要验证某条 Rule,应该回到 Config;要临时对照两条连接路径,可以使用 Proxy 或 Direct,但测试后必须恢复原模式,并在记录中标明切换过程。
PROXY 是否等于一个固定服务器?
不应这样理解。PROXY 指定代理处理路径,最终使用哪个服务器还需要结合当前选择和配置安排核对。规则命中 PROXY,只能说明路由选择到了该策略,不能证明服务器地址、端口、认证或传输参数一定正确。用户已有服务器信息时,应按原始资料逐项核对;不要为了修复认证错误而反复更改 DOMAIN-SUFFIX,因为两者位于不同层次。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN,portal.example.com,DIRECT
DOMAIN,blocked.example.com,REJECT
FINAL,DIRECT
DIRECT 是否等于关闭 Shadowrocket?不是。DIRECT 是对命中请求选择直接连接,不代表应用连接开关被关闭,也不说明其他请求采用同一路径。相反,在 Config 模式下,一部分请求可以 DIRECT,另一部分可以 PROXY。判断某一请求时,应读取它自己的命中结果,不要只通过系统状态栏或连接开关判断具体目标的出口路径。
REJECT 适合解决连接超时吗?
不适合。REJECT 是主动拒绝匹配请求的策略,通常用于明确不希望发起的连接。它不是备用服务器,也不是超时后的自动恢复动作。为域名添加 REJECT 以后,相关页面资源或应用功能可能受到影响;测试时应清楚知道被拒绝的是主页面、接口还是附属资源。出现空白区域并不一定是异常,也可能恰好是拒绝规则的结果。
怎样安排最小策略试验?先选择一个可辨认的示例目标,在规则前部放一条精确 DOMAIN,先设为 DIRECT 并观察,再改为 PROXY 对照。保持服务器、DNS 与网络不变,只比较策略这一项。如果两者都失败,应转向域名解析、目标可达性和服务器参数排查;如果一条路径成功,则进一步确认失败路径,而不是直接重写整份配置。
客户端购买为什么不决定 PROXY 是否可用?App Store 的一次性买断对应客户端使用,不会自动填入用户的服务器连接信息。应用来源、服务器状态和规则选择需要分别核对。购买与恢复问题可查疑难解答;协议参数的定位可查协议字段说明。本章只解释策略与模式,不提供任何连接服务资源。
05 匹配顺序、例外与 FINAL
规则是按类型自动排序的吗?
不是。理解 Rule 的核心是自上而下检查,命中后采用对应策略。DOMAIN 不会仅仅因为更精确就自动跳到 DOMAIN-SUFFIX 前面,某条规则写在后面也不会天然覆盖前面的规则。编辑时应把文件看成有顺序的判断过程,而不是一组会自动计算最佳结果的标签。解释任何命中结果,都应先沿着文件从上往下寻找第一条符合条件的规则。
[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
应如何逐行阅读这个片段?先问目标是不是 api.example.com;若是,使用 PROXY,不再靠后缀规则改变结果。否则检查目标是否属于 example.com 的域名范围,再考虑地址例外与 GEOIP。前面都没有匹配时,才由 FINAL 接收。这个阅读过程也提示了维护方法:特殊例外在前,范围归类在后,兜底收尾;每一层都要能说明为什么放在这里。
FINAL 为什么必须认真决定?
FINAL 是未命中前序规则时的最终策略,不是注释,也不是只有出错才使用的备用项。配置覆盖不完整时,大量请求可能到达这里。FINAL,DIRECT 与 FINAL,PROXY 表达两种不同的默认选择,没有脱离场景的统一答案。选择以前应确定自己的规则主要列举哪一类目标,并判断未列出的请求应该采取什么路径,而不是照抄一行看起来熟悉的结尾。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
这份极简配置是怎样的思路?只为列明的示例域名选择代理,其余交给 DIRECT。如果意图改成“只有明确允许的目标直接连接”,就需要重新组织前面的规则并选择相应兜底,而不是单改 FINAL 后假定全部行为仍然符合预期。兜底改变会影响所有尚未被列出的目标,测试范围也应随之扩大,至少覆盖一个例外和一个未列出的目标。
重复规则会让匹配更可靠吗?
不会。前面已经存在同条件规则时,后面的重复行通常不能修复它;若策略不同,反而造成维护者误以为后面的设置有效。删除重复前,应先确认两行条件是否真的一致,例如 DOMAIN 与 DOMAIN-SUFFIX 并不是重复。可以将规则按目的分组,记录“精确例外”“域名范围”“地址范围”“最终策略”,但不要仅为视觉整齐而改变已经验证过的优先关系。
新增规则后怎样检查遮挡?用目标域名从第一行开始模拟,找出新增规则之前是否已经有宽范围条件会命中。若存在,判断应该把新规则上移,还是缩小旧规则范围。不要把所有新规则统一放在文件末尾,尤其不能放到 FINAL 之后再期待它参与正常兜底前判断。对范围重叠的规则,应在修改说明里写清楚哪一条是例外以及为何优先。
为什么新顺序没有立即改变旧连接?
规则判断与连接建立有关,已建立的长连接或连接复用可能延续先前的处理结果。保存配置后,应重新发起测试请求,必要时在确认不会影响重要任务的前提下重新连接。不要仅刷新一个仍在复用连接的页面,就判定保存失败。比较时要控制请求、网络和服务器不变,同时区分“旧连接继续存在”与“新连接仍然命中错误规则”。
怎样证明调整没有造成旁路影响?除验证目标例外外,还要测试同后缀的另一个子域名、一个无关域名以及一个地址目标。只验证最关心的那一个请求,容易漏掉宽规则带来的变化。维护记录应保留修改前后的片段,而不是整份含有敏感信息的配置;这样下次出现差异时,能直接判断是范围变化、顺序变化,还是环境变化。
06 DNS、Host 与地址判断边界
域名能否解析与规则是否命中是一回事吗?
不是。DNS 解决域名如何得到地址的问题,规则决定请求采用什么策略。两者会相互影响,但不能互相替代:写对了 DOMAIN,不代表目标一定能解析;解析成功,也不代表 PROXY 的连接参数正确。排查时先把结果拆成几步:请求使用什么域名、得到什么地址、命中什么规则、通过哪条路径建立连接,再判断失败在哪个阶段。
General 中的 DNS 设置应该怎样改?先保留现有值并记录现象,再单独测试变更。下面的 system 表示使用系统 DNS 设置,是语法示例而不是对所有网络的固定建议。如果某个网络需要特定解析条件,应以该网络和应用内设置为准。不要同时替换多项解析相关设置,否则即使结果改善,也难以确定真正起作用的是哪一项。
[General]
dns-server = system
[Host]
portal.example.com = 192.0.2.10
[Rule]
DOMAIN,portal.example.com,DIRECT
FINAL,PROXY
Host 是否会把域名规则变成地址规则?
不应这样理解。Host 为指定域名提供映射结果,Rule 则描述路由条件。上例中,映射地址与 DIRECT 策略是两项分别写明的决定,不要假定写了 Host 就自动等于 DIRECT。测试时仍需看请求识别出的域名、地址和最终命中结果。若目标直接使用 IP,原本针对域名的 Host 条目也不是一个能匹配所有请求的通配入口。
哪些情况适合先考虑 Host?例如用户已掌握某个内部域名的正确地址,希望在受控测试中核对解析差异。使用前要确认映射地址与目标服务一致,并知道如何回退。示例地址不可作为真实网站的替代地址;任意为一个公共域名指定陌生 IP,可能导致服务不匹配、证书错误或连接失败。Host 不是把任何地址变成目标服务的方法。
为什么映射后仍然出现证书错误?
HTTPS 不只要求网络能到达一个 IP,还要求服务端对目标域名提供正确的证书与服务。Host 改变解析结果,不会自动改变服务器所提供的内容,也不会消除域名验证。出现证书相关错误时,应先恢复映射并比较,再检查是否写错地址或连接到了不对应的服务。不要把降低验证要求当作普通的解析修复步骤。
DNS 与 GEOIP 为什么会出现联动?GEOIP 根据地址判断,而域名的解析结果可能随网络、解析服务和服务端调度变化。相同域名得到不同 IP,就可能进入不同地址归属范围。这并不说明 GEOIP 自动改写了域名规则。如果某个域名必须固定采用某策略,应评估在前面增加明确的域名例外,而不是试图通过强行固定地址永久控制一个动态服务。
缓存与 IPv6 应怎样纳入验证?
缓存会使修改后的第一次观察与预期不同,旧连接也可能保留原地址。测试前应记录当前解析结果,重新发起连接,并按应用内实际提供的操作处理缓存。不要重复点击开关却不查看目标地址,因为这种操作可能并未改变请求所使用的解析信息。为得到可比较的结果,应尽量在同一网络、同一时间段内完成两次对照。
IPv6 则需要独立检查地址族。只为 IPv4 写 IP-CIDR,不能证明 IPv6 请求也受相同范围控制;同理,Host 中的一项映射并不意味着所有地址获取途径都符合你的设想。先确认请求是否使用 IPv6,再考虑 IP-CIDR6 或域名规则是否更贴合目的。不要在尚未观察到地址族之前,就把整个网络能力的开关当作第一个修复动作。
07 URL Rewrite 的用途与限制
URL Rewrite 与 Rule 分别改变什么?
Rule 主要决定连接使用哪种策略;URL Rewrite 针对匹配到的 URL 执行相应重写动作。把请求从一个网址重定向到另一个网址,不等于指定它走 PROXY;为域名指定 DIRECT,也不等于修改页面路径。需要按路径处理时,应先确认是否真的需要重写,而不是把完整 URL 填进 DOMAIN。两种分区可以同时存在,但应分别验证效果。
[URL Rewrite]
^http://example\.com/ https://example.com/ 302
这行片段表达了什么?开头是匹配表达式,中间是目标地址,最后是重定向状态码。它演示将以 http://example.com/ 开始的可见请求重定向到指定 HTTPS 地址。点号前的反斜杠让表达式按字面域名点号匹配,开头的 ^ 限定从 URL 起始位置检查。该例只用于说明结构,不应该推断成可以直接应用于任意网站的通用规则。
为什么表达式必须控制范围?
正则表达式中的点号、星号、括号等符号有自己的含义,并不总是代表可见字符本身。没有转义的点号可能匹配任意字符,缺少起始边界可能在意外位置命中。编写前应列出应当匹配和不应匹配的样例,逐一检查。域名看起来接近,不代表表达式只作用于那个域名;范围越宽,对登录、接口和资源加载的影响越难追踪。
目标地址为什么也要认真检查?重定向改变了请求接下来访问的位置,目标域名、路径和查询参数都可能影响页面行为。若规则将一个路径统一送往首页,原有页面定位与参数可能不再保留。只有确实需要保留捕获内容时,才进一步使用应用支持的替换语法,并在小范围副本中验证。不要把不理解的表达式整体粘贴到长期使用的配置。
HTTPS 路径能直接被普通规则读取吗?
不能预设可以。HTTPS 会加密请求内容,普通的域名路由信息不等于完整 URL 路径可见。某条针对路径的重写没有生效时,首先应判断当前请求是否满足可见性条件,而不是不断扩大域名匹配范围。不同请求的处理条件要在应用内核对;本页不把解密相关设置当作普通分流的必要步骤,也不建议为一次重写随意改变系统信任设置。
如果需求只是让某个域名使用代理,应该怎么做?回到 Rule,使用明确的 DOMAIN 或 DOMAIN-SUFFIX 即可,不必加入 URL Rewrite。只有确实需要改变请求 URL、并且能够验证请求可见性和目标行为时,才考虑相应分区。功能越接近请求内容,越需要谨慎控制影响范围;简单的路由目标应优先由简单的路由规则表达。
重定向循环与路径变化怎样排查?
先暂时移除新加的重写行,在配置副本中确认原请求是否恢复。如果重写目标再次被同一表达式匹配,可能产生反复重定向;即使表达式本身没有循环,服务端也可能按自己的规则跳回原地址。不要只观察页面最后显示了什么,还应记录开始 URL、重定向目标和失败发生的位置。每次仅保留一条候选重写,便于确定责任范围。
将 HTTP 改为 HTTPS 为什么不是任何情况下都能成功?目标服务必须实际支持对应域名与路径的 HTTPS,且证书与服务配置正确。重写不会给一个服务自动增加协议能力。遇到跳转后连接失败,应分别测试目标地址本身,再判断表达式是否有误。此处失败不应通过更改 FINAL 或 GEOIP 来掩盖,因为网址修改和连接策略是两条独立的验证线。
08 配置验证、排错与长期维护
修改后怎样确认“真正生效”?
先确认测试条件,再观察结果。记录当前网络、当前服务器、Global Routing 和启用配置,选择一个完整域名作为目标,重新建立请求。然后在应用内可查看的连接或日志信息中核对目标域名、目标地址、命中规则和策略;具体字段以应用内显示为准。页面能打开只是结果之一,不能单独证明走了哪条策略,更不能证明全部配置都正确。
应如何选择测试目标?至少包含三类:你刚修改的精确目标、与它范围相近但不应改变的目标,以及应当由 FINAL 处理的目标。测试后逐个记录预期与实际。若只验证一项,宽泛规则造成的误匹配很容易被忽略。对于地址规则,额外确认请求使用的是 IPv4 还是 IPv6;对于重写规则,则要记录开始 URL 与跳转后的地址。
| 观察现象 | 优先检查 | 下一步对照 |
|---|---|---|
| 新规则没有命中 | 启用配置、模式、前序规则 | 精确目标与新建连接 |
| 命中 PROXY 仍失败 | 服务器状态与连接参数 | 同目标的直接路径 |
| 只有部分资源失败 | 实际资源域名与拒绝规则 | 主站和失败资源分别测试 |
| 切换网络后结果不同 | 解析地址、地址族、网络条件 | 记录相同目标的两次结果 |
Connectivity Test 能证明什么?
它提供应用内测试条件下的连通性参考,不等于所有网站、协议与传输条件都正常。某个服务器测试通过,但特定域名失败时,仍需检查该请求的解析、规则和实际连接过程;测试不通过也应先核对测试条件与服务器信息。不要将一次测试结果写成固定性能结论,更不要用一个数值取代对目标请求的观察。
排错顺序应如何收敛?先回到最后一次确认正常的配置副本,判断问题是否随新修改出现。如果回退恢复,逐项重做变更;如果回退仍失败,再检查当前网络与已有服务器信息。这样能先区分配置改动和环境变化。切忌同时换服务器、改 DNS、改 FINAL 再重试,因为即使恢复访问,也失去了判断是哪项变化起作用的依据。
怎样阅读错误而不是只重复开关?
先区分解析阶段、建立连接阶段和目标服务响应阶段。没有得到地址时优先检查域名与 DNS;已有地址但连接失败时,检查路径与服务器参数;连接建立后出现服务端错误,则需要结合目标服务本身判断。某些提示可能需要更多上下文,不应仅凭一个词下结论。保留错误发生时的目标和模式,比频繁重连后只记住“时好时坏”更有价值。
准备求助时应提供哪些信息?说明使用 iPhone 还是 iPad、当前模式、相关规则前后顺序、失败目标和已经完成的对照测试。不要公开订阅地址、密码、UUID 或其他认证字段;截图中的查询参数同样需要移除。可将域名换成示例名称,但要保持精确匹配、后缀关系与顺序不变,否则用于分析的示例会失去原问题的结构。
规则怎样长期维护而不是越积越多?
每次新增都写清目的和验证范围,定期清理已经被前序规则完全覆盖的重复项。对于临时排错规则,验证结束后决定保留或撤回,不让短期试验悄悄变成默认行为。更新远程配置或已有订阅后,分别核对规则文件与服务器列表,不假设两者的更新时间或变化范围一致。应用更新通过 App Store 进行,具体要求以商店页面标注为准。
何时返回其他手册页面?首次导入与连接流程请回到快速上手教程;界面词含义查术语表;购买、恢复和常见现象查疑难解答。本页的查阅主线始终是“确认配置结构、缩小匹配范围、核对优先顺序、验证实际请求”。每次只解决一个可观察的问题,才能让后续配置仍然可以解释和回退。