官方手册 配置与规则参考

Shadowrocket 规则手册

按配置段查语法,按请求过程查匹配结果。本页面向已经拥有自己的订阅或服务器信息、需要维护规则文件的用户;示例域名与地址仅用于说明语法,不代表可用服务。

首次添加服务器、导入订阅和打开连接,请先沿着使用教程完成操作;本页解释这些步骤背后的配置关系,以及修改后怎样验证。教程负责上手主线,规则手册负责系统查阅,两者可以来回对照。

  • 配置文件:.conf
  • Rule:自上而下匹配
  • 修改前保留原文件
先区分购买、服务器与配置

Shadowrocket 是 Apple 平台付费客户端,客户端一次性买断 ≠ 线路套餐。本站不提供、不销售、不推荐节点或订阅。应用唯一获取入口是 App Store,正版核验步骤见下载与购买说明。

本页查阅目录

先确认文件和模式,再查具体关键字。出现异常时,从最后一章按证据回溯,不必一次替换整份配置。

01 / 文件组织

配置文件结构与生效范围

Shadowrocket 的配置文件不是服务器清单的另一种名称。服务器信息描述连接目标、认证参数与传输设置,配置文件则描述流量如何处理、名称如何解析以及哪些请求需要特殊操作。用户已有订阅更新了服务器,并不意味着当前规则文件也随之更新;反过来,导入一份规则文件也不意味着已经具备可连接的服务器。排查前先把这两层分开,才能避免在错误的位置反复修改。

识别配置段与行格式

常见的配置段包括 [General]、[Rule]、[Host] 与 [URL Rewrite]。方括号声明后续内容属于哪个配置段,直到出现下一个段名。不同段的语法并不相同:General 常见键值对,Rule 使用逗号分隔字段,Host 使用名称与地址的映射。不能因为某行单独看起来正确,就把它放进任意段中;所属段错误,同样会造成无法解析或行为偏离预期。

[General]
dns-server = system

[Rule]
DOMAIN,portal.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

[Host]
printer.example.com = 192.0.2.20

这份片段展示了段落组织,不是可以直接连接的完整服务配置。example.com 是文档示例域名,192.0.2.20 是文档示例地址,实际操作时应替换为自己有权管理的目标。示例里的 PROXY 也不会生成服务器,它需要当前已有的代理选择。先确认已有服务器能正常工作,再讨论某个域名是否交给 PROXY,验证过程才有明确前提。

从 Config 确认正在使用的文件

在 Config 中先查看当前选中的配置,再打开编辑内容。保存文件与选择文件是两个动作:保存到列表中的文件,不一定就是连接正在采用的文件。需要测试新稿时,可以保留原文件,另存一份具有可辨认名称的副本,再将副本设为当前配置。切换后返回 Home 核对 Global Routing,确认采用 Config,而不是仍停留在 Proxy 或 Direct。

远程配置与本地副本也应分开理解。远程内容再次更新时,原有本地改动可能不再保留,具体取决于使用的文件及更新方式。需要长期维护的个人规则,应先明确自己是在编辑远程文件的本地内容,还是独立副本。不要把“这次保存成功”理解为“以后每次更新都会保留”。每次更新后重新核对关键规则,是比猜测合并行为更可靠的做法。

先读结构,再改正文

首次接手较长文件时,先搜索段名,记录 Rule 起止位置和 FINAL 所在行,再查看是否存在外部规则引用或额外策略定义。不要只截取搜索结果中的一行就判断行为,因为该行上方可能已有更宽的匹配条件。来自不同来源的配置即使都使用相同关键字,也可能依赖不同的策略名称;拼接前应检查引用是否能在当前文件或运行环境中找到对应目标。

编辑器自动替换的中文逗号、全角方括号和弯引号不属于示例语法。建议直接在配置编辑区域输入英文标点,字段之间不插入说明性中文。注释放在独立行更容易阅读,也能避免把注释误当作策略名的一部分。空行可用于分组,但空行不代表终止匹配;规则的实际先后顺序仍由它们在 Rule 中的位置决定。

每份配置只保留一个清楚的最终出口

维护时将 FINAL 放在 Rule 末尾,并在其上方完成例外、域名和地址规则。FINAL 后面的普通规则没有机会继续参与这次规则匹配。

