架构
控制平面与数据平面分离,实现最大灵活性和可靠性
控制平面架构
GovernFlow作为外部控制平面运行,与VPN数据平面完全分离。这种分离实现了集中管理、独立扩展和故障转移,而不影响活动的VPN会话。
governflowd
主守护进程,提供REST API、集群协调、会话管理和通过Unix套接字的OpenVPN集成。
governflow-ls
许可证服务器,用于多租户许可证管理,RSA-SHA256签名许可证和基于层级的功能控制。
governflow-query
由OpenVPN调用的轻量级助手,用于客户端配置、防火墙规则和路由管理。
libgovernflow
共享库,包含通用功能:日志记录、配置解析、数据库连接池和许可证验证。
┌──────────────────────────────────────────┐ │ GovernFlow Control Plane │ ├──────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────┐ │ │ │ governflowd │ │ │ │ ┌──────────────────────────────┐ │ │ │ │ │ Core: config, log, db, http │ │ │ │ │ └──────────────────────────────┘ │ │ │ │ ┌──────────────────────────────┐ │ │ │ │ │ Plugins: 14 dynamic modules │ │ │ │ │ └──────────────────────────────┘ │ │ │ │ Ports: 8443 (API), 8444 (UDP), │ │ │ │ 8445 (Raft), Unix Socket │ │ │ └────────────────────────────────────┘ │ │ │ │ │ ┌─────────────────┴──────────────────┐ │ │ │ libgovernflow.so │ │ │ └────────────────────────────────────┘ │ │ │ ├──────────────────────────────────────────┤ │ OpenVPN Data Plane │ ├──────────────────────────────────────────┤ │ ┌────────────────────────────────────┐ │ │ │ OpenVPN Server + governflow-query │ │ │ │ (client-connect/disconnect hooks) │ │ │ └────────────────────────────────────┘ │ └──────────────────────────────────────────┘
集群拓扑
分布式架构,Raft共识实现高可用
领导节点
处理所有写操作并协调集群状态。通过Raft共识自动选举。
追随节点
从领导者复制状态并处理读操作。如果当前领导者失败,可以成为领导者。
仲裁保护
写入需要多数确认。防止脑裂并确保故障转移期间零数据丢失。
通信通道
Port 8443
HTTPS REST API
客户端管理、配置
Port 8444
UDP心跳
2秒间隔,HMAC-SHA256
Port 8445
Raft共识
mTLS加密,状态复制
数据流
GovernFlow如何与OpenVPN集成实现实时配置
1
客户端连接到OpenVPN
OpenVPN接收连接请求并触发client-connect脚本
2
governflow-query获取配置
通过Unix套接字查询governflowd获取客户端配置(IP、路由、QoS、区域)
3
应用配置
通过pf/iptables应用防火墙规则,添加路由,为OpenVPN生成push文件
4
在集群中跟踪会话
会话在所有集群节点上注册,使用分布式锁定防止重复
技术栈
以性能和可靠性为核心构建
C
原生性能
SQLite
零依赖
OpenSSL
加密
libmicrohttpd
HTTP/S服务器