ChireNat 是一个基于 C++17 开发的轻量级安全 NAT 穿透解决方案

📅 2026/7/19 5:24:02 ✍️ 编辑团队 👁️ 阅读次数
ChireNat 是一个基于 C++17 开发的轻量级安全 NAT 穿透解决方案
## 项目简介ChireNat 是一个基于 C17 开发的轻量级安全 NAT 穿透解决方案支持 TCP 端口映射通过 SSL/TLS 加密通信保证数据安全。### 主要特性- ✅ **跨平台支持**Windows 和 Ubuntu Linux- ✅ **SSL/TLS 加密**基于 OpenSSL 实现安全通信- ✅ **端口映射**支持多端口同时映射- ✅ **自动重连**网络断开后自动重连- ✅ **心跳检测**保持连接活跃状态- ✅ **系统托盘**Windows 客户端支持最小化到系统托盘- ✅ **多线程处理**高效的并发连接处理### 技术栈- **语言**: C17- **加密库**: OpenSSL 1.1.1 / 3.x- **构建工具**: CMake / MSVC / GCC- **平台**: Windows 10/Ubuntu 20.04---## 快速开始### 环境要求| 平台 | 要求 ||------|------|| Windows | Visual Studio 2022 或更高版本 || Ubuntu | build-essential, libssl-dev |### OpenSSL 安装#### Windows1. 下载地址https://slproweb.com/products/Win32OpenSSL.html2. 选择 **Win64 OpenSSL v1.1.1w** 或 **Win64 OpenSSL v3.x**Development Version3. 安装到默认路径 C:\OpenSSL-Win64#### Ubuntubashsudo apt updatesudo apt install -y libssl-dev### 编译#### Windowsbash# 使用脚本编译客户端scripts/build_client_vs2022.bat# 使用脚本编译服务端scripts/build_server_vs2022.bat#### Ubuntubash# 编译客户端bash scripts/build_client_ubuntu.sh# 编译服务端bash scripts/build_server_ubuntu.sh#### CMakebashmkdir build cd buildcmake ..make -j$(nproc)### 运行#### 服务端bash# Windowsbin/nat_server.exe config.ini# Ubuntu./bin/nat_server config.ini#### 客户端bash# Windowsbin/nat_client.exe config.ini# Ubuntu./bin/nat_client config.ini---## 配置文件### 服务端配置 (config.ini)ini[server]; 控制端口客户端通过此端口连接ctrl_port 9000; 连接密码客户端必须匹配此密码password chirenat_pass; 工作线程数worker_threads 4; 缓冲区大小字节buf_size 65536; 最大并发连接数max_connections 1024; 是否启用日志1启用0禁用log_enable 1; 日志级别0DEBUG, 1INFO, 2WARN, 3ERRORlog_level 2; 日志输出目录log_path ./log/### 客户端配置 (config.ini)ini[client]; 服务端公网 IP 地址server_ip your_server_ip; 服务端控制端口server_ctrl_port 9000; 连接密码必须与服务端一致password chirenat_pass; 工作线程数worker_threads 4; 缓冲区大小字节buf_size 65536; 重连间隔秒reconnect_interval 3; 心跳间隔秒heartbeat_interval 3; 是否启用日志1启用0禁用log_enable 1; 日志级别0DEBUG, 1INFO, 2WARN, 3ERRORlog_level 2; 日志输出目录log_path ./log/[mappings]; 端口映射规则服务端端口,本地IP,本地端口; 示例将服务端的 8080 端口映射到本地 127.0.0.1:80mapping_1 8080,127.0.0.1,80; 示例将服务端的 3389 端口映射到本地 127.0.0.1:3389远程桌面mapping_2 3389,127.0.0.1,3389; 示例将服务端的 8081 端口映射到局域网内其他设备mapping_3 8081,192.168.1.100,8080---## 项目结构ChireNat/├── bin/ # 编译输出目录│ ├── nat_client.exe # 客户端可执行文件│ └── nat_server.exe # 服务端可执行文件├── src/ # 源代码目录│ ├── client/ # 客户端代码│ │ └── nat_client.cpp│ ├── server/ # 服务端代码│ │ └── nat_server.cpp│ └── common/ # 公共代码预留├── include/ # 头文件目录│ └── chirenat/ # 项目头文件│ ├── logger.h # 日志模块│ ├── tray_icon.h # 系统托盘模块│ └── thread_pool.h # 线程池模块├── scripts/ # 编译脚本│ ├── build_client_vs2022.bat # Windows客户端编译│ ├── build_server_vs2022.bat # Windows服务端编译│ ├── build_client_ubuntu.sh # Ubuntu客户端编译│ ├── build_server_ubuntu.sh # Ubuntu服务端编译│ ├── generate_cert.bat # 证书生成脚本│ ├── package.bat # 打包脚本│ └── chirenat.service # Linux服务配置├── tests/ # 测试目录预留├── assets/ # 资源文件│ └── logo.png # 系统托盘图标├── certs/ # SSL 证书│ ├── server.crt # 服务端证书│ └── server.key # 服务端私钥├── lib/ # 第三方依赖库预留├── CMakeLists.txt # CMake 配置├── LICENSE # 开源许可证└── README.md # 项目说明---## 使用说明### 部署流程1. **准备公网服务器**需要一台具有公网 IP 的服务器如阿里云、腾讯云等2. **安装依赖**在服务器上安装 OpenSSL 开发库3. **编译服务端**在服务器上编译 nat_server4. **生成证书**使用 scripts/generate_cert.bat 生成 SSL 证书5. **配置服务端**修改 config.ini设置密码和端口6. **启动服务端**运行 nat_server.exe 或 ./nat_server7. **配置客户端**修改客户端的 config.ini设置服务器 IP 和端口映射8. **启动客户端**运行 nat_client.exe 或 ./nat_client9. **访问服务**通过服务器的公网 IP 和映射端口访问内网服务### 端口映射示例假设服务端公网 IP 为 123.45.67.89配置如下ini[mappings]mapping_1 8080,127.0.0.1,80mapping_2 3389,127.0.0.1,3389则可以通过以下方式访问内网服务| 访问地址 | 实际访问 | 说明 ||----------|----------|------|| http://123.45.67.89:8080 | 内网 127.0.0.1:80 | 访问内网 Web 服务 || 123.45.67.89:3389 | 内网 127.0.0.1:3389 | 远程桌面连接 |### 系统托盘功能WindowsWindows 客户端支持系统托盘功能- **双击托盘图标**显示或隐藏客户端窗口- **右键菜单**- **Open Nat**显示/隐藏客户端窗口- **Exit**退出客户端### 证书生成使用脚本生成自签名证书bash# Windowsscripts/generate_cert.bat# Ubuntubash scripts/generate_cert.sh生成的证书会存放在 certs/ 目录下。### Linux 服务部署将 ChireNat 部署为 Linux 系统服务1. 修改 scripts/chirenat.service 中的路径配置2. 复制到系统服务目录bashsudo cp scripts/chirenat.service /etc/systemd/system/3. 启用并启动服务bashsudo systemctl daemon-reloadsudo systemctl enable chirenatsudo systemctl start chirenat---## 常见问题### Q: 编译时提示找不到 OpenSSL**A:** 确保已安装 OpenSSL 开发版本并配置正确的路径。### Q: 客户端无法连接服务端**A:** 检查以下几点1. 服务端是否正常运行2. 服务器防火墙是否开放控制端口默认为 90003. 客户端配置中的服务器 IP 和端口是否正确4. 密码是否与服务端一致### Q: 端口映射不生效**A:** 检查以下几点1. 服务器防火墙是否开放映射的端口2. 本地服务是否正常运行3. 映射规则格式是否正确服务端端口,本地IP,本地端口### Q: Windows 客户端最小化后找不到窗口**A:** 客户端已最小化到系统托盘双击托盘图标即可显示窗口。---## 许可证### ChireNat 项目许可证MIT License - 详见 [LICENSE](LICENSE)### 第三方依赖许可证| 依赖 | 许可证 | 说明 ||------|--------|------|| OpenSSL | OpenSSL License | 加密库用于 SSL/TLS 通信 |### 源码github