一份便于维护的文件,应让读者能够回答三个问题:当前文件在哪里选中、规则依赖哪些已存在的策略、修改失败后怎样恢复。先建立这些记录,再增加功能,比堆叠大量未验证的段落更有用。有关导出和换机保留文件的操作,可继续阅读配置备份与换机迁移;恢复文件后仍需重新核对当前配置和服务器选择。

02 / 运行前提

General、DNS 与 Global Routing

General 中的设置为连接和名称解析提供基础条件,Rule 则在这些条件下决定请求策略。遇到“规则正确但访问失败”时,不能只看 Rule:域名是否解析成功、服务器本身是否可达、系统是否已将连接交给 Shadowrocket,都可能先于目标规则影响结果。理解这些前提,可以把规则问题与网络问题分开,避免通过增加更多规则掩盖真正原因。

三种运行模式分别检查什么

Global Routing 中的 Config、Proxy、Direct 是运行姿态,不是三个可以同时启用的规则段。配置姿态 Config 按当前配置进行分流;代理姿态 Proxy 将普通转发流量交给代理路径;直连姿态 Direct 使用直连路径。系统路由、排除项以及具体连接限制仍可能影响实际流量,所以模式名称不能代替请求记录。测试 Rule 时应明确选择 Config,再观察目标请求的处理结果。

界面词中文说明适合的检查
Config配置姿态验证当前 Rule 的分流结果
Proxy代理姿态对照已有代理路径是否可用
Direct直连姿态对照当前网络的直连表现

例如,同一目标在 Proxy 可以访问,在 Config 却失败,检查重点应转向命中策略、所用策略对应的服务器以及解析差异。若两种姿态都失败,先确认已有服务器信息和基础连接,不宜直接认定是 DOMAIN-SUFFIX 写错。Direct 的成功也只说明直连路径在当时可用,不代表某条代理规则已经正确生效,更不代表所有相关资源都采用了相同路径。

DNS 设置不是策略替代品

[General]
dns-server = system

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

dns-server = system 表示使用系统提供的解析设置,是理解配置结构的简单起点,并非对所有网络的统一推荐。实际解析行为还与其他 DNS 选项、请求类型和当前连接环境有关。维护已有配置时,不应为了复制这个片段而删除原有 DNS 设置;应先记录现值,再用单一改动比较结果,必要时恢复。一次同时修改 DNS、规则与服务器,会失去判断依据。

域名规则比较的是名称,地址规则比较的是地址,两者之间可能出现解析过程。如果日志只显示地址,不能据此假定客户端始终掌握原始域名;如果日志显示域名,也不能据此认为后续连接不会失败。应把解析结果和连接结果分别记录。出现域名无法解析时,先检查解析链路;出现解析正常但连接超时时,再检查策略出口和目标连通性。

绕过项与按需连接的边界

已有文件中的绕过或排除设置可能让部分流量不进入预期的规则路径。这类设置与 Rule 中的 DIRECT 不完全相同:DIRECT 是规则命中后的策略,而排除可能发生在规则处理之前。修改前应阅读相关选项的应用内说明,确认它控制的是系统路由、代理例外还是其他范围。不要仅凭选项名称相似,就把其中一个当成另一个的替代。

On Demand 主要管理何时建立或恢复连接,不能替代 Rule 决定某个域名采用哪条策略。用户可能看到连接自动打开,却发现请求仍然直连;这种情况应先确认当前 Global Routing 和命中记录,而不是重复修改 On Demand。反过来,规则文件完整但连接没有建立,也不能期望 Rule 自行接管流量。连接时机与连接后的分流,是两层独立的问题。

调整 General 时,优先保留能说明原因的最小改动记录:原值是什么、改为哪一项、使用什么请求验证、结果有什么变化。连接恢复后再复测依赖局域网或其他名称解析的目标,避免只验证一个网站。General 的参数作用范围通常比单条域名规则更大,修改成功的判断应覆盖正常场景与例外场景,而不是只看首页能否打开。

先确认模式,再判断规则

本手册的 Rule 示例以 Config 为测试前提。若正在使用 Proxy 或 Direct,应先恢复这一前提,再比较规则结果。

03 / 名称匹配

DOMAIN、DOMAIN-SUFFIX 与 DOMAIN-KEYWORD

