项目地址:yosebyte/nodepass: an elegant, efficient TCP/UDP tunneling solution
项目介绍
NodePass是一个优雅、高效的TCP隧道解决方案,可在网络端点之间创建安全的通信桥梁。通过建立使用TLS加密保护的控制通道,NodePass能够在受限网络环境中实现无缝数据传输。其服务器-客户端架构允许灵活部署,使服务能够穿越防火墙、NAT和其他网络障碍。凭借智能连接池、最小资源占用和简洁的命令语法,NodePass为开发人员和系统管理员提供了一个强大且易用的工具,可以解决复杂的网络挑战,同时不影响安全性或性能。
功能特性
- 🔄 双重操作模式: 可作为服务器接受连接或作为客户端发起连接
- 🌐 TCP/UDP协议支持: 支持TCP和UDP流量隧道传输,确保完整的应用程序兼容性
- 🔒 TLS加密通信: 所有隧道流量均使用TLS加密确保安全
- 🔌 高效连接池: 优化的连接管理,支持可配置的池大小
- 📊 灵活的日志系统: 可配置的五种不同日志级别
- 🛡️ 弹性错误处理: 自动连接恢复和优雅关闭
- 📦 单一二进制部署: 简单分发和安装,依赖项极少
- ⚙️ 零配置文件: 所有设置通过命令行参数和环境变量指定
- 🚀 低资源占用: 即使在高负载下也能保持最小的CPU和内存使用
- ♻️ 自动重连: 从网络中断中无缝恢复
- 🧩 模块化架构: 客户端、服务器和公共组件之间清晰分离
- 🔍 全面调试: 详细的连接追踪和信号监控
- ⚡ 高性能数据交换: 优化的双向数据传输机制
- 🧠 智能连接管理: 智能处理连接状态和生命周期
- 📈 可扩展信号量系统: 防止高流量期间资源耗尽
- 🔄 基于URL的信号协议: 端点间优雅且可扩展的通信
- 🛠️ 可配置池动态: 根据工作负载调整连接池行为
- 🔌 一次性连接模式: 通过非重用连接增强安全性
- 📡 动态端口分配: 自动管理安全通信的端口分配
系统要求
- Go 1.24或更高版本(从源代码构建时需要)
- 服务器和客户端端点之间的网络连接
- 绑定1024以下端口可能需要管理员权限
安装部署
Docker
# 拉取容器镜像 docker pull ghcr.io/yosebyte/nodepass:latest # 服务器模式运行 docker run -d --name nodepass-server -p 10101:10101 -p 8080:8080 \ ghcr.io/yosebyte/nodepass server://0.0.0.0:10101/0.0.0.0:8080 # 客户端模式运行 docker run -d --name nodepass-client \ -e MIN_POOL_CAPACITY=32 \ -e MAX_POOL_CAPACITY=512 \ -p 8080:8080 \ ghcr.io/yosebyte/nodepass client://server.example.com:10101/127.0.0.1:8080
管理脚本
bash <(curl -sL https://cdn.yobc.de/shell/nodepass.sh)
脚本提供了交互式菜单:
- 安装或更新NodePass
- 创建和配置多个nodepass服务
- 管理(启动/停止/重启/删除)nodepass服务
- 自动设置systemd服务
- 使用可自定义选项配置客户端和服务器模式
使用方法
服务端
nodepass server://<tunnel_addr>/<target_addr>?log=<level>
tunnel_addr
: TLS隧道端点地址,客户端将连接到此处(例如, 10.1.0.1:10101)target_addr
: 服务器监听传入连接(TCP和UDP)的地址,这些连接将被隧道传输到客户端(例如, 10.1.0.1:8080)log
: 日志级别(debug, info, warn, error, fatal)
示例
# 启动一个隧道到本地Web服务器的服务器 nodepass server://0.0.0.0:10101/127.0.0.1:8080?log=debug # 启动一个增加连接限制的服务器 export SEMAPHORE_LIMIT=2048 nodepass server://10.1.0.1:10101/10.1.0.1:5432?log=info
客户端
nodepass client://<tunnel_addr>/<target_addr>?log=<level>
tunnel_addr
: 要连接的NodePass服务器隧道端点地址(例如, 10.1.0.1:10101)target_addr
: 流量将被转发到的本地地址(例如, 127.0.0.1:8080)log
: 日志级别(debug, info, warn, error, fatal)
示例
# 连接到远程NodePass服务器并在本地公开服务 nodepass client://server.example.com:10101/127.0.0.1:8080 # 为高吞吐量场景连接并优化池设置 export MIN_POOL_CAPACITY=32 export MAX_POOL_CAPACITY=2048 nodepass client://10.1.0.1:10101/127.0.0.1:3000?log=debug
配置说明
环境变量
变量 | 描述 | 默认值 | 示例 |
---|---|---|---|
SEMAPHORE_LIMIT | 最大并发连接数 | 1024 | export SEMAPHORE_LIMIT=2048 |
MIN_POOL_CAPACITY | 最小连接池大小 | 16 | export MIN_POOL_CAPACITY=32 |
MAX_POOL_CAPACITY | 最大连接池大小 | 1024 | export MAX_POOL_CAPACITY=4096 |
UDP_DATA_BUF_SIZE | UDP数据包缓冲区大小 | 8192 | export UDP_DATA_BUF_SIZE=16384 |
UDP_READ_TIMEOUT | UDP读取操作超时 | 5s | export UDP_READ_TIMEOUT=10s |
REPORT_INTERVAL | 健康检查报告间隔 | 5s | export REPORT_INTERVAL=10s |
SERVICE_COOLDOWN | 重启尝试前的冷却期 | 5s | export SERVICE_COOLDOWN=3s |
SHUTDOWN_TIMEOUT | 优雅关闭超时 | 5s | export SHUTDOWN_TIMEOUT=10s |
其他说明
参见中文文档:传送门
发布者:木木,转载请注明出处:https://blog.mmcool.site/7467.html