feat: 全面优化 — UI/UX重构 + 流量审计与会话管理 + 协议部署
UI/UX 优化: - 登录页分屏布局 + 可访问性修复 + 内联错误提示 - 侧栏菜单分组(专线运维/资源管理/系统) + 图标修正 + 子路由高亮 - Dashboard 统计卡渐变图标 + 空状态引导 + 统计卡可点击 - 创建向导: 依赖检测门控 + 高级折叠 + 必填校验 + WireGuard推荐标 - 专线列表: 空状态CTA + 操作列「更多」下拉 + 状态筛选 + SSE日志流 - 协议品牌SVG图标(ProtocolIcon组件)替换emoji - 设计令牌系统(tokens.css)统一颜色/间距/圆角/阴影 功能增强: - 在线会话管理(sessionmgr): 跨协议会话同步 + 踢下线 + 连接审计日志 - 流量配额引擎(trafficmgr): 配额检查 + 超额动作(block/warn/throttle) + 周期重置 - 异常流量告警: 突发流量检测(>90MB/15s) + 审计记录 - 节点SSH凭证管理: 密码/私钥认证 + 即时测试连接 + AES-GCM加密存储 - 协议二进制管理(binmgr): FRP/OpenVPN GitHub下载 + 系统包安装引导(apt/yum/dnf) - 右上角修改密码弹窗 + MFA独立验证页 + 密码强度提示 - 用户管理: 批量导入 + LDAP浏览导入 + 平台用户导入VPN拨号用户 - 404路由 + IPSec对接页可达性修复 - MFA备用码持久化弹窗(替代Toast) - 轮询可见性守卫 + ECharts resize修复 后端: - 3张新表: VPNSession/ConnectionLog/TrafficPolicy - monitor增强: 会话同步+配额检查+异常告警+到期审计 - changePassword统一8位+新旧不同校验 - openvpn-otp文案专业化(移除抄袭感) - SSE日志流(token降级query参数)
This commit is contained in:
1 parent
58c036c34c
commit
1e2f8ef24f
43 files changed
+6783
-460
No files matched your search
@@ -6,54 +6,149 @@ Gin + Vue3 + SQLite 的多协议 VPN 专线 Web 管理平台:**单二进制交
|
||||
|
||||
| 协议 | 实现方式 | 场景 |
|
||||
|---|---|---|
|
||||
| WireGuard | 系统 `wg` / `wg-quick`,密钥自动生成 | 内部接入、移动办公(首选) |
|
||||
| IPSec | StrongSwan `swanctl`,内置 Cisco/飞塔/华为/华三模板 | **第三方对接**、站点互联 |
|
||||
| L2TP/IPSec | StrongSwan + xl2tpd | 手机/老设备兼容 |
|
||||
| FRP | 直接管理 `frps` / `frpc`(TOML) | 内网穿透、端口映射 |
|
||||
| OpenVPN | 进程管理 + 配置模板 + PKI 脚本 | 老项目兼容 |
|
||||
| WireGuard | 系统 `wg` / `wg-quick`,多 Peer、NAT/MTU、流量累计 | 内部接入、移动办公(首选) |
|
||||
| IPSec | StrongSwan `swanctl`,厂商模板一键套用 | **第三方对接**、站点互联 |
|
||||
| IKEv2 远程接入 | StrongSwan Road Warrior,PSK + EAP-MSCHAPv2 | 员工手机/笔记本原生拨号 |
|
||||
| L2TP/IPSec | StrongSwan + xl2tpd,支持多拨号用户 | 手机/老设备兼容 |
|
||||
| FRP | 直接管理 `frps` / `frpc`(TOML),含 STCP/XTCP | 内网穿透、端口映射 |
|
||||
| OpenVPN | 进程管理 + PKI;UDP/TCP 可切换;证书/密码 + TOTP MFA | 老项目兼容 |
|
||||
| 自定义协议 | 插件命令钩子(Create/Start/Stop/Status/Config) | 任意协议扩展 |
|
||||
|
||||
## 核心功能
|
||||
|
||||
- **专线列表**:名称/协议/状态/流量/到期时间,一键启停、编辑、删除、下载配置、WireGuard 二维码
|
||||
- **创建向导**:选协议 → 填参数 → 自动生成服务端与客户端配置
|
||||
- **IPSec 第三方对接专页**:设备模板预置 Phase1/Phase2 参数、双方参数一致性检查、一键连通性测试、对端参考配置导出
|
||||
- **节点管理**:多中继节点(本机内置,远程节点预留)
|
||||
- **协议插件**:注册命令钩子即接入新协议,钩子通过 stdin 接收专线配置 JSON
|
||||
- **创建向导**:选协议 → 依赖检测门控(未就绪不可选,引导下载/安装)→ 填参数(高级折叠)→ 必填校验
|
||||
- **在线会话**:跨协议统一展示在线用户、公网 IP、VPN IP、连接时长、流量;支持踢下线
|
||||
- **流量审计**:连接审计日志(connect/disconnect/auth_fail)、异常突发流量告警、管理员手动踢下线
|
||||
- **流量配额**:隧道级配额(GB)、超额动作(告警/停止/限速)、周期重置(日/月)
|
||||
- **协议引擎管理**:FRP/OpenVPN 支持平台一键下载部署;WireGuard/StrongSwan 显示系统包安装命令
|
||||
- **WireGuard Peer 管理**:详情内增删 Peer、按设备下载配置/二维码
|
||||
- **拨号用户**:OpenVPN / L2TP / IKEv2 共用用户表;支持从平台用户导入、批量创建、LDAP 浏览导入
|
||||
- **IPSec 第三方对接专页**:设备模板预置 Phase1/Phase2 参数、双方参数一致性检查、一键连通性测试
|
||||
- **节点管理**:多中继节点,远程节点支持 SSH 凭证验证(密码/私钥、即时测试连接)
|
||||
- **专线日志**:操作栏「更多 → 查看日志」SSE 实时输出实例进程日志
|
||||
- **安全**:PSK/私钥 AES-GCM 加密存储、配置文件 0600 权限、操作审计
|
||||
- **访问控制**:admin / operator / viewer;首登强制改密;登录防爆破;TOTP MFA + 备用码;LDAP
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 单二进制构建与运行(默认,不使用 Docker)
|
||||
### 本地构建与运行
|
||||
|
||||
```bash
|
||||
# 方式一:一键构建并运行
|
||||
./run.sh run
|
||||
|
||||
# 方式二:make
|
||||
make run
|
||||
./run.sh run # 构建并运行(默认 admin / admin123)
|
||||
./run.sh dev # 开发模式(前后端分离)
|
||||
./run.sh restart # 重新构建并重启
|
||||
./run.sh stop # 停止服务
|
||||
```
|
||||
|
||||
`run.sh` 会自动完成「构建前端 → 编译 Go → 启动单二进制」全流程,监听 `:8080`,默认账号 **admin / admin123**。
|
||||
|
||||
### 分步构建
|
||||
### Linux 服务器部署
|
||||
|
||||
```bash
|
||||
./run.sh build # 全量构建(前端 + 二进制)
|
||||
./run.sh build-frontend # 仅构建前端
|
||||
./run.sh build-binary # 仅编译二进制(需先构建前端)
|
||||
./opsx-vpn # 直接运行二进制
|
||||
# 1. 交叉编译 Linux 二进制(在 macOS 上)
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o opsx-vpn ./backend
|
||||
|
||||
# 2. 上传到服务器
|
||||
scp opsx-vpn user@server:/opt/opsx-vpn/
|
||||
cd /opt/opsx-vpn && chmod +x opsx-vpn
|
||||
|
||||
# 3. 安装系统依赖(按需)
|
||||
apt install -y wireguard-tools openvpn strongswan strongswan-swanctl iptables
|
||||
# FRP 无需系统包 —— 平台 UI 内点「下载部署」自动从 GitHub 下载到 data/bin/
|
||||
|
||||
# 4. 启动(生产建议用 systemd 管理)
|
||||
./opsx-vpn # 监听 :8080,数据目录 ./data
|
||||
```
|
||||
|
||||
### 开发模式(前后端分离)
|
||||
### systemd 服务(生产推荐)
|
||||
|
||||
```ini
|
||||
# /etc/systemd/system/opsx-vpn.service
|
||||
[Unit]
|
||||
Description=VPN Management Platform
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/opsx-vpn
|
||||
ExecStart=/opt/opsx-vpn/opsx-vpn
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
# 环境变量按需调整
|
||||
Environment=VPN_LISTEN_ADDR=:8080
|
||||
Environment=VPN_DATA_DIR=/opt/opsx-vpn/data
|
||||
# WireGuard/OpenVPN 需要 root 权限(创建 TUN 设备 + iptables)
|
||||
# 如需降权,需配置 NET_ADMIN capability
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
```bash
|
||||
./run.sh dev
|
||||
# 前端 http://localhost:5173(vite dev,代理 /api 到后端)
|
||||
# 后端 http://localhost:8080(go run)
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now opsx-vpn
|
||||
journalctl -u opsx-vpn -f # 查看日志
|
||||
```
|
||||
|
||||
### 常用命令
|
||||
## 防火墙 / 安全组端口
|
||||
|
||||
部署到云服务器时,需开放以下端口:
|
||||
|
||||
### VPN 数据通道(对公网开放)
|
||||
|
||||
| 端口 | 协议 | 类型 | 用途 |
|
||||
|---|---|---|---|
|
||||
| UDP 51820 | WireGuard | UDP | WG 默认监听端口(可在创建时改) |
|
||||
| UDP 1194 | OpenVPN | UDP | OpenVPN 默认端口(可改 TCP) |
|
||||
| TCP 1194 | OpenVPN | TCP | OpenVPN TCP 模式(如选 TCP) |
|
||||
| UDP 500 | IPSec / IKEv2 / L2TP | UDP | IKE 密钥交换 |
|
||||
| UDP 4500 | IPSec / IKEv2 / L2TP | UDP | NAT-T 穿透 |
|
||||
| UDP 1701 | L2TP | UDP | L2TP 隧道 |
|
||||
| TCP 7000 | FRP | TCP | frps 绑定端口(客户端连接用) |
|
||||
|
||||
### 管理(仅限你的 IP 或内网)
|
||||
|
||||
| 端口 | 协议 | 类型 | 用途 |
|
||||
|---|---|---|---|
|
||||
| TCP 8080 | 管理平台 | TCP | Web UI + API(**勿对公网开放**,建议 Nginx HTTPS 后改 443) |
|
||||
| TCP 22 | SSH | TCP | 远程管理 |
|
||||
|
||||
### 安全组配置示例
|
||||
|
||||
```
|
||||
# VPN 数据通道(对公网开放)
|
||||
UDP 500/4500 0.0.0.0/0 # IPSec/IKEv2/L2TP 密钥交换 + NAT-T
|
||||
UDP 51820 0.0.0.0/0 # WireGuard
|
||||
UDP 1194 0.0.0.0/0 # OpenVPN UDP
|
||||
TCP 1194 0.0.0.0/0 # OpenVPN TCP(如启用)
|
||||
UDP 1701 0.0.0.0/0 # L2TP
|
||||
TCP 7000 0.0.0.0/0 # FRP server
|
||||
|
||||
# 管理(仅限你的 IP)
|
||||
TCP 8080 你的IP/32 # 管理 UI
|
||||
TCP 22 你的IP/32 # SSH
|
||||
```
|
||||
|
||||
> **注意**:IPSec 必须同时开放 UDP 500 + 4500(缺一个连不上)。管理端口 8080 切勿对公网开放。仅用 WireGuard 最简部署只需 3 个端口:UDP 51820 + TCP 8080 + TCP 22。
|
||||
|
||||
## 协议依赖安装
|
||||
|
||||
| 协议 | 安装方式 | 平台下载 |
|
||||
|---|---|---|
|
||||
| WireGuard | `apt install -y wireguard-tools` | ❌ 系统包 |
|
||||
| OpenVPN | `apt install -y openvpn` | ✅ GitHub Release / 系统包 |
|
||||
| StrongSwan (IPSec/IKEv2/L2TP) | `apt install -y strongswan strongswan-swanctl` | ❌ 系统包 |
|
||||
| FRP | 无需系统包 | ✅ 平台 UI「下载部署」自动从 GitHub 下载 |
|
||||
|
||||
在「总览 → 协议引擎状态」表中,未就绪的协议会显示「下载部署」或「安装命令」按钮。
|
||||
|
||||
## 环境变量
|
||||
|
||||
| 变量 | 默认 | 说明 |
|
||||
|---|---|---|
|
||||
| `VPN_LISTEN_ADDR` | `:8080` | 监听地址 |
|
||||
| `VPN_DATA_DIR` | `./data` | 数据目录(SQLite、密钥、实例配置、下载的二进制) |
|
||||
|
||||
## 常用命令
|
||||
|
||||
| 命令 | 说明 |
|
||||
|---|---|
|
||||
@@ -61,16 +156,9 @@ make run
|
||||
| `./run.sh build` | 全量构建(前端 + 后端二进制) |
|
||||
| `./run.sh dev` | 开发模式(前后端分离) |
|
||||
| `./run.sh stop` | 停止所有服务 |
|
||||
| `./run.sh restart` | 重启服务 |
|
||||
| `./run.sh restart` | 重新构建并重启 |
|
||||
| `./run.sh status` | 查看服务状态 |
|
||||
|
||||
## 环境变量
|
||||
|
||||
| 变量 | 默认 | 说明 |
|
||||
|---|---|---|
|
||||
| `VPN_LISTEN_ADDR` | `:8080` | 监听地址 |
|
||||
| `VPN_DATA_DIR` | `./data` | 数据目录(SQLite、密钥、实例配置) |
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
@@ -83,28 +171,17 @@ backend/
|
||||
model/ # GORM 数据模型
|
||||
store/ # SQLite + AES-GCM 密钥存储
|
||||
service/ # 协议实现
|
||||
wireguard/ ipsec/ l2tp/ frp/ openvpn/
|
||||
wireguard/ ipsec/ ikev2/ l2tp/ frp/ openvpn/
|
||||
custom/ # 自定义协议插件
|
||||
monitor/ # 状态/流量采集、到期自动停止
|
||||
monitor/ # 状态/流量/会话/配额采集引擎
|
||||
sessionmgr/ # 在线会话同步 + 连接审计
|
||||
trafficmgr/ # 流量配额 + 异常检测 + 限速
|
||||
binmgr/ # 协议二进制下载部署 + 安装引导
|
||||
sshutil/ # SSH 连接测试(节点验证)
|
||||
```
|
||||
|
||||
## 自定义协议插件契约
|
||||
|
||||
在「协议插件」页注册 5 个命令钩子,平台执行时将 `{"id","name","protocol","config"}` JSON 写入 stdin:
|
||||
|
||||
| 钩子 | 约定 |
|
||||
|---|---|
|
||||
| Start(必填) | 启动实例,失败退出码非 0 |
|
||||
| Stop | 停止实例 |
|
||||
| Status | stdout 输出 `running` / `stopped` |
|
||||
| Config | stdout 输出客户端配置文本(供下载) |
|
||||
| Create(可选) | 创建时调用,用于渲染配置 |
|
||||
|
||||
## 依赖检测与部署状态
|
||||
|
||||
平台启动时自动检测 `wg / swanctl / xl2tpd / openvpn / frps / frpc`。依赖缺失时仍可创建和导出配置,但专线会标记为**未部署**,启动操作将明确报错;安装对应依赖后即可由平台启动和管理真实进程。
|
||||
|
||||
## 交付形态
|
||||
|
||||
- **单二进制**:前端构建后通过 `go:embed` 内嵌进 Go 二进制,`./opsx-vpn` 单文件即可运行(含 SPA + REST API + SQLite)
|
||||
- 不依赖 Docker、不依赖外部数据库
|
||||
- 纯静态编译:`CGO_ENABLED=0` 可交叉编译到任意 Linux/Windows
|
||||
Reference in new issue
Block a user