域名规则适合把访问意图表达为名称,而不是追随经常变化的服务器地址。编写时先确定需要匹配的是一个完整主机名、一个域名家族,还是包含某段文字的名称,再选择关键字。范围越宽,误命中的机会越大。维护个人配置通常应从精确匹配开始,在请求记录显示确有共同需求之后,再把多条精确规则归并成后缀规则。

DOMAIN:只处理明确的主机名

[Rule]
DOMAIN,login.example.com,PROXY
DOMAIN,static.example.com,DIRECT
FINAL,DIRECT

DOMAIN 用于完整域名匹配。第一条处理 login.example.com,不应把它理解为同时处理 api.login.example.com 或整个 example.com。规则字段中填写主机名,不填写协议头、端口或 URL 路径;例如浏览器地址栏里的完整地址,需要先提取名称部分。希望只处理某个路径时,单靠 DOMAIN 无法表达这一条件。

一个页面可以同时访问登录、图片、接口和统计等不同主机。给页面地址添加精确规则,只能覆盖其中一个名称。出现页面文字可见但图片缺失时,应查看失败请求实际访问的主机,而不是立即扩大规则到所有名称。把同一次打开页面产生的连接逐条分开,通常能发现需要补充的资源域名,也能避免不必要地改变其他业务的策略。

DOMAIN-SUFFIX:域名及其子域名

[Rule]
DOMAIN,local.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

DOMAIN-SUFFIX 用于匹配指定域名及其子域名。上例先为 local.example.com 留出直连例外,再让其余属于 example.com 的名称采用 PROXY。这里填写 example.com,不需要在前面增加星号,也不要把 *.example.com 当作相同写法。域名边界很重要,不能把后缀匹配理解为任意位置出现同一串字符。

例外必须放在宽规则前面。如果交换上例前两行,后缀规则先命中,下面的精确直连规则就无法改变这次结果。这不是 DOMAIN 优先级低,而是 Rule 按顺序处理。较精确的条件不会自动获得更高优先级;文件作者需要通过排列位置表达自己的意图。新增例外时,先找到可能提前覆盖它的所有宽规则,再决定插入点。

DOMAIN-KEYWORD:范围宽,先核对边界

[Rule]
DOMAIN-KEYWORD,example,PROXY
FINAL,DIRECT

DOMAIN-KEYWORD 检查域名中是否含有指定关键词,匹配范围不受某一个域名家族限制。上例适合说明语法,不适合作为未经检查的日常规则,因为名称中出现 example 并不代表它们属于同一组织或同一种业务。关键词短、含义常见时尤其容易误匹配。能够用精确域名或后缀表达的需求,应优先使用范围清楚的条件。

关键字范围常见误写
DOMAIN完整主机名把完整 URL 填进名称字段
DOMAIN-SUFFIX域名及其子域名增加不需要的星号前缀
DOMAIN-KEYWORD名称中含关键词把关键词当作组织边界

验证域名规则时,至少准备一个应命中的名称和一个不应命中的名称。对于后缀规则,还应包含根域名和子域名;对于关键词规则,应额外检查一个含有相同文字但不属于目标范围的名称。这样的反向样本能够暴露规则过宽的问题。只验证“目标可以打开”,无法判断是否把原本应该直连的其他请求也送到了代理路径。

域名中含国际化字符时,应核对请求记录中实际呈现的名称形式,再按客户端接受的格式填写。不要直接照搬带空格的显示标题,也不要把浏览器为便于阅读而呈现的文字当作最终匹配值。另一个常见误区是修改规则后反复刷新原页面:应用可能复用已有连接,应产生新的请求,并确认新连接采用了修改后的策略。

规则数量增多后,可将“精确例外、业务后缀、谨慎使用的关键词”分成连续的小组,但不要按关键字机械排序。排序应服从业务例外关系,而不是字母顺序。需要只让指定网站采用代理时,可对照指定网站分流写法,先建立小范围名单,再根据实际资源请求补齐,不必一次覆盖大量无关名称。

04 / 地址与特征

GEOIP、IP-CIDR、IP-CIDR6 与 USER-AGENT

地址规则解决的是“目标地址属于哪一段范围”,不是“用户正在使用哪个应用”。当请求直接访问地址、域名信息不可用,或者需要为明确的内部网段设置例外时,地址规则很有价值。但地址可能由不同业务共享,也可能随解析结果变化,因此不宜仅凭一次观察就把某个大型地址段长期固定到某条策略。先确认地址来源与维护责任,再决定是否写入配置。

