NodePass - 轻量高效 TCP/TLS 隧道工具

uid106 · 2025-4-4 14:00:04 · 1762 次点击

NodePass

NodePass 是一款基于 Go 语言开发的开源 TCP 隧道工具,适用于在复杂网络环境下实现数据传输。项目设计上将控制通道和数据通道分离,控制通道使用未加密的 TCP 连接,而数据通道支持三种 TLS 模式(无加密、自签证书、定制证书),以满足不同的安全要求。

NodePass CLI

主要功能与特点

  • 双模式架构

    • 服务器模式:在指定地址上监听控制连接,同时在目标地址上接受 TCP/UDP 流量。收到连接后,通过控制通道发送信号,并按配置的 TLS 模式建立数据通道。
    • 客户端模式:连接服务器控制通道,接收建立数据通道的信号,并将数据转发至本地目标。
  • 协议支持
    同时支持 TCP 和 UDP 流量,确保大部分应用场景下的兼容性,既适合全双工的持久通信,也能处理无状态的单次数据交换。

  • 灵活加密选项
    通过命令行参数配置 TLS 模式,用户可以根据实际需求选择无加密、自签证书或自定义证书模式,从而在安全性和性能之间找到平衡。

  • 智能连接池
    内置连接池用于管理和复用连接,自动处理连接的创建、重连以及资源释放,从而降低系统开销并保证稳定性。

  • 零配置部署
    所有参数均通过命令行和环境变量设定,无需额外配置文件。单一二进制文件即可部署,大大简化了安装和升级过程。

工作原理

  1. 控制通道
    用于客户端和服务器之间的信号传递,保持长连接状态。所有建立数据通道的指令均通过这一通道传递。

  2. 数据通道
    根据服务器配置的 TLS 模式为每个传入连接创建独立数据通道,实现数据传输。可根据实际场景选择不同加密级别。

  3. 连接管理
    通过内置的连接池,对连接进行预先建立和动态管理。连接在使用后会自动关闭,确保系统资源的有效利用。

使用示例

  • 服务器模式

nodepass server://:10101/127.0.0.1:8080?tls=1

启动一个服务器,监听 10101 端口,并将接收到的流量转发到本地 8080 端口,同时采用自动生成自签证书的 TLS 模式。

  • 客户端模式

nodepass client://server.example.com:10101/127.0.0.1:8080

客户端连接到服务器的控制通道,并将流量转发至本地 8080 端口,自动匹配服务器的 TLS 配置。

NodePass 针对高级网络环境做了充分优化,适合对网络性能和安全性有一定要求的用户使用。

详细信息和最新版本请参考仓库: https://github.com/yosebyte/nodepass

举报· 1762 次点击
登录 注册 站外分享
16 条回复  
molezznet 小成 2025-4-5 20:22:55
@uid106 OK 不迫切 , 毕竟几个月一次, 不行就 crontab 里曲线救国
uid106 楼主 初学 2025-4-5 18:53:51
@molezznet 研究了一番,理论上可以实现热加载,设置个时间间隔环境变量吧,0 的话不加载,默认 1 天重新载入证书一下。下个版本加上,感谢建议!
uid106 楼主 初学 2025-4-5 10:24:40
@klxyy 最低要求:只需要一端(作为 client )能 dial 到另一端(作为 server )就可以。例如防火墙内部主动 dial 外部 server ,或者防火墙外部主动 dial 内部公网 v4 或者 v6 。灵活性比较大,可以组合出很多玩法
klxyy 小成 2025-4-5 09:39:29
@uid106 就喜欢小而精的,话说,能正常过墙么
uid106 楼主 初学 2025-4-4 22:55:21
@caola 感谢反馈,的确如此,面对大而全和小而精的选择 nodepass 选择了后者(不重复造轮子),个人认为这个项目存在的意义还是能换种思路、架构或者流程来完成最基本的 tcp/udp 协议层的数据转发的这项功能,以及围绕如何用最少的资源实现最大化的性能,如何用最简单的用户体验来实现最小用户感知的、安全的传输方式,其中不乏有一些创新小点,例如预建立、可自动调节容量的连接池,两端如何保持池连接的对应性和连接池的纯净度的方法,udp 穿透时与 tcp 之间的协议转换,以及灵活的 tls 加密策略等等,希望这些想法的实现能抛砖引玉。如果觉得想法还不错,可以尝试下这款轻量化的隧道小工具
caola 小成 2025-4-4 22:20:36
和 Frp 对比没什么优势啊
uid106 楼主 初学 2025-4-4 18:54:38
@shakukansp 可以利用 NodePass 创建的隧道,与 SSH 的 ProxyCommand 选项配合,实现通过受限网络环境访问远程服务器的需求,实际上任何基于 TCP/UDP (协议层)的服务都可以被转发
shakukansp 小成 2025-4-4 18:37:37
支持 ssh 的 proxycommand 吗
uid106 楼主 初学 2025-4-4 15:03:08
@molezznet 目前的设计为了考虑通用性没有接管证书维护( acme ),可以通过手动 restart 来重新载入证书文件
12下一页
返回顶部