# passnet **Repository Path**: ShaoboFeng/passnet ## Basic Information - **Project Name**: passnet - **Description**: 网络转发工具 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-11 - **Last Updated**: 2026-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PassNet - 网络转发工具 基于Rust的反向隧道TCP转发系统,适用于目标服务器不可直接访问的场景。 ## 网络拓扑 ``` A (客户端) → B (服务器) ← C (转发节点) → D (目标服务器) ``` - A 只能访问 B - B 可以访问 C - C 可以访问 B 和 D - D 只能被 C 访问 C节点主动连接B节点建立控制连接(反向连接模式),A客户端的数据通过 B→C 转发链路到达D节点。 ## 功能特性 - 反向隧道:C主动连接B,无需C对外开放端口 - 每连接独立转发:每个A客户端对应一条独立的转发链路 - TOML配置文件:支持IP、端口、线程数配置 - 异步高性能:基于tokio异步运行时 - 自动重连:控制连接断开后指数退避重连(最大30秒) - 空闲超时:5分钟无数据传输自动断开 ## 项目结构 ``` passnet/ ├── Cargo.toml # workspace根配置 ├── crates/ │ ├── common/ # 共享代码(配置解析 + 控制协议) │ ├── server/ # B节点程序 │ └── forwarder/ # C节点程序 ├── tests/ # 集成测试 └── docs/ # 设计文档 ``` ## 安装 需要Rust环境,使用cargo构建: ```bash cargo build --release ``` 生成两个可执行文件: - `passnet-server` — B节点 - `passnet-forwarder` — C节点 ## 配置 ### B节点配置 (config.toml) ```toml client_listen_addr = "0.0.0.0" # 监听A连接的IP client_listen_port = 8080 # 监听A连接的端口 forwarder_listen_addr = "0.0.0.0" # 监听C连接的IP forwarder_listen_port = 8081 # 监听C连接的端口 worker_threads = 4 # tokio worker线程数 ``` ### C节点配置 (config.toml) ```toml server_addr = "10.0.1.100" # B节点IP server_port = 8081 # B节点forwarder端口 target_addr = "192.168.1.50" # D节点IP target_port = 3306 # D节点目标端口 worker_threads = 4 # tokio worker线程数 ``` ## 使用方法 1. 在B节点机器上编辑 `config.toml`,然后运行: ```bash cd crates/server ./passnet-server ``` 2. 在C节点机器上编辑 `config.toml`,然后运行: ```bash cd crates/forwarder ./passnet-forwarder ``` 3. A客户端直接连接B的 `client_listen_port` 即可访问D节点服务: ```bash # 例如D节点运行的是MySQL,A可以这样连接: mysql -h -P 8080 -u user -p ``` ## 连接流程 1. C启动后主动连接B的 `forwarder_port`,发送Register消息(控制连接) 2. A连接B的 `client_port` 3. B通过控制连接通知C有新连接 4. C同时连接D目标端口和B的 `forwarder_port`(数据连接) 5. B配对A连接和C数据连接,双向转发数据 6. 任一端断开时整条链路关闭 ## 测试 ```bash bash tests/test_forwarding.sh ``` ## 依赖 - Rust 1.70+ - tokio (异步运行时) - tokio-util (LengthDelimitedCodec) - serde + toml (配置解析) - bytes (帧处理) - futures (Stream/Sink trait)