折腾 OpenWrt 透明代理这么多年,我写过不少配置文件。从早期的 Shadowsocks + dnsmasq,到后来 Clash 在路由器上跑,再到 sing-box 内核——每一次换方案都意味着重新学习一套语法、重写一份 YAML。直到我发现了 Open-Box,一个把 sing-box 内核、Node 运行时、GeoSite/GeoIP 数据全部打包在一起的一体化方案,装完之后浏览器里点点就能用。
说实话,第一次看到它的 README 时我半信半疑:"不需要手写配置文件"——这种话我听过太多次了。但实际用下来,它确实做到了。
装上它有多简单
我的路由器是 x86_64 软路由,SSH 登上去一行命令搞定:
curl -fsSL https://raw.githubusercontent.com/liandu2024/Open-Box/main/scripts/install.sh | sh脚本跑完会打印一个地址 http://<路由器IP>:2026,浏览器打开,第一次访问设个密码,就进面板了。没有编辑配置文件,没有折腾 init 脚本,没有手动下规则数据库——完整安装包里自带 GeoSite 和 GeoIP 数据,首次启动不用等下载。
ARM 设备同样支持,aarch64 架构有对应的安装包。要求也不高:512MB 存储、512MB 内存起步。脚本会自动检查并用 opkg 或 apk 补齐 kmod-tun、kmod-nft-queue 这类系统依赖。
我最看重的几个设计
切换线路不断连接
这是我用下来最惊喜的一点。以前在 Clash 里切一下策略组,正在下载的文件、正在看的视频、SSH 会话全断。Open-Box 的做法是:站点集在直连和代理之间切换时只改写一份很小的"开关规则集",内核不重启。已建立的连接不受影响,新连接和 DNS 在一秒内按新线路走。
只有遇到纯 tun 模式(设备没有 nftables 重定向)、切换牵动入口旁路、或分流设置改过还没重启内核时,才会自动重新部署并重启一次。绝大多数日常操作都是无感切换。
节点组:自动和手动混排
我订阅了两个机场,一个主用下载和流媒体,一个专门跑 AI 服务。Open-Box 的节点组支持自动择优(url-test)、手动选择(select)和故障转移三种类型,而且可以混排。动态组按关键词跟随订阅更新——机场新增了节点,不用手动加进来,自动收编。
故障转移组的逻辑也清晰:主用不通才切备用,主用恢复再切回。不是那种无脑轮询。
链式代理:住宅 IP 的正确打开方式
我有几个住宅 IP 出口(socks5/http),以前要让流量先经过一个前置节点再到住宅出口,配置起来很麻烦。Open-Box 把这个做成了可视化操作:给出口指定一个前置节点或节点组,流量先经前置再到出口,建好后当普通节点用,节点组、站点集、终端分流里都能选。
规则调试:输入域名看真实路由
这个功能太实用了。在规则页面输入一个域名,可以预览规则匹配结果,还能实际发起请求看走的是哪条线路、DNS 解析到什么、命中了哪条规则。排查"为什么这个网站没走代理"这种问题,以前要翻日志翻半天,现在一秒看到。
DNS 接管:三种模式各司其职
DNS 一直是透明代理最容易出问题的环节。Open-Box 提供三种接管模式:
接管 dnsmasq 转发:让 dnsmasq 把查询转发给内核
防火墙劫持:直接在 nftables 层面劫持 DNS 流量
禁用:不接管,手动配置
国内域名和代理域名分别解析,哪个域名用哪个上游由站点集当前的出口决定,不用单独配。要把某个域名固定成某个 IP,用"DNS 重写"功能。
入口旁路:直连流量不进内核
走直连的站点集里的 IP 集合(比如 geoip-cn)在系统入口(nftables)直接放行,不进内核。这意味着国内流量完全不经过 sing-box,性能开销几乎为零。如果前面存在可能把同一 IP 送去别处的规则,Open-Box 会自动改走兼容路径,原因写在部署结果里——这种细节考虑让我用着很放心。
协议支持
日常用到的协议它都覆盖了:shadowsocks、vmess、vless(含 REALITY)、trojan、hysteria2(含端口跳跃)、tuic、anytls、wireguard。订阅格式支持 Clash YAML、base64 分享链接和常见 sing-box 分享链接。我手头的订阅直接填进去就能用。
一些实用的细节
屏蔽 QUIC:后端设置里一个开关,打开后走代理线路的 QUIC(UDP 443)被拒绝,浏览器自动退回 TCP。有些机场对 UDP 支持不好,这个开关能避免 YouTube 之类网站卡在 QUIC 握手上。直连站点不受影响。
规则集导入:在站点集编辑窗口点"导入规则",输入规则列表地址可以先预览解析结果,再把域名、域名后缀、关键词、IP/CIDR 等明细导入。导入后保存在本地,启动时不再依赖远程链接。规则集链接和本地明细可以同时保留、同时生效。
导出与导入:把分流、站点集、节点组、DNS、面板设置打成一个文件,可选带上订阅和节点、链式代理、终端分流。新设备导入后重启内核即可。文件不含面板密码,这点考虑得周到。我换路由器时就是靠这个功能十分钟迁移完毕。
流量统计:按终端设备、节点和访问目标查看每日流量。排查哪个设备在跑流量、哪个节点吃流量,一目了然。
LuCI 兜底页:面板万一打不开,路由器的"服务 → Open-Box"页面可以启停服务、恢复直连或卸载。多一层保险,不至于面板挂了就彻底失联。
升级与回退
升级在面板里点一下就行,也可以 SSH 执行更新脚本。升级会保留订阅、规则和面板密码,校验各组件完整性,只有变化的才下载。
如果升级后面板或内核异常,一行命令回退到上一个版本:
curl -fsSL https://raw.githubusercontent.com/liandu2024/Open-Box/main/scripts/update.sh | sh -s -- --rollback --direct回退会自动识别架构、下载上一个版本的完整安装包、校验 SHA256 后替换。校验或替换失败会保留现有安装。数据目录不会被改动。
我的使用感受
用了一个星期下来,Open-Box 填补了我长期以来的一个空白:OpenWrt 上缺少一个真正"装好就能用"的透明代理方案。它没有牺牲灵活性——链式代理、终端分流、规则集链接这些高级功能都在,只是把配置过程从"编辑文本文件"变成了"浏览器里点点"。
我最欣赏的是它对细节的处理:切换不重启内核(但添加分组或者订阅需要重启)、入口旁路直连流量不进内核、规则调试可以看到真实路由、DNS 按站点集出口自动选择上游。每一个都是实际使用中会遇到的痛点,而它都给了合理的解决方案。
如果你也在 OpenWrt 上折腾透明代理,或者受够了手写配置文件,值得试试。项目地址在 GitHub,x86_64 和 aarch64 都有安装包。
