写在前面
最近有一些小伙伴私信问我咱们的TestHub开源项目是否支持私有化部署,也有一些小伙伴提到本地部署后如何远程访问。前者是肯定可以的,后者如果没有公网服务器的话,那只能通过内网穿透来实现了。
其实在之前的文章中,我也分别介绍过ZeroTier、FRP、NPS这几款内网穿透工具。不过这几款工具像ZeroTier涉及到异地组网、部署难度较高;FRP则依赖公网服务器(这就自相矛盾了,要是有公网服务器干嘛还内网穿透)。
刚好最近看到一些其他博主介绍的ZeroNews这款产品(地址:zeronews.cc/),于是我就结合本地TestHub开源项目,自己手动部署了一套。最后体验下来,你还别说,不仅部署难度小,访问起来也挺丝滑。下面就来具体介绍我的实践过程。
一、安装Agent
1.安装 ZeroNews
我是MacBook Pro(M1)版本,下面就以Mac版本为例。下载安装也比较简单,只需要运行以下命令即可。
bash
mkdir -p /Applications/zeronews
cd /Applications/zeronews
curl -o zeronews.tmp https://download.zeronews.cc/macos/arm/zeronews
mv zeronews.tmp zeronews
chmod +x zeronews
值得一提的是,ZeroNews支持Windows、Linux、MacOS、Docker、NAS等全平台部署。
其他系统对应的安装方式,大家可以访问官网查看:user.zeronews.cc/setup/start

2.绑定 Agent Token
Token是注册试用后自动生成的,在快速开始页面就能看到,一个Token支持多个认证多个 Agent。
bash
./zeronews set token pqlFM30MnjfTJy8M
出现success表示绑定成功。