IP-CIDR:地址和前缀长度共同定义范围

[Rule]
IP-CIDR,192.0.2.20/32,DIRECT,no-resolve
IP-CIDR,198.51.100.0/24,PROXY,no-resolve
FINAL,DIRECT

IPv4 的 IP-CIDR 字段由网络地址和前缀长度组成。/32 表示单个地址,/24 表示一段地址范围;数字不是端口,也不是优先级。上例使用文档示例地址,不能用于判断真实网络可达性。实际维护时,应确认填写的是需要覆盖的网络边界,而不是随意把一个目标地址后面加上较短前缀,否则可能扩大到许多不相关的目标。

no-resolve 是地址规则的可选参数,用来避免仅为检查这条规则而触发域名解析。它不表示关闭全部 DNS,也不意味着该规则必然命中。请求已经具备可用于比较的地址时,仍可进行地址匹配;只有域名信息而没有相应地址时,不能期待它主动完成解析再命中。排查这类规则时,要同时记录请求携带的是名称还是地址。

IP-CIDR6:单独检查 IPv6 路径

[Rule]
IP-CIDR6,2001:db8::20/128,DIRECT,no-resolve
IP-CIDR6,2001:db8:1::/48,PROXY,no-resolve
FINAL,DIRECT

IP-CIDR6 使用 IPv6 网络前缀,/128 可表示单个 IPv6 地址。示例中的 2001:db8:: 属于文档用途。只写 IPv4 地址规则,并不等于同一域名通过 IPv6 建立连接时也会命中;如果网络和目标同时提供两类地址,测试应覆盖实际使用的地址族。不要因为一次 IPv4 测试成功,就认定整个目标的地址分流已经完整。

出现同一目标在不同网络下策略不同的情况,先检查解析返回值及实际连接地址,再看配置是否只有其中一种地址规则。直接关闭某类地址能力可能暂时改变表现,却不能证明规则范围合理。若需求本质上针对一个稳定域名家族,优先考虑域名规则;若需求针对自己管理的明确网段,再使用相应地址规则表达,维护成本通常更可控。

GEOIP:按地址数据库归类

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY

GEOIP 根据地址数据库对目标地址进行归类。GEOIP,CN,DIRECT 表示匹配数据库归入 CN 的地址后采用 DIRECT,不代表按照网页语言、域名后缀或用户所在地判断。数据库归类与业务归属不一定一致,使用分布式基础设施的目标尤其如此。明确的业务例外应放在 GEOIP 前面,不宜依赖地址归类去推测一个域名应当采用的路径。

GEOIP 还依赖可用的地址信息。某次请求没有命中预想的地域条件时,应检查实际目标地址、数据库归类和前置规则,而不是只修改国家或地区代码。将 GEOIP 与 FINAL 组合时,还要清楚未命中部分会走哪里:上例把其他请求交给 PROXY,与 FINAL,DIRECT 的默认方向相反。复制片段前应读完最后一行。

USER-AGENT:请求特征不是应用身份

[Rule]
USER-AGENT,ExampleClient*,DIRECT
FINAL,PROXY

USER-AGENT 根据可获取的 User-Agent 信息匹配请求,示例用 ExampleClient* 表达以该文字开头的特征。它不是按应用名称分流的通用方式:多个应用可能使用相同标识,同一个应用也可能在不同请求中使用不同标识。对加密请求,如果没有可读取的请求头信息,就不能期待仅凭这条规则识别内部的 User-Agent。

使用 USER-AGENT 前,应先确认记录中确实能看到相应特征,再用一个明确的测试请求验证。不要为了让这条规则生效而随意增加解密范围,也不要把请求头匹配失败误判成代理服务器故障。名称、地址、请求头属于不同层面的证据;只有明确知道当前请求提供了哪种信息,才适合选择相应关键字。

05 / 决策顺序

PROXY、DIRECT、REJECT 与匹配优先级

规则由条件和动作组成:前面的字段说明匹配什么,策略字段说明匹配后怎样处理。PROXY、DIRECT、REJECT 是常见策略关键字,与 Global Routing 的界面词 Proxy、Direct 在大小写和使用位置上需要区分。读到一条规则时,应把条件和动作一起解释,不能只看域名是否出现。相同域名配上不同策略,行为可能完全不同。

