NodePass - 轻量高效 TCP/TLS 隧道工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
uid106
V2EX    分享创造

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

  •  
  • nbsp; uid106 191 天前 via iPhone 3476 次点击
    这是一个创建于 191 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    第 1 条附言    191 天前
    架构简体可供参考:

    TARGET
    | |
    TCP/UDP
    | |
    CLIENT
    | | |
    TCP/TLS TCP
    POOL CTRL
    | | |
    SERVER
    | |
    TCP/UDP
    | |
    USERS

    未来开发计划:新增 master 模式,以 rest api 方式管理多个 server 和/或 client ,对接 web 前端
    17 条回复    2025-04-07 22:08:40 +08:00
    v1
        1
    v1  
       191 天前
    frp 高清重制?
    uid106
        2
    uid106  
    OP
       191 天前 via iPhone
    @kk2syc 跟大头没得比啊,只是这就是做了一些创意性的活,比如自适应一次性 tcp 或 tls 连接池来管理提前建立的连接以节省掉握手的时间
    dcsuibian
        3
    dcsuibian  
       191 天前
    第一反应是用 Node.js 开发的
    kekxv
        4
    kekxv  
       191 天前 via iPhone
    客户端到服务器的连接能用 websocket 吗?
    molezznet
        5
    moleznet  
       191 天前
    试试看,tls 三个月更新后会 hot reload 吗?
    uid106
        6
    uid106  
    OP
       191 天前 via iPhone
    @dcsuibian 可以理解为服务器节点之间的数据传输
    uid106
        7
    uid106  
    OP
       191 天前 via iPhone
    @kekxv 的客户端与服务器之间采用的是直接的 TCP 连接,而不是 WebSocket 。虽然理论上可以通过 WebSocket 来隧道 TCP 流量(有类似 wstunnel 的工具),但 WebSocket 是建立在 TCP 之上的额外协议,具有消息帧和握手的额外开销,主要适用于浏览器端等环境。对于 NodePass 这种后端隧道传输工具,直接使用 TCP 能够保证更低的延迟和更高的传输效率,而且可以更容易升级为 TLS 连接。
    uid106
        8
    uid106  
    OP
       191 天前 via iPhone
    @molezznet 目前的设计为了考虑通用性没有接管证书维护( acme ),可以通过手动 restart 来重新载入证书文件
    shakukansp
        9
    shakukansp  
       191 天前
    支持 ssh 的 proxycommand 吗
    uid106
        10
    uid106  
    OP
       191 天前 via iPhone
    @shakukansp 可以利用 NodePass 创建的隧道,与 SSH 的 ProxyCommand 选项配合,实现通过受限网络环境访问远程服务器的需求,实际上任何基于 TCP/UDP (协议层)的服务都可以被转发
    caola
        11
    caola  
       191 天前
    和 Frp 对比没什么优势啊
    uid106
        12
    uid106  
    OP
       191 天前 via iPhone
    @caola 感谢反馈,的确如此,面对大而全和小而精的选择 nodepass 选择了后者(不重复造轮子),个人认为这个项目存在的意义还是能换种思路、架构或者流程来完成最基本的 tcp/udp 协议层的数据转发的这项功能,以及围绕如何用最少的资源实现最大化的性能,如何用最简单的用户体验来实现最小用户感知的、安全的传输方式,其中不乏有一些创新小点,例如预建立、可自动调节容量的连接池,两端如何保持池连接的对应性和连接池的纯净度的方法,udp 穿透时与 tcp 之间的协议转换,以及灵活的 tls 加密策略等等,希望这些想法的实现能抛砖引玉。如果觉得想法还不错,可以尝试下这款轻量化的隧道小工具
    klxyy
        13
    klxyy  
       190 天前
    @uid106 就喜欢小而精的,话说,能正常过墙么
    uid106
        14
    uid106  
    OP
       190 天前 via iPhone
    @klxyy 最低要求:只需要一端(作为 client )能 dial 到另一端(作为 server )就可以。例如防火墙内部主动 dial 外部 server ,或者防火墙外部主动 dial 内部公网 v4 或者 v6 。灵活性比较大,可以组合出很多玩法
    uid106
        15
    uid106  
    OP
       190 天前 via iPhone
    @molezznet 研究了一番,理论上可以实现热加载,设置个时间间隔环境变量吧,0 的话不加载,默认 1 天重新载入证书一下。下个版本加上,感谢建议!
    molezznet
        16
    molezznet  
       190 天前
    @uid106 OK 不迫切 , 毕竟几个月一次, 不行就 crontab 里曲线救国
    uid106
        17
    uid106  
    OP
       188 天前 via iPhone   1
    @molezznet 已更新 1.0.4 ,支持了证书的热加载,可以通过环境变量来调整周期,默认 1 小时
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3104 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:35 PVG 08:35 a href="/worldclock#lax">LAX 17:35 JFK 20:35
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86