这类故障最像「升级后突然坏了」:订阅节点还在,默认代理也能连,只有按域名或地区分流的规则不命中。先别急着改订阅格式,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.dat、geoip.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 文档里仍能看到 geoip、geosite 字段,但它们已经标注为 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 调了旧核心不支持的字段 |
| Geoview | opkg list-installed 能看到包 | 日志提示 geo、geosite、rule-set 转换失败 |
| geo 资源 | geoip / geosite 包版本存在 | 文件缺失、时间戳过旧、格式不匹配 |
| route 引用 | 生成配置里有 rule_set | route 仍引用不存在的 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-box | 1.12 之后规则字段兼容性变化明显 |
geoview | PassWall 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 found | Geoview 没装或路径不在预期位置 | 安装同 feed 的 Geoview 包 |
geosite parse failed | geosite 数据文件版本或格式不对 | 重装同源 v2ray-geosite |
geoip parse failed | geoip 数据文件缺失或损坏 | 重装同源 v2ray-geoip |
rule-set not found | 生成配置引用了不存在的 rule-set tag | 查生成出的 sing-box 配置 |
unknown field | sing-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 写配置时。
推荐顺序:
- 备份
/etc/config/passwall和当前软件包列表。 - 确认
luci-app-passwall、sing-box、geoview、geo 资源来自同一 feed。 - 缺 Geoview 时先安装同源包。
- 规则资源损坏时重装
v2ray-geoip、v2ray-geosite。 - 重启 PassWall,读取第一条日志错误。
- 仍失败时,再考虑把 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。规则命中正常但连接失败,才回到订阅或节点参数。