如何内网穿透访问本地私有化部署的TestHub

写在前面

最近有一些小伙伴私信问我咱们的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项目或是其他内网服务,不妨可以试试这款工具。

相关推荐
风骏时光牛马1 小时前
# Ruby基于Rails框架实现多角色权限管理与数据分页查询完整实战代码案例
前端
weedsfly1 小时前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript
xiaodaoluanzha1 小时前
迄今為止,最簡單的編程語言 Nolang
前端·后端
Csvn1 小时前
Docker 容器管理入门 — 从镜像到容器编排
后端
Csvn1 小时前
Fetch 请求竞态终结者:AbortController 不只是用来"取消"的
前端
阡陌Jony1 小时前
关于前端路由中的参数问题的学习(一): params,query, hash(#)
前端
阡陌Jony1 小时前
缓存相关学习笔记(一):Service Worker 缓存
前端
用户762352425912 小时前
ShardingJDBC
后端
行者全栈架构师2 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端