PassWall2 分流规则教程:可复制模板、语法优先级与不生效排查
简答:PassWall2 分流规则最稳妥的配置顺序是:内网直连 → 指定服务例外 → 国内域名/IP直连 → 默认代理。特别是指定服务如果也被 geosite:cn 命中,必须把它放在国内直连规则之前,否则可能提前走直连。先用一个单节点和一条明确的 domain 或 full 规则验证,再逐步加入 geosite、geoip、IPv6 和其他高级选项。
定义:PassWall2 分流规则,是根据域名、目标 IP、网络协议或规则资源,把流量交给直连、代理、黑洞或指定节点处理的一组匹配条件。
先照抄这套最小规则,再验证是否命中
本文是 PassWall2 使用指南,不是该项目或相关软件的官方页面。由于固件、PassWall2 版本和所选内核会影响字段名称,以下路径以当前 LuCI 页面中能看到的实际选项为准。
如果你的目标是“局域网直连、指定服务走代理、国内网站直连、其余流量走默认代理”,建议先进入 服务 → PassWall2 → 节点列表,编辑或新建一个分流节点。上游配置示例使用 protocol '_shunt' 创建分流节点,并设置 default_node、domainStrategy、domainMatcher 和 shunt_group 等字段。可查看 PassWall2 上游默认配置示例。
| 顺序 | 规则用途 | 匹配示例 | 目标 |
|---|---|---|---|
| 1 | 路由器、局域网和保留地址 | 192.168.0.0/16、10.0.0.0/8、172.16.0.0/12 | 直连 |
| 2 | 必须指定代理的服务例外 | full:api.example.com、domain:example.com | 指定单节点或节点组 |
| 3 | 国内域名 | geosite:cn | 直连 |
| 4 | 国内 IP | geoip:cn | 直连 |
| 5 | 未命中流量 | 不填写匹配条件 | 默认代理节点 |
这里的“顺序”是配置模板的安全排列方式,不等于所有版本和内核都保证按照 LuCI 表格的视觉顺序逐条停止匹配。PassWall2 会把规则写入当前分流节点,Xray 与 sing-box 再按各自生成的配置处理;因此,必须通过日志或实际连接结果验证,而不能只看页面上的行号。
- 先确认一个普通节点可以单独启动。
- 新建分流节点,协议或类型选择当前页面提供的分流选项。
- 把默认节点设置为已经验证可用的单节点;不要一开始就使用负载均衡组。
- 添加上表中的内网、指定服务、国内域名和国内 IP 规则。
- 点击保存并应用,只测试一个局域网地址、一个指定域名和一个国内域名。
规则管理页面的字段应该怎么填
在当前上游 LuCI 代码中,分流表会显示每条规则对应的目标节点,并额外提供默认节点、直连、黑洞、FakeDNS 和预代理等选项。规则所在的分流组由 shunt_group 控制;只有属于当前分流组的规则才会被放入该分流节点。可查看上游分流页面字段实现。
| 界面字段或配置项 | 作用 | 填写建议 |
|---|---|---|
| 分流节点 | 承载默认节点和规则映射 | 先选择一个明确支持的分流类型,不要把规则写在未被主节点引用的节点上 |
| 默认节点 | 处理未命中的流量 | 选择已单独验证可用的节点;官方默认配置中对应 default_node |
| 规则组 | 决定哪些规则被当前分流节点加载 | 检查规则的 group 是否与分流节点的 shunt_group 一致 |
| 网络协议 | 限制 TCP、UDP 或两者 | 网页先用 TCP;实时通信场景再确认是否需要 UDP |
| 域名列表 | 按域名或域名资源匹配 | 每行一个条目,先使用明确的 full: 或 domain: |
| IP 列表 | 按 IP、CIDR 或 geoip 资源匹配 | 先用内网 CIDR 验证,再加入 geoip:cn |
| 目标节点 | 决定直连、代理或阻断 | 先选“直连”或单节点;黑洞和节点组留到规则验证后 |
上游示例还展示了 domain_list、ip_list、network 和 group 等配置项,并将 geosite:cn、geoip:cn、CIDR 和普通域名写入这些列表。字段是否在当前版本直接显示为中文名称,需以实际 LuCI 页面为准。
domain、full、geosite、geoip、CIDR 怎么区分
以下是 PassWall2 上游默认配置中能直接看到的示例和常见对照。它们不能简单视为所有 Xray、sing-box 版本都完全等价的通用语法;尤其是高级匹配和远程 rule-set,必须先看当前页面帮助、生成配置或日志。
| 写法 | 通常填写位置 | 适用场景 | 使用前注意 |
|---|---|---|---|
full:api.example.com | 域名列表 | 只针对一个明确完整域名 | 适合最小复现;当前字段是否保留该前缀需核对生成配置 |
domain:example.com | 域名列表 | 覆盖一个域名及其常见子域名 | 范围比 full: 大,误匹配时先改用 full: |
geosite:cn | 域名列表 | 按 geosite 数据中的分类匹配 | 需要规则资源存在并被当前内核加载;不能只看文件名判断成功 |
geoip:cn | IP 列表 | 按 geoip 数据中的地址分类匹配 | 域名解析后的 IP、IPv4/IPv6 和内核策略都会影响结果 |
192.168.0.0/16 | IP 列表 | 局域网、保留网段或已核实地址段 | 适合最小验证,避免一开始引入大型规则资源 |
regexp: | 可能出现在域名匹配字段 | 具有稳定命名规律的一组域名 | 当前上游默认配置未把它作为基础示例;是否可直接填写需核对当前内核与生成配置 |
PassWall2 当前分流页面在 Xray 类型下提供 domainStrategy 和 domainMatcher。其中 AsIs 只按域名路由,IPIfNonMatch 会在域名规则未命中后解析 A 或 AAAA 再重新尝试,IPOnDemand 则在存在 IP 规则时解析域名。页面同时提供 hybrid 和 linear 两种域名匹配选项。具体选项和说明以当前上游代码为准。
关于 Xray 和 sing-box:PassWall2 同时支持两类内核,但不能据此推断同一条规则在两个内核中具有完全相同的解析、资源和匹配行为。官方默认配置同时包含 Xray 分流字段以及 sing-box 相关的远程 rule-set 示例,因此更稳妥的做法是:先用 full:、domain: 和 CIDR 建立最小闭环,再逐步测试 geosite:、geoip: 或远程规则。可对照当前上游默认配置中的字段。
三套可复制模板:基础、指定服务与单节点验证
下面的内容是填写对照,不是可以不经修改直接导入所有固件的 UCI 文件。节点名称、规则组名称和目标节点必须替换成当前页面中的实际值。
模板一:内网直连,其他流量默认代理
- 规则一:内网直连:IP 列表填写
192.168.0.0/16、10.0.0.0/8、172.16.0.0/12,目标选择直连。 - 规则二:国内域名直连:域名列表填写
geosite:cn,目标选择直连。 - 规则三:国内 IP 直连:IP 列表填写
geoip:cn,目标选择直连。 - 默认节点:选择一个已经单独测试成功的代理节点。
模板二:指定服务优先于国内直连
- 规则一:指定域名例外:域名列表先填写
full:api.example.com,必要时再添加domain:example.com,目标选择指定单节点。 - 规则二:内网直连:填写局域网 CIDR,目标选择直连。
- 规则三:国内直连:填写
geosite:cn和geoip:cn,目标选择直连。 - 默认节点:选择普通代理节点。
如果某服务同时拥有登录域名、接口域名、静态资源域名和 CDN 域名,不要只按应用名称猜测。先从 PassWall2 日志、浏览器开发者工具或终端解析结果确认实际域名,再逐条添加。这样可以避免把不相关的域名一起代理,也能更容易判断究竟是哪条规则命中。
模板三:最小复现
- 暂时关闭或移除 geosite、geoip、正则和节点组。
- 只保留一条
full:example.com规则。 - 目标设置为一个单独可用的节点。
- 默认节点也暂时设置为同一个单节点。
- 保存应用后,只访问这一个域名并查看日志。
如果最小复现成功,再依次恢复内网规则、指定服务规则、国内规则和默认兜底。每次只增加一类变量,才容易定位问题来自规则语法、规则组、DNS 还是节点本身。
规则不生效时,按现象建立最小闭环
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| 规则完全没有效果 | 分流节点是否被主节点引用,规则组是否一致 | 确认 protocol 为分流类型,并检查 group 与 shunt_group |
| 指定域名仍然直连 | 是否被国内规则提前匹配 | 把指定域名例外移到 geosite:cn 和 geoip:cn 之前,再用单节点测试 |
geosite:cn 不命中 | 规则资源是否存在、路径是否正确、当前内核是否加载 | 查看规则资源状态;临时换成一个明确的 domain: 规则 |
| IPv4 正常但 IPv6 仍直连 | 目标是否解析出 AAAA,转发模式是否接管 IPv6 | 分别用 nslookup 或 dig 查看 A/AAAA,并临时关闭 IPv6 路径或使用明确支持 IPv6 的转发模式进行对照 |
| 规则命中但连接失败 | 节点本身、UDP/TCP 范围或 DNS 策略 | 将目标改为单一节点,先测试 TCP;需要 UDP 时再单独确认 |
| 启用 FakeDNS 后行为变化 | 代理规则是否启用 FakeDNS,客户端是否能处理返回地址 | 先关闭该规则的 FakeDNS 做对照,再根据当前页面说明恢复 |
- 先确认运行状态:PassWall2 已启用,主节点确实指向分流节点,而不是只保存了一个未引用的规则节点。
- 再确认规则组:上游页面会根据当前分流节点的
shunt_group筛选规则;规则属于其他组时,页面可能保存成功,但当前分流节点不会使用它。 - 再确认资源:上游默认配置包含
geosite_update、geoip_update、规则文件位置以及更新地址字段,但实际文件路径和资源状态应以当前配置为准。 - 再确认域名策略:Xray 模式下,
AsIs、IPIfNonMatch和IPOnDemand对 IP 规则的参与方式不同。若问题只在 IP 规则出现,先把域名策略改为当前页面提供的另一种值进行对照。 - 最后看日志和抓取结果:关注实际请求域名、A/AAAA 解析、是否使用 TCP/UDP、最终节点以及连接错误。规则命中、出口选择和连接成功不是同一个结果,不能只凭其中一项下结论。
FakeDNS、IPv6 和 DNS 都应当作为排查变量,而不是直接认定为故障原因。上游页面明确把 FakeDNS设置为分流规则级选项,并提示其适用于让节点服务器获得目标域名等场景;如果启用后出现异常,最简单的验证方式是只关闭该条规则的 FakeDNS,再重复同一域名测试。可查看 FakeDNS、分流目标和域名策略的上游字段说明。
回滚:保存原有规则文本;出现全网无法访问时,先把主节点改回已经验证成功的单节点,关闭最近新增的 geosite、geoip、FakeDNS 和 IPv6 相关选项,再逐项恢复。不要同时修改节点、DNS、分流组和规则资源,否则无法判断故障来源。
常见问题
PassWall2 分流规则是不是一定从上到下匹配?
不能把 LuCI 页面显示顺序直接当成所有版本和内核的统一运行保证。更稳妥的配置方式是把具体规则放在宽泛规则前面:内网之后放指定服务例外,再放 geosite:cn、geoip:cn,最后设置默认节点;然后用日志和实际连接结果验证。
为什么指定服务规则写了,还是走直连?
最常见的排查方向是它同时被 geosite:cn 命中,或者规则组没有被当前分流节点加载。先把 full: 或 domain: 规则放到国内直连规则之前,确认 group 与 shunt_group 一致,再将目标临时改为单一节点。
domain: 和 full: 应该怎么选?
需要只匹配一个明确完整域名时,优先用 full: 做最小复现;需要覆盖某个域名及其子域名时,再考虑 domain:。当前字段是否直接接受这些前缀,要以生成配置、页面帮助和日志为准。
geosite:cn 或 geoip:cn 不生效怎么办?
先检查规则资源是否存在、实际路径是否正确、当前分流节点是否引用了这些规则,以及当前内核是否支持对应格式。然后暂时改用一个明确的 full: 或 domain: 规则,区分资源问题、规则组问题和节点问题。
Xray 和 sing-box 能不能完全共用一套 PassWall2 规则?
不能直接假定完全兼容。PassWall2 提供两类内核和相应字段,但规则资源、远程 rule-set、DNS 和域名匹配行为可能不同。建议先用 full:、domain: 和 CIDR 建立最小闭环,再逐项加入 geosite、geoip 或高级规则。
为什么 IPv4 正常,IPv6 却没有按规则走?
这只能先作为排查假设。检查目标域名是否返回 AAAA、当前转发模式是否接管 IPv6,以及规则网络范围是否包含需要的协议。可以暂时对照关闭 IPv6 路径或只测试 IPv4,确认问题是否与地址族有关。
相关阅读
- PassWall2 分流设置:规则顺序和默认节点
- PassWall2 规则不生效排查
- PassWall2 路由日志怎么看
- PassWall2 DNS 设置与分流验证
- PassWall2 IPv6 连接失败排查