曾经,我曾在家中的树莓派和香橙派上搭建了个人网盘、日记等服务,并使用frp和nps作为内网穿透代理工具。frp缺乏web控制台且配置稍显繁琐,而nps则不时出现无业务负载时cpu占用率飙升的问题。面对这些工具的使用痛点,我最终决定花费业余时间开发了一款轻量级的内网穿透代理工具——tiny-ws-tunnel,简称twt,以供自己使用。
其实现原理图详见下述功能特点:
- 支持TLS安全传输
- 服务端可前置nginx或caddy等反向代理,并支持TLS加密
- Agent支持TLS验证,确保数据传输安全
- Agent支持连接认证,保障连接的安全性
- 在不使用TLS时,支持aes(aead)加密以保护数据传输
- 具备数据流量统计功能,便于资源使用监控
- 支持web api接口,方便进行远程管理
- 进行了buffer调优,提升数据传输效率
- 自带基于curl的管理工具脚本,简化管理流程
- 支持在docker容器中运行,便于部署和管理
- 经过时间验证的tcp代理以及正在测试阶段的udp(udp over tcp)代理功能
至今,tiny-ws-tunnel已稳定运行半年多,表现优异,资源占用极少,完全满足了我的个人需求,并已提供给公司使用。下面将简要介绍其使用方法,未来视情况考虑开源以供更多人使用。
该软件为绿色软件,只需下载解压即可安装使用。关于程序包目录结构及使用方法,请参考以下说明:
通常服务端会部署在具有公网IP或出口的设备上。启动服务端后,如果遇到相关错误日志提示,可通过twt脚本工具手动创建认证的agent密钥。添加认证的agent后,即可用于agent连接时的认证参数。
我们还可以在本地设备上启动agent,通常是在没有公网IP的内网设备上。指定agentId和key等参数后,即可与公网服务器建立连接。服务端通过相关命令可查看已连接的agent明细及状态信息。
通过将公网server端的地址端口映agent所在设备地址,我们实际上添加了一个代理,实现了内网穿透访问的目标。假设本地有一个httpbin的web服务在8077端口,我们可以在server机器上启动一个本地代理,将该端口映公网的8078端口上。
如果使用nginx或caddy等作为前置代理,并已配置正规的tls,tiny-ws-tunnel server则可利用前置代理的tls功能,以增强数据传输的安全性。这里提供了caddy的配置示例 Caddyfile供参祺考。
开发者或高级用户可以根据web api自行开发web控制台。比如我个人的web控制台界面就整合在了另一个web应用里。关于web api的详细文档后期将视情况补充。
我附上了自己另一个应用的web控制台两张截图,以供参考。感兴趣的读者可以访问我的个人blog了解更多关于tiny-ws-tunnel的详细内容和实用案例。