Featured image of post 雅典娜路由器上的 homeproxy / sing-box 代理记录

雅典娜路由器上的 homeproxy / sing-box 代理记录

将京东云无线宝 AX6600 雅典娜刷成 LibWrt 后,用 homeproxy 管理 sing-box,在路由器上提供一个常驻的内网混合代理出口。

本文接在上一篇《京东云无线宝 AX6600 雅典娜刷 OpenWrt/LibWrt 记录》后面。刷机解决的是“这台路由器能不能被我控制”;这一篇只记录它作为常驻代理出口时,homeproxysing-box 这一层怎么用、怎么检查、怎么避免踩坑。

1. 为什么放到路由器上

我之前一直把代理看成某台电脑上的客户端:Windows 开一个,WSL 里再想办法连过去,其他设备或服务又要单独处理一遍。

这在个人电脑上能用,但不够稳定:

  • Windows 睡眠、重启或代理客户端退出,其他设备就跟着断。
  • 127.0.0.1:10808 只对当前机器有意义,换到 WSL、手机、远端机器或其他运行环境就要重新解释。
  • 很多命令行工具只是临时需要公网出口,不值得把代理写进全局配置。
  • 路由器本来就是常开设备,把轻量代理服务放在这一层更自然。

所以现在的目标很简单:

1
2
3
4
雅典娜 / LibWrt
  homeproxy -> sing-box mixed proxy
              10.77.0.3:10808  # WSL / wg_school 优先使用
              10.22.0.3:10808  # 同一路由器的 fallback

一句话:桌面代理可以临时用,常驻代理出口放到路由器上。

2. 当前状态

这是写本文时的实机状态。节点、订阅、密码、私钥都不写进公开博客,也不放截图。

项目当前值
设备京东云无线宝 AX6600 雅典娜
系统LibWrt SNAPSHOT
内核Linux 6.12.87aarch64
homeproxyrunning
sing-box1.12.25
LAN192.168.221.1/24
WireGuard/LAN 地址10.22.0.3/32
wg_school 地址10.77.0.3/32
代理监听:::10808

路由器上看到的关键进程类似这样:

1
2
/sbin/ujail ... sing-box-c ...
/usr/bin/sing-box run --config /var/run/homeproxy/sing-box-c.json

这里可以看出两点:

  • homeproxy 负责生成和托管运行时配置。
  • 真正提供代理能力的是 sing-box

3. WebUI 配置思路

我这套方案不直接手写完整 sing-box 配置,而是通过 LuCI 里的 homeproxy 管。

大体上关注这几类配置就够了:

配置面关注点
服务开关启用 homeproxy,确认保存并应用后服务能启动
节点/订阅只在路由器本地维护,不写进文章和仓库
入站监听开一个 mixed HTTP/SOCKS5 入口,端口用 10808
访问范围只给可信 LAN / WireGuard 侧设备访问,不对 WAN 开放
DNS/透明代理不是本文重点,先保持方案收敛,按需要再单独调

LuCI 登录页可以直接打开:

1
http://10.22.0.3/cgi-bin/luci/

配置时我的原则是:先把“显式代理”跑稳,也就是客户端明确使用 http://10.77.0.3:10808http://10.22.0.3:10808。透明代理、DNS 分流、自动劫持这些能力很强,但排错面也更大,不适合一开始就全打开。

如果要给文章配图,建议只截这些安全页面:

  • homeproxy 服务状态和开关。
  • mixed 监听端口配置。
  • 防火墙区域或接口绑定。

不要截节点列表、订阅 URL、访问密钥、出站配置细节。

4. 客户端怎么用

WSL 里跑 gitghcurlpipnpm 这类命令时,优先用 one-shot 环境变量:

1
2
3
https_proxy=http://10.77.0.3:10808 \
http_proxy=http://10.77.0.3:10808 \
git fetch

如果 10.77.0.3:10808 不通,再切回同一路由器的 fallback:

1
2
3
https_proxy=http://10.22.0.3:10808 \
http_proxy=http://10.22.0.3:10808 \
git fetch

不建议写:

1
git config --global http.proxy ...

全局代理很容易在换网络、换机器、换 WireGuard 状态之后反过来坑自己。临时命令需要代理,就给这个命令加环境变量;长期服务需要代理,再写到对应服务自己的配置里。

