VPN集群管理系统

基于易优CMS的完整VPN集群解决方案,满足机构代理、团队代理和直接用户需求

多协议支持 负载均衡 实时监控 合规管理 API集成

系统架构设计

整体架构图
易优CMS管理平台
用户管理/订单管理/财务管理/API接口
API网关集群
负载均衡/权限验证/流量控制
VPN集群节点
节点1 (OpenVPN)
节点2 (WireGuard)
节点3 (Shadowsocks)
节点N (其他协议)

技术栈选型

后端技术栈
易优CMS + PHP 7.4+ ThinkPHP 6.x MySQL 8.0 Redis 7.0 RabbitMQ/Redis Queue Nginx + OpenResty OpenVPN, WireGuard, Shadowsocks
前端技术栈
LayUI + Vue.js Bootstrap 5 + jQuery Electron (桌面端) 原生应用 (移动端)
基础设施
多地域VPS部署 HAProxy + Keepalived Prometheus + Grafana ELK Stack Docker + Kubernetes
安全技术
JWT Token认证 TLS 1.3加密 端到端加密 证书双向验证 IP白名单机制

用户类型与需求

机构代理

提供完整的API服务集成

  • 批量用户管理API
  • 使用统计查询
  • 余额和佣金管理
  • 节点状态监控
  • 自动化集成支持

团队代理

按量销售提成模式

  • 子用户管理API
  • 佣金统计报表
  • 团队管理功能
  • 实时收益追踪
  • 多级分销支持

直接用户

提供终端应用程序

  • 多协议客户端
  • 智能节点选择
  • 流量统计显示
  • 断线自动重连
  • 配置云端同步

VPN核心模块设计

协议管理模块
// 多协议支持框架 class ProtocolManager { constructor() { this.protocols = { 'openvpn': new OpenVPNHandler(), 'wireguard': new WireGuardHandler(), 'shadowsocks': new ShadowSocksHandler() }; } createUserConfig(userId, protocol, nodeId) { const handler = this.protocols[protocol]; return handler.generateConfig(userId, nodeId); } }
节点集群管理
// 节点状态管理 class VPNNodeManager { getOptimalNode(userId, preferredProtocol) { const availableNodes = this.getAvailableNodes(); return this.loadBalancer.selectNode( availableNodes, userId ); } migrateUsers(fromNodeId, toNodeId) { // 用户迁移逻辑 } }
用户连接管理
// 连接会话管理 class ConnectionManager { createConnection(userId, nodeId, protocol) { if (this.hasActiveConnection(userId)) { this.disconnectUser(userId); } // 创建新连接逻辑 } }
负载均衡模块
// 智能节点选择 class LoadBalancer { selectNode(availableNodes, userId, strategy) { const handler = this.selectionStrategies[strategy]; return handler.select(availableNodes, userId); } }
系统监控面板
节点状态概览
活跃节点: 12/15
总用户数: 2,847
当前连接: 892
系统负载: 42%

国安监控模块

实名认证

100%覆盖

数据留存

180天

合规检查

通过

安全事件

2 (低风险)

实名认证系统
// 身份验证系统 class IdentityVerification { verifyRealName(userId, idCard, realName, phone) { // 基础格式验证 if (!this.validateIdCardFormat(idCard)) { return false; } // 调用第三方实名认证API const result = provider.verify(realName, idCard, phone); this.recordVerification(userId, realName, idCard, result); return result.verified; } }
数据留存管理
// 合规数据存储 class DataRetentionManager { storeUserData(userData) { const encryptedData = this.encryptSensitiveData(userData); // 存储到专用留存数据库 this.retentionDb.users.insertOne(retentionRecord); } encryptSensitiveData(data) { // 加密敏感数据字段 } }
访问日志监控
// 完整连接日志系统 class ConnectionMonitor { logConnectionEvent(eventType, connectionData) { const logEntry = { timestamp: new Date().toISOString(), eventType: eventType, userId: connectionData.user_id, realName: connectionData.real_name, sourceIp: connectionData.source_ip, // ... 其他字段 }; this.storeConnectionLog(logEntry); this.analyzeForSuspiciousActivity(logEntry); } }
异常检测系统
// 智能检测系统 class AnomalyDetection { detectAnomalies(connectionData) { const anomalies = []; // 基于规则的检测 const ruleBased = this.ruleEngine.checkRules(connectionData); anomalies.push(...ruleBased); // 机器学习检测 const mlBased = this.mlDetection(connectionData); anomalies.push(...mlBased); return anomalies; } }
监控数据表结构
表名 主要字段 保留期限 加密状态
real_name_verifications 用户ID, 实名, 身份证哈希, 验证时间 2年 已加密
connection_monitor_logs 时间戳, 用户ID, 源IP, 协议, 流量 180天 已加密
security_audit_events 事件ID, 类型, 严重性, 详情 1年 已加密
data_retention_records 用户ID, 数据类型, 加密数据, 哈希链 2年 已加密

数据库设计

核心数据表
-- 用户表 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE, user_type ENUM('direct', 'team_agent', 'org_agent'), parent_id INT, balance DECIMAL(10,2), api_key VARCHAR(64), created_at TIMESTAMP ); -- VPN节点表 CREATE TABLE vpn_nodes ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), location VARCHAR(100), ip_address VARCHAR(45), capacity INT, current_connections INT, status ENUM('active', 'maintenance', 'down') );
业务数据表
-- 使用记录表 CREATE TABLE usage_records ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, node_id INT, bandwidth_used BIGINT, duration INT, start_time TIMESTAMP, end_time TIMESTAMP ); -- 佣金记录表 CREATE TABLE commission_records ( id INT PRIMARY KEY AUTO_INCREMENT, agent_id INT, sub_user_id INT, amount DECIMAL(10,2), calculation_date DATE );