这类故障最像「升级后突然坏了」:订阅节点还在,默认代理也能连,只有按域名或地区分流的规则不命中。先别急着改订阅格式,OpenWrt 上更常见的是 PassWall 页面包、sing-box 核心、Geoview、geo 资源文件不是同一批。

先判断:是节点失效,还是规则链没生成?

把问题拆成两条线:连接能不能出去,规则有没有命中。前者看 outbound 和节点参数,后者看 sing-box 路由配置、Geoview 转换、rule-set 文件。

表现更可能原因第一条命令
默认模式能连,分流规则不生效Geoview 缺失或 rule-set 未生成`opkg list-installed
日志出现 geosite / geoip / rule-set 报错sing-box 1.12 规则迁移后旧数据未转换logread -e sing-box -e passwall
LuCI 保存成功,重启后还是旧规则生成配置失败或 service 未重启到新配置`ps
手动替换 ipk 后失效luci-app、核心、依赖、规则资源版本错配`opkg list-installed
只有某些域名走错出口规则顺序或 rule-set 内容错误grep -R "rule_set|geosite|geoip" /tmp /var 2>/dev/null

如果「全都不能连」,先排节点和 DNS。本文只处理「连接还在,PassWall sing-box Geoview 依赖导致分流链断掉」这一类。

为什么 25.3.9 之后要单独看 Geoview?

PassWall 仓库说明了关键变化:sing-box 1.12.0 移除了原 Geo 支持,只保留规则集方向;从 25.3.9 版起,PassWall 的 sing-box 分流依赖 Geoview,把 Geofile 数据转换成 rule sets。仓库还明确写到,未安装 Geoview 将无法使用 sing-box 分流。

这意味着旧排查习惯会误导你。以前看到 geosite.datgeoip.dat 存在,容易以为规则资源没问题;现在还要确认 PassWall 有没有把这些资源转换成 sing-box 能吃的 rule-set 形式。

opkg update
opkg list-installed | grep -E 'luci-app-passwall|passwall|sing-box|geoview|geoip|geosite'
sing-box version
logread -e passwall -e sing-box -e geoview

看输出时重点记录三项:luci-app-passwall 版本、sing-box 版本、geoview 是否存在。PassWall releases 页面在 2026-05 可见 26.5.3-1、26.5.11-1、26.5.20-1 这几批版本;如果你的 LuCI 是新包,核心或 Geoview 却来自旧 feed,问题就很容易出在转换链。

sing-box 1.12 的规则变化到底影响哪里?

sing-box 官方迁移文档把 GeoIP / Geosite 的迁移方向写得很直接:迁到 rule-sets。route rule 文档里仍能看到 geoipgeosite 字段,但它们已经标注为 deprecated,并提示迁移到 rule sets。

对 PassWall 用户来说,影响不是「语法名字变了」这么简单,而是运行链路多了一步:

PassWall LuCI 规则选择
  -> Geofile / geo 资源
  -> Geoview 转换
  -> sing-box rule_set
  -> route.rules 引用 rule_set
  -> outbound tag

其中任一层缺失,表现都可能是「规则不命中」。最容易漏的是 Geoview,因为它不像 sing-box 核心那样一眼能看到进程。

层级正常信号异常信号
LuCI 页面规则模式、节点、订阅可保存保存后日志立刻报生成失败
sing-box 核心sing-box version 可执行新 LuCI 调了旧核心不支持的字段
Geoviewopkg list-installed 能看到包日志提示 geo、geosite、rule-set 转换失败
geo 资源geoip / geosite 包版本存在文件缺失、时间戳过旧、格式不匹配
route 引用生成配置里有 rule_setroute 仍引用不存在的 tag

OpenWrt 上该怎么查这三层包?

不要只在 LuCI 软件包页面看「已安装」。SSH 里把包名、版本、feed 来源一起记下来,更容易发现混装。

opkg list-installed | grep -E 'passwall|sing-box|geoview|v2ray-geo|geosite|geoip'
opkg info luci-app-passwall
opkg info sing-box
opkg info geoview

如果使用 iStoreOS 或第三方固件,先确认它的 feed 是否仍在维护 PassWall 相关包。手动上传 release ipk 时,至少要同批处理这些对象:

对象为什么要同批检查
luci-app-passwall页面生成逻辑和依赖声明在这里
luci-i18n-passwall-zh-cn不是核心故障点,但混版本会让页面字段误读
sing-box1.12 之后规则字段兼容性变化明显
geoviewPassWall sing-box 分流转换链依赖它
v2ray-geoip / v2ray-geosite规则源数据版本太旧会让转换结果异常

最稳的做法是从同一套 PassWall feed 或同一批 release 补齐包,而不是今天换 LuCI、明天换核心、后天再换 geo 资源。

日志里出现 geosite、geoip、rule-set,分别怎么读?

先抓第一条错误,不要只看最后一行。生成失败通常会在 PassWall 或 Geoview 阶段先报,sing-box 只是拿到坏配置后的结果。

/etc/init.d/passwall restart
logread -f | grep -Ei 'passwall|sing-box|geoview|geoip|geosite|rule-set|rule_set'

常见读法如下:

日志关键词先怀疑什么下一步
geoview not foundGeoview 没装或路径不在预期位置安装同 feed 的 Geoview 包
geosite parse failedgeosite 数据文件版本或格式不对重装同源 v2ray-geosite
geoip parse failedgeoip 数据文件缺失或损坏重装同源 v2ray-geoip
rule-set not found生成配置引用了不存在的 rule-set tag查生成出的 sing-box 配置
unknown fieldsing-box 核心和 LuCI 生成逻辑不匹配统一 sing-box 与 PassWall 版本

如果日志只显示连接失败,没有任何 rule-set、geo、配置生成错误,再回头查订阅节点、DNS 和出站参数。

生成出的 sing-box 配置要看哪里?

不同固件和 PassWall 版本的运行目录可能不完全一致,先用进程参数找配置路径。

ps | grep '[s]ing-box'
find /tmp /var -name '*sing*box*.json' 2>/dev/null

找到运行配置后,看三类字段:

grep -n '"rule_set"\|"rules"\|"outbounds"\|"final"\|"geosite"\|"geoip"' /path/to/sing-box.json
sing-box check -c /path/to/sing-box.json

正常情况下,route 里应该能看到 rules 引用 rule_set,并且每条规则最终指向存在的 outbound tag。sing-box check 能过,只代表 JSON 语法和部分引用没问题;要确认分流命中,还要看运行日志或面板连接记录。

订阅格式不能跟上新路由链时怎么办?

有些订阅返回的是旧 Clash YAML、V2Ray base64 或只含节点 URL。PassWall 可以导入节点,不代表它能自动替你生成一套适合 sing-box 1.12+ 的路由链。节点输入和路由规则是两件事。

家庭软路由常见场景是:手机、电脑、电视都共用同一台 OpenWrt,PassWall 只是全屋入口;如果订阅侧长期只维护旧格式,而你又切到 sing-box 核心,最好保留一份兼容 Clash / Singbox / V2Ray 的订阅作为多端输入基线。这样排查时可以把「订阅内容不兼容」和「PassWall 规则链缺包」分开。

这一步不是让你立刻换服务,而是建立可对照样本:同一个 OpenWrt、同一版 PassWall、同一条测试域名,只替换订阅输入,看 rule-set 生成和 outbound 命中是否变化。

修复顺序:先补依赖,还是先降级 sing-box?

优先补齐同源依赖,不要第一步就降级核心。降级会引入另一组兼容性问题,尤其是 LuCI 生成逻辑已经按新版 sing-box 写配置时。

推荐顺序:

  1. 备份 /etc/config/passwall 和当前软件包列表。
  2. 确认 luci-app-passwallsing-boxgeoview、geo 资源来自同一 feed。
  3. 缺 Geoview 时先安装同源包。
  4. 规则资源损坏时重装 v2ray-geoipv2ray-geosite
  5. 重启 PassWall,读取第一条日志错误。
  6. 仍失败时,再考虑把 PassWall 与 sing-box 一起退回同一批旧版本。

备份命令可以这样写:

mkdir -p /root/passwall-debug
cp /etc/config/passwall /root/passwall-debug/passwall.$(date +%F).bak
opkg list-installed | grep -E 'passwall|sing-box|geoview|geo' > /root/passwall-debug/packages.$(date +%F).txt
logread -e passwall -e sing-box -e geoview > /root/passwall-debug/log.$(date +%F).txt

如果你是手动安装 ipk,先不要混用 PassWall 与 PassWall2 的包。PassWall2 releases 在 2026-05 也会列出 sing-box、geoview、v2ray-geoip、v2ray-geosite 等版本,但那是另一套插件链路。

怎么确认已经修好?

不要只看网页能不能打开。分流问题要确认「规则命中」和「出口选择」两件事。

/etc/init.d/passwall restart
logread -e passwall -e sing-box -e geoview
sing-box check -c /path/to/sing-box.json

然后做三组测试:

测试预期结果说明
默认出站测试能连到测试服务节点链路正常
规则域名测试命中对应 rule_set分流规则正常
直连域名测试不进入代理 outbound分流边界正常

如果三组都正常,再把家庭设备逐台恢复。软路由排错最怕全家设备同时测:缓存、DNS、应用重试会把日志打乱。

相关阅读

FAQ

PassWall 升级后 sing-box 分流突然失效,最先查什么?

先查 Geoview 是否安装,再查 sing-box 版本。PassWall 仓库说明 25.3.9 起 sing-box 分流依赖 Geoview,缺它时规则转换链会先出问题。

为什么日志里还看到 geosite、geoip,但规则不命中?

sing-box 1.12 之后 GeoIP / Geosite 的迁移方向是 rule_set。旧字段、旧数据和新核心混用时,页面仍可能显示规则名,运行配置却没生成可用规则集。

只替换 luci-app-passwall 的 ipk 可以吗?

不建议只换一个 ipk。LuCI、核心、Geoview、v2ray-geoip、v2ray-geosite 最好来自同一套 feed 或同一批 release,避免依赖链错位。

PassWall2 也要看 Geoview 吗?

PassWall2 的 release 同样会列出 sing-box、geoview 和 geo 资源版本。排查时按同样思路看依赖,但不要把 PassWall 与 PassWall2 的包混装。

路由修好后怎么确认不是订阅问题?

先用一个已知可用节点做 TCP 连接测试,再看日志里的 rule_set 命中和 outbound tag。规则命中正常但连接失败,才回到订阅或节点参数。