HomeProxy 的页面只是入口。真正影响 DNS 和路由的是 UCI 配置、生成脚本、sing-box JSON、procd 进程、dnsmasq 片段和 firewall4 规则。页面显示运行,仍可能卡在生成文件、进程拉起或 nft 规则加载中的某一层。

官方仓库描述 HomeProxy 是 powered by sing-box 的 ImmortalWrt 代理平台。init 脚本里写得更具体:它调用 /usr/bin/sing-box,生成客户端配置 /var/run/homeproxy/sing-box-c.json,再由 procd 启动 sing-box-c

先查哪 5 个文件和命令?

/etc/init.d/homeproxy status
logread -e homeproxy
ls -l /var/run/homeproxy/
sing-box check -c /var/run/homeproxy/sing-box-c.json
fw4 print | grep -i homeproxy
位置作用异常时的表现
/etc/config/homeproxyUCI 持久配置页面保存后字段没变
/var/run/homeproxy/sing-box-c.json客户端运行配置sing-box 启动失败或仍在跑旧配置
/var/run/homeproxy/homeproxy.logHomeProxy 主日志生成脚本报错
/tmp/dnsmasq.d/dnsmasq-homeproxy.d/dnsmasq 片段目录DNS 没转到预期端口
/var/run/homeproxy/fw4_post.nft生成的 nft 规则透明转发或回流异常

/var/run/tmp 都是运行期目录。重启后会重新生成,所以不要只看文件存在,还要看时间戳是否晚于你最后一次保存配置。

procd 有没有真的拉起 sing-box?

init 脚本里启用了 USE_PROCD=1。客户端实例的命令是:

/usr/bin/sing-box run --config /var/run/homeproxy/sing-box-c.json

状态页说运行,但 ps 里没有 sing-box-c.json,先查这三处:

ps | grep sing-box
cat /var/run/homeproxy/sing-box-c.log
logread -e sing-box

日志里出现 JSON parse、outbound tag 不存在、rule-set 下载失败,都属于 sing-box 配置层。此时先修生成出来的 JSON,不要急着改 LuCI 的 DNS 页面。

DNS 请求到底有没有进 HomeProxy?

HomeProxy 可能会写 dnsmasq 配置片段。第一步不是换上游 DNS,而是确认片段是否生成:

ls -l /tmp/dnsmasq.d/dnsmasq-homeproxy.d/
cat /tmp/dnsmasq.d/dnsmasq-homeproxy.d/dnsmasq-homeproxy.conf

再用同一个域名测试路由器地址:

nslookup example.com 192.168.1.1
logread -e dnsmasq

如果 dnsmasq 片段没生成,DNS 请求未必进 HomeProxy。如果片段存在但查询超时,再看 sing-box JSON 里的 dns.serversdns.rules 和出站 tag。

路由规则该看哪些 sing-box 字段?

sing-box route 文档里,几个字段最容易影响实际出口:

字段作用常见错法
route.rules逐条匹配连接规则引用不存在的 outbound
route.rule_set远程或本地规则集下载失败后页面仍显示旧状态
route.final默认 outbound留空时使用第一个 outbound,排错时容易误判
auto_detect_interface自动绑定默认网卡多出口设备可能选错接口
default_interface指定默认网卡和自动检测混用时看不出效果

jq 看配置比在页面里逐项找更快:

jq '.dns, .route, .outbounds[]?.tag' /var/run/homeproxy/sing-box-c.json

没有 jq 就把 JSON 拷到电脑上格式化。先确认所有 tag 都存在,再看规则顺序;否则 route 命中了也可能指向一个不存在的 outbound。

firewall4 要不要一起查?

要。DNS 正常但透明入口不通,常见原因是 nft 规则没刷新或加载顺序不对。

fw4 print | grep -i homeproxy
ls -l /var/run/homeproxy/fw4_post.nft
service firewall restart
logread -e firewall

重启 firewall 后短时间恢复,说明问题偏规则生成或加载顺序。把 HomeProxy 日志、fw4_post.nft 时间戳和 /etc/config/firewall 一起记录,后面才好对比。

怎么做最小复测?

只拿一台测试设备,固定一个域名和一个 App:

  1. 设备 DNS 指向路由器。
  2. 清空该设备 DNS 缓存或重连 Wi-Fi。
  3. 打开测试域名。
  4. 看 dnsmasq 日志。
  5. 看 sing-box 连接和 route 命中。

先别把所有设备都纳入测试,也不要同时启用多份订阅。多端要同步时,可以留一份配套订阅线路作为输入基线;HomeProxy 本身仍然按路由器日志排。

相关阅读

FAQ

HomeProxy 页面显示运行就一定生效吗?

不一定。init 脚本会生成 sing-box JSON 并交给 procd 运行。页面状态正常,也要确认 /var/run/homeproxy/sing-box-c.json、进程和日志。

HomeProxy 的客户端 sing-box 配置在哪里?

官方 init 脚本里的客户端实例叫 sing-box-c,运行参数是 run --config /var/run/homeproxy/sing-box-c.json。排错时先看这个文件是否存在、时间戳是否正确。

DNS 问题先查 HomeProxy 还是 dnsmasq?

先查生成的 dnsmasq 配置和 HomeProxy 日志。/tmp/dnsmasq.d/dnsmasq-homeproxy.d/dnsmasq-homeproxy.conf 没生成时,DNS 请求可能根本没进入预期链路。

规则不命中要看哪些 sing-box 字段?

重点看 route.rulesroute.rule_setroute.finalauto_detect_interfacedefault_interface,这些字段决定连接进哪个 outbound。