5. 怎么确认代理真的工作

5.1 从 WSL 测出口

测试 generate_204

1
2
3
4
5
curl -sS -o /dev/null \
  -w 'http_code=%{http_code} connect=%{http_connect} time=%{time_total}\n' \
  --max-time 20 \
  --proxy http://10.77.0.3:10808 \
  https://www.google.com/generate_204

本文写作时返回:

1
http_code=204 connect=200 time=0.726562

测试 GitHub:

1
2
3
4
5
curl -sS -o /dev/null \
  -w 'http_code=%{http_code} connect=%{http_connect} time=%{time_total}\n' \
  --max-time 20 \
  --proxy http://10.77.0.3:10808 \
  https://github.com

本文写作时返回:

1
http_code=200 connect=200 time=1.654275

如果 10.77.0.3:10808 不通,把命令里的代理地址换成 10.22.0.3:10808 再试一次。

5.2 从路由器看服务

登录路由器后检查:

1
2
3
4
/etc/init.d/homeproxy status
sing-box version
netstat -lntp | grep 10808
ps w | grep -E 'sing-box|homeproxy' | grep -v grep

我这次看到的核心结果:

1
2
3
homeproxy: running
sing-box version 1.12.25
tcp  0  0  :::10808  :::*  LISTEN  sing-box

这三个结果同时成立,才说明“路由器上的代理入口”这一层是活的。

6. 安全边界

代理服务最重要的是边界,不是端口能通就完事。

我的公开边界:

1
2
3
不要把 10808 暴露到 WAN。
只给可信 LAN / WireGuard 侧设备使用。
节点、订阅、密码、API key、WireGuard private key 不进 Git,不进博客,不进截图。

特别注意 :::10808。它说明 socket 层是 all-interface 监听,但这不等于公网已经可访问,也不等于一定安全。最终能不能从外部访问,还取决于 OpenWrt 防火墙、接口区域、WAN 入站规则和上游网络。

我的处理方式是:监听可以统一,但防火墙边界必须明确;公开文章里也只写服务边界和验证方式,不写可复用的敏感配置。

7. 踩坑点

7.1 不要把本机地址当成通用地址

127.0.0.1:10808 只适合“当前这台机器自己访问自己”。一旦换到 WSL、路由器、手机或另一台电脑,它就不是同一个服务了。

这也是我把常驻出口放到雅典娜的原因:内网设备统一记路由器地址,不再猜某台电脑上的本地端口。

7.2 不要在 WSL 里用 10.77.0.11:10808

10.77.0.11 是这台 Windows/WSL 主机给其他 WireGuard peer 看的地址,不适合作为 WSL 自己的默认代理。

WSL 里优先使用:

1
http://10.77.0.3:10808

同一路由器 fallback:

1
http://10.22.0.3:10808

只有明确知道 Windows 侧代理正在运行时,才临时用:

1
http://127.0.0.1:10808

7.3 先显式代理,再考虑透明代理

显式代理的好处是排错直接:

1
客户端命令 -> 代理地址 -> 目标网站

透明代理一旦叠加 DNS、路由表、防火墙和分流规则,排查复杂度会高很多。我的建议是先让 curl --proxy ... 稳定,再按需打开更复杂的分流能力。

8. 维护清单

平时按下面顺序排查:

  1. LuCI 里 homeproxy 是否启用。
  2. 路由器上 /etc/init.d/homeproxy status 是否 running。
  3. sing-box version 是否正常输出。
  4. netstat -lntp | grep 10808 是否能看到 sing-box 监听。
  5. WSL 里用 curl --proxy http://10.77.0.3:10808generate_204 或 GitHub。
  6. 不通时切到 10.22.0.3:10808 再测一次,判断是代理坏了还是某条 WireGuard/路由路径坏了。
  7. 确认防火墙没有把 10808 开到 WAN。

这篇文章以后主要给我自己看:雅典娜上的 homeproxy 不是“又装了一个插件”,而是给内网可信设备提供一个稳定、可验证、不过度耦合某台电脑状态的代理出口。

潇洒人间一键仙
使用 Hugo 构建
主题 StackJimmy 设计