OPENPPP2 Code Analysis One
一、整体概览
OPENPPP2 是一个企业级虚拟以太网VNP解决方案,采用下一代安全网络接入技术,提供高性能虚拟以太网隧道服务。
1.1 系统总体结构
OPENPPP2整体架构
客户端 Client
VNP 隧道层
服务端 Server
传输加密层
网络协议栈层
底层网络层
本地代理服务
HTTP Proxy
SOCKS Proxy
管理后端
虚拟交换机
虚拟子网
1.2 核心技术特点
OPENPPP2
核心技术
并发架构
同步超线程IO技术
全协程+多线程架构
SSMT优化模式
支持IO_URING
网络功能
双网络协议栈
LWIP协议栈
CTCP协议栈
全双工/半双工隧道
VNP虚拟子网
端口映射 P-NAT2
虚拟BGP多线分流
加密传输
支持可打印明文传输
多种加密算法
AES-128-CFB
AES-256-CFB
AES-128-GCM
AES-256-GCM
SIMD+AES_NI优化
流量混淆技术
高级特性
MUX多路复用
DNS缓存
CDN转发支持
VNP Turbo
TCP Fast Open
UDP多线路宽频聚合
代理支持
正向代理
HTTP代理
SOCKS代理
Paper Airplane分层
二、软件设计
2.1 客户端/服务器模式
服务器模式 Server Mode
客户端模式 Client Mode
加密隧道
VEthernetNetworkSwitcher
VEthernetExchanger
TUN/TAP 设备
本地代理
HTTP Proxy
SOCKS Proxy
路由管理
VBGP 智能分流
DNS 规则
VirtualEthernetSwitcher
VirtualEthernetExchanger
虚拟子网管理
端口映射服务
管理后端
WebHook API
防火墙规则
2.2 核心类层次结构
PppApplication
-AppConfiguration configuration_
-VirtualEthernetSwitcher server_
-VEthernetNetworkSwitcher client_
-NetworkInterface network_interface_
+Main() : int
+OnTick() : bool
+LoadConfiguration()
+PreparedLoopbackEnvironment()
AppConfiguration
+concurrent: int
+key: KeyConfig
+tcp: TcpConfig
+udp: UdpConfig
+websocket: WebsocketConfig
+client: ClientConfig
+server: ServerConfig
+Load() : bool
VirtualEthernetSwitcher
+GetLocalEndPoint()
+GetAllExchangerNumber()
+GetManagedServer()
VEthernetNetworkSwitcher
+GetExchanger()
+GetHttpProxy()
+GetSocksProxy()
+GetAggligator()
+IsMuxEnabled() : bool
VEthernetExchanger
+GetNetworkState()
+GetMuxNetworkState()
+StaticEchoAllocated() : bool
三、模块结构分析
3.1 目录结构与模块划分
openppp2/
ppp/
common/
平台相关/
app/
核心模块/
client/
server/
protocol/
mux/
proxys/
dns/
网络组件
网络组件
管理后端
cryptography/
transmissions/
net/
tap/
threading/
aesni/
aggligator/
lwip/
chnroutes2/
windows/
linux/
darwin/
android/
3.2 核心模块依赖关系
应用层 app/
传输层 transmissions/
网络层 net/
加密层 cryptography/
TAP设备层 tap/
Boost.Asio
OpenSSL
AES-NI优化
线程管理 threading/
执行器模式
缓冲区管理
LWIP协议栈
系统驱动
配置管理 configurations/
JSON解析
四、数据流与处理流程
4.1 客户端数据流转流程
VNP服务器 隧道层 加密层 协议栈层 TUN/TAP设备 用户应用 VNP服务器 隧道层 加密层 协议栈层 TUN/TAP设备 用户应用 alt [LWIP 协议栈] [CTCP 协议栈] AES-128/256-CFB/GCM alt [MUX 多路复用] 发送数据包 虚拟网卡接收 LWIP处理 内核协议栈 协议层数据 加密处理 加密数据 MUX封装 发送到服务器 响应数据 解密 明文数据 传递给应用 接收数据
4.2 连接建立流程
connecting
established
reconnecting
mux > 0
mux = 0
超时/错误
初始化配置
创建TAP设备
打开TAP驱动
创建交换机
建立隧道连接
连接中
已建立
重连中
数据传输
MUX检查
启用MUX
普通传输
多通道传输
单通道传输
断开连接
4.3 加密传输处理流程
是
否
AES-128-CFB
AES-256-CFB
AES-128-GCM
AES-256-GCM
AES-256-CFB
AES-128-CFB
是
否
是
否
是
否
原始数据
允许明文?
明文传输
协议层加密
协议加密算法
AES-128-CFB 加密
AES-256-CFB 加密
AES-128-GCM 加密
AES-256-GCM 加密
传输层加密
传输加密算法
AES-256-CFB 加密
AES-128-CFB 加密
其他选项
流量混淆?
应用混淆算法
增量编码?
Delta编码
数据随机化?
数据打乱
发送数据
传输完成
五、技术栈与依赖
5.1 技术栈层次图
操作系统层
第三方库层
系统接口层
网络协议层
核心服务层
业务逻辑层
应用层
客户端应用
服务器应用
管理后端
VNP 客户端逻辑
VNP 服务器逻辑
代理服务器
路由管理
传输管理
加密服务
MUX 多路复用
DNS 服务
防火墙管理
TCP/IP 协议栈
LWIP 协议栈
WebSocket 协议
HTTP/HTTPS
TUN/TAP 驱动
Socket API
系统路由表
防火墙接口
Boost.Asio
OpenSSL
jemalloc
JSON库
LWIP
Windows
Linux
macOS
Android
5.2 编译依赖关系
编译器要求
可选依赖
完整依赖
最小依赖
Boost >= 1.70
jemalloc >= 5.30
OpenSSL >= 1.1.x
Boost
jemalloc
OpenSSL
cURL
liburing
AES-NI SIMD
C++17 支持
GCC/Clang/MSVC
OPENPPP2