二、部署映射服务
1.快速添加映射
将本地运行的内部服务(例如 http://127.0.0.1:8080)安全映射至公网域名。实现公网用户可直接访问内网资源。
我本机运行TestHub,前端是用的3000端口,因此我这里把3000端口映射至公网域名。这里的"vhcfkhshpy.fy.takin.cc"是zeronews生成的域名,后面也可以在个人管理后台页面添加更多的域名和端口映射。
bash
./zeronews add https 127.0.0.1:3000 vhcfkhshpy.fy.takin.cc
2.启动 Agent
bash
# 在前台启动
./zeronews start
# 在后台启动,加上 -d 参数
./zeronews start -d
PS:
- 前台启动,只能在前台运行,当 Dos 窗口关闭时,程序会退出。
- 后台启动,可以实现 zeronews 开机自启动,并保持程序在后台运行。
启动 Agent 后,在浏览器打开 vhcfkhshpy.fy.takin.cc,您可以在任意公网环境下快速开始访问您的内网服务。
还有一点需要注意的是,如果你的项目配置文件中限制了指定域名访问,一定要把ZeroNews生成的访问域名添加到项目配置文件中。例如我这个项目映射的是3000端口,涉及到前端配置文件vite.config.js,那么则需要在这个配置文件的server.allowedHosts中加上ZeroNews生成的访问域名。否则会出现如下提示:

具体在哪个配置文件中添加需要看你映射的是哪个端口,如果你的项目配置文件没有限制,可以随便访问,则不需要做此操作!

三、访问映射服务
配置成功后,重启前端服务,用另一台电脑通过远端访问,登录页面正常访问,输入账号密码也成功登录。

可以看到,此时我在另一台电脑上访问的是ZeroNews生成的公网域名,不再是127.0.0.1或是localhost。这意味着,无论何时何地,都可以通过域名穿透访问该台机器上部署的内网服务。

AI用例生成相关功能也正常。

AI自动化测试功能也正常(注意:这里启动的是部署TestHub服务的电脑上的浏览器,而不是打开网址访问的那台电脑,当然这和TestHub项目的设计机制有关)。

四、添加更多域名端口
可能有的小伙伴会好奇,如何在同一个电脑设备上添加多个端口映射,访问不同的内网端口?下面就为大家一一演示。
例如我前面添加的是前端服务3000端口的映射,这里我还想要远程访问Django的admin管理后台,那么则可以继续添加一个后台8000端口的映射。
1.添加域名
先在ZeroNews个人后台的"域名端口"下添加域名,这个域名的前缀可以自定义,你可以取得有标识一点,例如我是testhub的Django管理后台,这里我就设置的是testhub-admin。


2.添加端口映射
在"映射"中给已添加的新域名绑定端口映射。例如我的后端端口是8000,则需要在配置弹框中"公网访问地址"选择前面添加好域名,"内网映射IP和端口"填写你要映射的本地服务的端口号8000.


3.公网访问新域名
前面配置完成后,这时我们在任意电脑上即可通过新的域名访问内网的Django管理后台:testhub-admin.dy.takin.cc/admin/,

不过同前端配置一样,Django后台的访问,也要看你项目的配置文件中是否做了允许访问域名的限制。当然这些都和你项目配置有关,和ZeroNews内网穿透服务无关。
例如我新添加的这个域名testhub-admin.dy.takin.cc,因为没有在配置文件中配置管理后台的跨域访问,所以登录会出现403禁止访问。

在.env文件中配置CSRF信任源后,重新登录,登录Django管理后台正常。


五、优缺点总结
相比于之前文章介绍过的ZeroTier、frp、NPS这几款工具,我认为ZeroNews最大的优势在于:
1.零基础设施与运维成本(相比于 frp 和 nps)
- 开箱即用,不需要购买公网服务器,不需要配置域名解析,不需要处理 SSL 证书。你只需要在目标设备(如本地电脑、NAS)运行一行命令安装客户端,即可生成一个公网地址。
- 省心: 所有的中转服务器、带宽、域名解析、HTTPS 加密全部由 ZeroNews 官方云端托管。
2.极致的"调试体验"与"访问便捷性"(相比于 ZeroTier):
- 浏览器直接访问: ZeroTier 本质是组网(Layer 2 VPN),而 ZeroNews 本质是端口映射/隧道,ZeroNews 生成的是标准的 HTTP/HTTPS 链接或 TCP 端口。任何人只要有浏览器,无需安装任何插件,直接点击链接就能访问你的本地服务。
- 适合演示: 比如你在本地开发了微信小程序,需要让外网回调调试,或者给客户演示本地搭建的 Web 项目,ZeroNews 发个链接就能看,体验远胜于 ZeroTier。
3.强大的 Web 控制台与流量可视化(相比于 frp/nps/zerotier)
- 请求重现/检查: ZeroNews 的 Web 控制台通常提供类似 Charles/Fiddler 的功能,可以直接在云端界面查看穿透过来的 HTTP 请求详情(包括 Path、Method、Header、Body 等)。
- 流量监控: 能够直观地看到当前的带宽使用情况、连接数,方便排查故障。

以下是一个详细的矩阵对比:

当然说了这么多,也不意味着这款工具没有缺点:
- 首先这款工具免费版提供的带宽、映射端口数量有限,要想升级这些服务,需要付费订阅,价格几元到几十元人民币/月不等。不过我看到官网有申请试用,我目前就处于免费试用阶段,到期后可以自由选择是否继续使用。
- 其次就是通过命令行(./zeronews add https 127.0.0.1:3000 xxxx)这种方式添加的端口映射,默认只给了1M的带宽,首次访问映射的域名的响应速度有点慢(也可能是我还没完全研究明白、在启动时可以指定带宽)。不过问题不大,后面也可以在管理页面中进行调整,映射带宽最大可以调整到4M。这样访问起来就丝滑多了。

总结下来就是,如果你的应用只是偶尔调试,免费版可能足够;如果是给客户演示或公司内部临时使用,升级到最低档的付费版通常比买一台云服务器要划算且省心得多。
好了,以上就是我用ZeroNews,结合我们最近正在开源的TestHub项目,所做的一个内网穿透的功能演示。如果你也感兴趣,想要在任意地点访问自己本地部署的TestHub项目或是其他内网服务,不妨可以试试这款工具。