三种策略分别承担什么作用

PROXY 将匹配流量交给对应的代理选择,需要用户已有可用服务器以及正确的连接参数。命中 PROXY 只是决定出口方向,不保证服务器连通,也不保证目标接受请求。DIRECT 表示直连目标,仍然需要正常解析与网络路径。REJECT 用于拒绝匹配请求,适合边界明确且确认可以阻断的目标,不应把它当作“失败后尝试其他路径”的指令。

策略处理含义验证重点
PROXY交给代理路径命中结果与已有服务器连通性
DIRECT采用直连路径解析结果与当前网络可达性
REJECT拒绝该请求是否只影响预定目标

DIRECT 不等于退出 Shadowrocket,也不是停止连接的开关。它可以是 Config 下某一条规则的处理结果,同时其他请求继续采用 PROXY。类似地,REJECT 不是整台设备断网,只作用于命中该条件的请求。但如果阻断了公共接口、认证服务或多个页面依赖的资源,用户看到的影响可能很广,所以应使用精确条件并保留回退方法。

先匹配的规则决定本次策略

[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN,office.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,DIRECT

上例先拒绝一个明确主机,再为另一个主机保留直连例外,其余属于该后缀的名称采用 PROXY,之后才检查 GEOIP,最后用 FINAL 处理未命中部分。这里的优先级来自位置,而不是关键字的“精确程度排名”。如果将后缀规则移到最前,两条精确规则会被提前覆盖;如果将 FINAL 移到最前,其余普通规则都无法参与本次判断。

匹配即停指的是这次 Rule 策略选择不再继续向后寻找另一条普通规则,不表示整个请求生命周期只运行一个配置功能。DNS、连接建立以及其他处理机制仍有各自阶段。也不要把它理解为连接失败后自动继续匹配下一行:规则命中 PROXY 后服务器连接失败,下面的 DIRECT 通常不是自动备用出口。需要恢复时应修复策略所依赖的路径,而不是等待后续规则接手。

FINAL:明确写出剩余请求的去向

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

FINAL 不需要域名或地址参数,它为前面没有匹配的请求提供最终策略。上例表达“列出的域名采用代理,其余直连”。若改为 FINAL,PROXY,则默认方向随之改变,所有未列出的请求都可能进入代理路径。很多看似局部的异常,实际来自复制配置时忽略了 FINAL。修改最终策略前,应先列出登录、局域网访问和常用服务等需要保留的例外。

维护时建议只保留一条位于末尾的 FINAL。多条 FINAL 不会形成依次尝试的备用链;第一条已经接管剩余请求,后面的同类条件没有机会参与。若某个编辑工具让文件中出现重复末尾规则,应先确认哪一段属于当前 Rule,再清理冗余。不要只删除看起来重复的行,而没有检查是否意外合并了两个不同来源的配置段。

自定义策略引用需要可解析

较复杂文件可能在策略字段使用自定义名称,而不是直接写 PROXY。此时必须确认该名称在当前配置和应用支持的机制中有定义,并且能找到可用目标。复制一条引用外部策略的规则,却没有复制或建立对应定义,会留下无法解释的依赖。本手册采用内置策略展示核心语法,避免将某份特定配置的命名习惯误认为固定关键字。

冲突判断要读上方,不只读相邻两行

寻找覆盖关系时,从 Rule 第一行向下追踪,直到首次命中。较早的关键词、地址规则或外部规则引用,都可能先于眼前的精确规则决定结果。

整理顺序的目标是让例外关系可读,而不是让文件看起来整齐。把每条规则的目的写成独立注释,记录为什么需要比下面一组规则更早处理。后续增删时先核对这条原因是否仍成立。能够解释规则位置,才有条件安全合并;无法说明用途的规则,应先隔离测试,不宜直接推入长期使用的文件。

06 / 名称映射与请求处理

Host 与 URL Rewrite 的用途边界

Host 与 URL Rewrite 都可能改变用户看到的访问结果,但它们解决的问题不同。Host 主要提供名称到地址的映射,URL Rewrite 根据可见 URL 进行匹配和处理。前者不是代理策略,后者也不是域名分流的替代品。判断需要哪一种功能时,先用一句话描述目标:是指定解析地址、选择连接路径,还是将某种地址形式改为另一种形式。

Host:固定映射不等于固定出口

[Host]
printer.example.com = 192.0.2.20

[Rule]
DOMAIN,printer.example.com,DIRECT
FINAL,PROXY

示例将一个名称映射到文档示例地址,同时通过 Rule 为这个名称选择 DIRECT。这两行分别承担解析和路径决策,不能相互替代。实际使用时,地址必须是自己有权使用、当前网络也能够到达的目标。把域名指向某个地址,并不会让原本不可达的网络自动可达,也不会凭空建立认证、端口转发或服务器端的虚拟主机配置。

固定映射还可能使原有的动态解析失去作用。如果目标依赖地址变化、就近调度或故障切换,长期保留过时映射可能导致连接超时。添加前应确认需求是否确实需要固定地址,并记录撤销方法。测试时不仅要检查名称是否返回预期地址,还应确认访问的服务、端口与证书身份是否符合预期,不能只凭地址能够回应就判断业务正常。

Host 不会替换浏览器正在访问的主机身份。访问 HTTPS 名称时,服务端证书仍需要满足该名称的验证要求。把名称映射到不提供相应服务的地址,可能产生证书错误或错误站点;这不应通过忽略验证来处理。正确做法是检查目标服务是否支持该名称,以及映射是否用于经过授权的测试环境。恢复正常解析后,再确认相关缓存已经更新。

URL Rewrite:正则、目标与动作

[URL Rewrite]
^http://legacy\.example\.com/(.*)$ https://www.example.com/$1 302

这条示例以正则表达式匹配旧地址,将捕获的路径带到新地址,并返回 302 跳转。点号前的反斜线表示匹配实际点号,开头和结尾的锚点限制匹配范围,括号捕获的内容通过 $1 引用。这里两个域名都是示例,发布到自己的配置前应换成有权测试的目标,并先检查查询参数和编码是否按需求保留。

正则表达式中的点号默认有特殊含义,若忘记转义,可能匹配并非目标的名称;省略主机边界,也可能覆盖看起来相似的其他地址。维护 URL Rewrite 时,至少准备命中样本、相似但不应命中的样本,以及包含路径和查询参数的样本。不要仅用首页地址测试,因为首页没有路径时成功,并不能证明更长 URL 的处理仍然正确。

加密可见性限制与处理阶段

完整 HTTPS URL 的路径位于加密内容中,普通连接分流不能自然读取其中所有字段。某条 URL Rewrite 能否作用于目标,取决于请求信息是否可见及相关处理条件。不能把“已经写了正则”当成“已经具备读取路径的条件”。也不应为了验证一条跳转规则,直接扩大解密范围;涉及证书与加密处理的设置,应单独评估授权、隐私与应用兼容性。

Rule 的自上而下原则不能简单推广成“整个配置文件从上到下只执行一次”。配置段承担不同功能,文件里 Host 排在 Rule 前面,并不意味着它一定按文字位置先运行。检查改写问题时应沿请求过程观察:原始地址是什么、是否出现跳转、跳转后的目标是什么、后续连接采用什么策略。这样才能区分改写未触发、跳转目标失败和后续分流错误。

出现重复跳转,先停用本次新增规则

如果新目标再次匹配旧规则,或者站点把请求跳回原地址,可能形成循环。恢复原配置后确认正常,再缩小正则范围,不要继续叠加相反方向的跳转。

浏览器可能缓存重定向结果,业务应用也可能缓存解析与连接。撤销规则后仍然出现旧行为,不一定代表文件未保存;应确认当前配置后,用新的测试请求或独立测试会话复核。对长期维护的改写,记录目的、适用主机、预期动作和删除条件,避免目标站点已经调整地址结构,而本地规则仍然强制沿用过时流程。

Host 与 URL Rewrite 最适合小范围、可解释的需求,不宜作为修复所有访问异常的入口。若只是希望某个站点采用 PROXY,应回到域名规则;若是解析结果错误,先确认 DNS 与已有映射;若是请求被站点拒绝,则还要查看身份验证与业务响应。先判断问题所在层,再选择配置段,文件会更短,故障也更容易复现。

07 / 组合示例

常见分流写法与修改步骤

组合示例应当从需求开始,而不是从规则数量开始。先确定默认策略,再列出必须例外处理的目标,最后决定需要精确域名、后缀还是地址条件。下面每份片段都是独立思路,不应把它们连续粘贴到同一个 Rule 中。合并多个方案时,必须重新处理 FINAL、例外顺序与重复条件,否则后粘贴的部分可能完全不参与判断。

指定网站采用代理,其余直连

[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
FINAL,DIRECT

这类配置适合需求边界清楚、只希望名单内目标采用代理的场景。先放需要直连的账户主机,再放两个示例域名家族,剩余请求交给 DIRECT。实际添加时,先用一个目标确认服务器与规则都正常,然后逐步补充该业务依赖的其他主机。不要因为页面缺少一个资源,就把 FINAL 改为 PROXY;那会改变所有未列出的请求,不再是原来的小范围方案。

维护名单时,应把用户输入的页面地址与实际资源请求分开记录。业务可能将静态文件、接口和登录流程放在其他域名下,后缀规则不能自动推断这些关系。补充时只加入观察到且确有需要的目标,同时验证一个不在名单中的常用站点仍然直连。详细操作可结合只让指定网站采用代理的规则说明阅读。

明确例外直连,其余采用代理

[Rule]
DOMAIN,portal.example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
FINAL,PROXY

这份片段采用相反方向:把明确主机和常见私有 IPv4 地址段作为直连例外,其余交给代理。私有地址规则只能覆盖相应地址条件,不能保证所有局域网发现、广播或特殊网络功能都按预期工作。当前网络若使用其他范围或 IPv6,还需要根据实际情况单独分析。不要把几条私有地址规则当作完整的系统网络配置替代品。

采用 FINAL,PROXY 前,应确认已有代理路径能够处理自己的日常需求,并检查身份认证、局域网服务和必要的直连例外。某个服务需要直连时,先为它写范围明确的条件,再测试是否影响共享基础设施上的其他请求。若一个业务拥有大量动态域名,应持续依据记录维护,而不是猜测一个宽关键词后期待它长期准确。

阻断明确主机,保留同域其他请求

[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,DIRECT

这里仅阻断一个精确主机,不把整个后缀全部拒绝。第一次测试 REJECT 时,最好选择可以确认用途且不影响关键流程的目标,随后检查页面、登录与接口是否仍正常。请求失败是该规则预期效果的一部分,但用户看到失败不一定能判断来源,因此应保留清楚注释。发生误伤时,撤销这条规则比继续增加多个补丁更容易恢复。

若被阻断主机还承载其他必要业务,规则无法仅凭域名区分其内部用途。此时应重新评估需求,不要把更宽的阻断范围当作补救。某条请求被 REJECT 后,应用可能改用其他目标或重试,记录中出现新请求并不意味着原规则失效。应比较每次请求的实际名称与策略,确认是同一目标重试,还是业务发起了另一条连接。

把新规则安全并入已有文件

先复制原配置,再找到现有 Rule 和末尾 FINAL。将新例外放到可能覆盖它的宽规则之前,不要另起第二个 Rule 段来猜测合并效果。若现有文件包含规则引用,应先理解其范围,再决定插入到引用前还是后。保存后选择这份副本,确认 Global Routing 为 Config,最后产生新请求并核对命中结果。验证失败时回到原副本,避免在不确定状态上继续叠加修改。

  1. 用文字写出目标、默认策略和需要保留的例外。
  2. 记录当前配置、服务器选择和 Global Routing。
  3. 只加入本次必要规则,检查字段、策略名称与 FINAL 位置。
  4. 分别测试应命中、应排除以及日常依赖的请求。
  5. 确认结果后保存备注;未达预期就恢复原文件继续定位。

订阅更新可能改变已有服务器列表,但不能替代上述规则验证。若当前策略所依赖的服务器发生变化,需要重新检查代理路径;若只是服务器显示名称变化,也不能据此推断规则内容已变。管理多个订阅时,可参考多个订阅的分组与整理,将来源管理与规则维护分开,避免把重复服务器问题误写成规则例外。

08 / 校对与回退

验证命中、定位故障与恢复配置

规则验证的目标不是让一次访问碰巧成功,而是证明指定请求按预定条件采用了预定策略,同时没有破坏应保留的行为。一次完整记录应包含测试时间、当前配置名称、Global Routing、目标名称或地址、实际命中结果以及连接表现。时间仅用于对照本次测试,不代表应用更新信息。证据足够具体,下一次网络变化时才能与旧结果比较。

按层定位,不从规则数量猜原因

先确认连接是否建立、当前文件是否选中,再检查请求是否进入预期处理范围。接下来核对名称解析与实际目标,然后查看首次命中的条件,最后确认策略出口是否可用。若前一层已经失败,后一层的修改通常没有意义。例如名称解析失败时,添加更多域名后缀不一定有帮助;命中 PROXY 但服务器连接失败时,移动 FINAL 也不是针对性修复。

观察现象优先检查下一步
所有新规则都没有效果当前配置与 Config 姿态确认文件选中并产生新连接
目标命中了更早规则上方覆盖关系把必要例外移到宽规则之前
命中 PROXY 但连接失败已有服务器及目标连通性对照 Proxy 姿态和具体错误
只有部分资源失败失败资源实际主机逐条核对相关请求而非页面标题
撤销后仍有旧行为缓存、长连接与当前文件建立新的测试请求后再比较

Connectivity Test 可以辅助观察已有服务器的测试表现,但不能证明所有站点、协议和业务请求都可用。某个测试成功后,真实访问仍可能遇到名称解析、目标拒绝或业务认证问题。应将测试结果视为证据的一部分,而非最终结论。同样,网页打开成功也不能证明它走了 PROXY,必须结合对应请求的策略记录进行判断。

建立正向、反向与回归样本

正向样本用于证明目标应该命中,反向样本用于证明范围没有扩大,回归样本用于证明原本正常的功能仍然可用。比如新增 DOMAIN-SUFFIX 后,测试根域名和一个子域名,再测试不属于该后缀的名称,最后检查登录与局域网访问。不要为了测试而访问不了解的目标,使用自己有权访问且用途清楚的服务即可;示例域名只承担语法演示。

测试时尽量只改变一个变量。保持服务器、网络和运行模式不变,只调整一条规则,比较结果后再进行下一项。若必须切换网络,应将它单独记录,避免把网络变化带来的解析差异归因于规则修改。页面会复用连接时,应关闭相关测试会话并重新发起请求;新规则通常需要用新连接观察,旧连接的延续行为不能作为唯一判断依据。

日志分享与敏感信息处理

排查需要分享记录时,只保留复现问题所需的目标、规则、策略与错误信息。订阅链接中的认证参数、服务器密码、私密请求路径、账户标识以及完整配置中的认证内容都应先移除。截图也可能带有这些信息,不能因为只是一张图片就跳过检查。用明确的示例值替换敏感内容,并说明哪些字段已经替换,才能兼顾可复现性与信息保护。

如需缩小问题,可建立最小测试配置:保留必要 General 设置、目标的一条规则和一个 FINAL,继续使用自己已有的服务器。若最小配置正常,再逐组恢复原规则,直到定位造成差异的部分。恢复时保持原有组内顺序,不要同时重排整个文件。这样能判断问题来自某条条件、某个外部引用,还是多个例外之间的先后关系。

恢复后也要重新确认运行状态

回退不只是把文字改回原样。应重新选择原配置,确认 Global Routing 和已有服务器选择,必要时重新建立连接,然后对照先前正常样本。若原配置恢复后仍异常,应考虑网络、服务器或目标业务已经变化,不要继续将所有问题归结为本次编辑。保留修改前后的两个文件及简短记录,可以避免反复凭记忆恢复时引入新的差异。

完成一次修改的判断标准

目标命中正确、例外没有误伤、日常请求通过回归测试,并且能够恢复到修改前状态。四项都确认后,再将测试副本作为长期配置使用。

换机恢复时,先确认应用来自 App Store,再恢复自己保存的服务器信息与配置文件,最后重新检查当前配置和系统连接授权。具体系统要求以 App Store 页面标注为准。购买与重新获取应用的问题请查阅已购恢复说明及该页的购买常见问题;首次连接步骤回到使用教程,规则含义则按本页目录逐项核对。

长期维护可采用一份稳定稿和一份测试稿:稳定稿只接收已经验证的改动,测试稿用于新增条件与复现实验。定期清理不再使用的例外,检查固定地址是否仍有效,并在更新远程配置后复查个人规则。规则文件的价值不在长度,而在每个条件都能解释、每次结果都能核对、每次修改都能回退。