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、不依赖外部数据库
S
Description
No description provided
Readme
3.8 MiB
0 Stars 1 Watchers 0 Forks
Languages
Go 59.7%
Vue 25.2%
Rust 5.6%
TypeScript 3.8%
JavaScript 2.4%
Other 3.3%