ForwardEngine 是一个基于 Modern C++(C++23)与 Boost.Asio/Beast 的高性能代理引擎,核心链路使用 net::awaitable 协程组织,提供低延迟、高并发的网络转发能力。项目采用模块化设计,支持多种代理协议,适用于代理网关、网络中间件和隐私保护等场景。
- HTTP/HTTPS 代理:完整支持 HTTP 正向代理与 HTTPS
CONNECT隧道 - SOCKS5 代理:标准 SOCKS5 协议(无认证/TCP Connect),支持 IPv4/IPv6/域名
- Trojan 代理:Trojan 协议(TLS + 类 HTTP 伪装),支持密码验证
- Obscura 隧道:基于 WebSocket + TLS 的传输层伪装通道
- 协程驱动:基于 Boost.Asio 的
net::awaitable协程,无回调地狱 - 内存管理:统一 PMR(Polymorphic Memory Resource)策略,支持全局池化与帧分配器
- 连接复用:智能 TCP 连接池,支持僵尸检测、空闲超时与上限控制
- 协议识别:动态协议检测(peek),自动适配 HTTP/SOCKS5/Trojan/Obscura
- 双向转发:优化的隧道转发算法,支持优雅退出与资源及时回收
- 现代 C++:全面使用 C++23 特性(
std::expected、概念约束、协程等) - 模块化设计:清晰的接口边界,易于扩展新协议
- 完整测试:包含单元测试、集成测试与端到端验证
- 生产级日志:基于 spdlog 的异步日志系统,支持文件轮转与级别控制
- 编译器:支持 C++23 的编译器(GCC 13+、Clang 16+、MSVC 2022+)
- 构建系统:CMake 3.15+
- 依赖库:
- Boost 1.82+(system)
- OpenSSL 3.0+(CMake 依赖)
- BoringSSL
- spdlog 1.12+
- glaze 2.0+
依赖默认从 c:/bin 查找(根目录 CMakeLists.txt 已配置路径),BoringSSL 路径在 src/CMakeLists.txt 里通过 BORINGSSL_ROOT 指定:
# 配置项目
cmake -S . -B build_release -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo
# 编译
cmake --build build_release -j
# 运行测试
ctest --test-dir build_release --output-on-failure# 配置项目
cmake -S . -B build_release -DCMAKE_BUILD_TYPE=RelWithDebInfo
# 编译
cmake --build build_release -j
# 运行测试
ctest --test-dir build_release --output-on-failure程序运行时会读取 src/configuration.json,默认监听端口为 8081:
build_release/src/Forward.exe使用 curl 测试代理功能:
# HTTP/HTTPS 代理
curl -v -L -x http://127.0.0.1:8081 http://www.baidu.com
curl -v -L -x http://127.0.0.1:8081 https://www.baidu.com
# SOCKS5 代理
curl -v -L -x socks5://127.0.0.1:8081 http://www.baidu.com
# 使用环境变量
set HTTP_PROXY=http://127.0.0.1:8081
curl -v http://www.baidu.com配置文件位于 src/configuration.json,主要配置项:
{
"agent": {
"positive": {
"host": "localhost",
"port": 8080
},
"camouflage": "/api/notification/v1/stream?id=abcd-1234",
"limit": {
"concurrences": 20,
"blacklist": true
},
"addressable": {
"host": "localhost",
"port": 8081
},
"authentication": {
"credentials": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
]
},
"certificate": {
"key": "C:\\Users\\C1373\\Desktop\\code\\ForwardEngine\\key.pem",
"cert": "C:\\Users\\C1373\\Desktop\\code\\ForwardEngine\\cert.pem"
},
"clash": false
}
}{
"trace": {
"enable_console": true,
"enable_file": true,
"log_level": "debug",
"pattern": "[%Y-%m-%d %H:%M:%S.%e][%l] %v",
"trace_name": "forward_engine",
"path_name": "C:\\Users\\C1373\\Desktop\\code\\ForwardEngine\\logs"
}
}可选字段与默认值(见 include/forward-engine/trace/config.hpp):
file_name:forward.logmax_size:64MBmax_files:8queue_size:8192thread_count:1
当前版本未在 configuration.json 暴露连接池参数:
max_cache_endpoint:32max_idle_time:60 秒
ForwardEngine/
├── include/forward-engine/ # 公共头文件
│ ├── adapter/ # 运行期加载与适配
│ ├── abnormal/ # 异常定义
│ ├── agent/ # 代理核心逻辑
│ │ ├── session.hpp # 会话生命周期
│ │ ├── worker.hpp # 监听与连接接受
│ │ ├── analysis.hpp # 协议识别与目标解析
│ │ ├── distributor.hpp # 路由分发
│ │ └── connection.hpp # 连接池管理
│ ├── core/ # 核心配置与管理
│ ├── gist/ # 错误码与工具定义
│ ├── protocol/ # 协议实现
│ │ ├── http/ # HTTP 协议
│ │ ├── socks5/ # SOCKS5 协议
│ │ └── trojan/ # Trojan 协议
│ ├── transport/ # 传输层封装
│ │ ├── obscura.hpp # Obscura 隧道
│ │ └── adaptation.hpp # 统一适配层
│ ├── memory/ # 内存管理
│ │ ├── container.hpp # 容器别名
│ │ ├── pool.hpp # 内存池
│ │ └── pointer.hpp # 智能指针封装
│ ├── trace/ # 日志系统
│ │ ├── spdlog.hpp # spdlog 封装
│ │ └── monitor.hpp # 协程监控
│ ├── rule/ # 黑名单规则
│ └── transformer/ # 数据转换
│ └── json.hpp # JSON 序列化
├── src/ # 实现与入口
│ └── forward-engine/ # 实现文件
├── test/ # 测试与基准
│ ├── benchmark/ # 基准测试
│ └── stress/ # 压测工具
└── docs/ # 文档
- 零拷贝转发:隧道阶段使用
boost::asio::buffer引用传递,避免数据复制 - 协程栈复用:
net::awaitable协程栈空间复用,减少内存分配 - 连接复用:TCP 连接池减少握手开销,提高响应速度
- 内存池化:PMR 内存管理减少堆分配碎片
详细的用户指南和开发文档位于 docs/ 目录:
- 连接池目前仅覆盖 TCP 协议
- UDP 转发支持尚未实现
- 反向代理路由表配置需手动更新
- 跨线程连接池共享策略仍在完善中
- 已在 Windows 11 + MinGW 上全面测试
- Linux/macOS 平台需要适配部分路径配置
- ARM 架构尚未验证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
感谢以下开源项目提供的强大支持:
- Boost.Asio/Beast - 异步 I/O 和 HTTP/WebSocket 实现
- OpenSSL - 加密和 TLS 支持
- spdlog - 高性能日志库
- glaze - 快速的 JSON 序列化
ForwardEngine - 为现代网络而生的高性能代理引擎