58c036c34c94c49272721ed36d7a6c64bf606147
VPN 专线管理平台
Gin + Vue3 + SQLite 的多协议 VPN 专线 Web 管理平台:单二进制交付、配置简单、管理便捷、可扩展自定义协议。
支持协议
| 协议 | 实现方式 | 场景 |
|---|---|---|
| WireGuard | 系统 wg / wg-quick,密钥自动生成 |
内部接入、移动办公(首选) |
| IPSec | StrongSwan swanctl,内置 Cisco/飞塔/华为/华三模板 |
第三方对接、站点互联 |
| L2TP/IPSec | StrongSwan + xl2tpd | 手机/老设备兼容 |
| FRP | 直接管理 frps / frpc(TOML) |
内网穿透、端口映射 |
| OpenVPN | 进程管理 + 配置模板 + PKI 脚本 | 老项目兼容 |
| 自定义协议 | 插件命令钩子(Create/Start/Stop/Status/Config) | 任意协议扩展 |
核心功能
- 专线列表:名称/协议/状态/流量/到期时间,一键启停、编辑、删除、下载配置、WireGuard 二维码
- 创建向导:选协议 → 填参数 → 自动生成服务端与客户端配置
- IPSec 第三方对接专页:设备模板预置 Phase1/Phase2 参数、双方参数一致性检查、一键连通性测试、对端参考配置导出
- 节点管理:多中继节点(本机内置,远程节点预留)
- 协议插件:注册命令钩子即接入新协议,钩子通过 stdin 接收专线配置 JSON
- 安全:PSK/私钥 AES-GCM 加密存储、配置文件 0600 权限、操作审计
快速开始
单二进制构建与运行(默认,不使用 Docker)
# 方式一:一键构建并运行
./run.sh run
# 方式二:make
make run
run.sh 会自动完成「构建前端 → 编译 Go → 启动单二进制」全流程,监听 :8080,默认账号 admin / admin123。
分步构建
./run.sh build # 全量构建(前端 + 二进制)
./run.sh build-frontend # 仅构建前端
./run.sh build-binary # 仅编译二进制(需先构建前端)
./opsx-vpn # 直接运行二进制
开发模式(前后端分离)
./run.sh dev
# 前端 http://localhost:5173(vite dev,代理 /api 到后端)
# 后端 http://localhost:8080(go run)
常用命令
| 命令 | 说明 |
|---|---|
./run.sh run |
构建并后台运行单二进制(默认) |
./run.sh build |
全量构建(前端 + 后端二进制) |
./run.sh dev |
开发模式(前后端分离) |
./run.sh stop |
停止所有服务 |
./run.sh restart |
重启服务 |
./run.sh status |
查看服务状态 |
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
VPN_LISTEN_ADDR |
:8080 |
监听地址 |
VPN_DATA_DIR |
./data |
数据目录(SQLite、密钥、实例配置) |
项目结构
frontend/ # Vue3 + Element Plus 前端
backend/
main.go # Gin 入口(内嵌前端 embed.FS)
internal/
api/ # REST 路由与鉴权
core/ # Protocol 统一接口 + 注册中心
model/ # GORM 数据模型
store/ # SQLite + AES-GCM 密钥存储
service/ # 协议实现
wireguard/ ipsec/ l2tp/ frp/ openvpn/
custom/ # 自定义协议插件
monitor/ # 状态/流量采集、到期自动停止
自定义协议插件契约
在「协议插件」页注册 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、不依赖外部数据库
Languages
Go
59.7%
Vue
25.2%
Rust
5.6%
TypeScript
3.8%
JavaScript
2.4%
Other
3.3%