Files
opsx-vpn/README.md
T

111 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
```bash
# 方式一:一键构建并运行
./run.sh run
# 方式二:make
make run
```
`run.sh` 会自动完成「构建前端 → 编译 Go → 启动单二进制」全流程,监听 `:8080`,默认账号 **admin / admin123**。
### 分步构建
```bash
./run.sh build # 全量构建(前端 + 二进制)
./run.sh build-frontend # 仅构建前端
./run.sh build-binary # 仅编译二进制(需先构建前端)
./opsx-vpn # 直接运行二进制
```
### 开发模式(前后端分离)
```bash
./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、不依赖外部数据库