- backend: 新增 GRE 隧道实现(ip tunnel 点对点互联),binmgr 支持 iproute2 - backend: api/identity 调整,各协议 service(gre/ikev2/ipsec/l2tp/openvpn)统一改动 - backend: OpenVPN 认证辅助与用户口令同步逻辑完善 - frontend: 协议图标/向导/编辑器支持 GRE,VPN 用户页重构(234 行) - frontend: 新增 RouteListInput 路由列表输入组件,Dashboard/Layout 优化 - i18n: 中英文文案同步更新 - test: 新增 binmgr/common/gre 单测,openvpn 测试补充 - docs: README 补充 GRE 说明,默认监听端口 8080 → 18080 - chore: .gitignore 增加 opsx-vpn.previous(构建备份二进制)
8.1 KiB
8.1 KiB
VPN 专线管理平台
Gin + Vue3 + SQLite 的多协议 VPN 专线 Web 管理平台:单二进制交付、配置简单、管理便捷、可扩展自定义协议。
支持协议
| 协议 | 实现方式 | 场景 |
|---|---|---|
| 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 |
内网穿透、端口映射 |
| GRE | Linux ip tunnel 管理标准 GRE 隧道 |
点对点网站互联 |
| OpenVPN | 进程管理 + PKI;UDP/TCP 可切换;证书/密码 + TOTP MFA | 老项目兼容 |
| 自定义协议 | 插件命令钩子(Create/Start/Stop/Status/Config) | 任意协议扩展 |
核心功能
- 专线列表:名称/协议/状态/流量/到期时间,一键启停、编辑、删除、下载配置、WireGuard 二维码
- 创建向导:选协议 → 依赖检测门控(未就绪不可选,引导下载/安装)→ 填参数(高级折叠)→ 必填校验
- 在线会话:跨协议统一展示在线用户、公网 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
快速开始
本地构建与运行
./run.sh run # 构建并运行(默认 admin / admin123)
./run.sh dev # 开发模式(前后端分离)
./run.sh restart # 重新构建并重启
./run.sh stop # 停止服务
Linux 服务器部署
# 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 iproute2 iptables
# FRP 无需系统包 —— 平台 UI 内点「下载部署」自动从 GitHub 下载到 data/bin/
# 4. 启动(生产建议用 systemd 管理)
VPN_LISTEN_ADDR=:18080 ./opsx-vpn # 生产管理端口 :18080,数据目录 ./data
systemd 服务(生产推荐)
# /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=:18080
Environment=VPN_DATA_DIR=/opt/opsx-vpn/data
# WireGuard/OpenVPN 需要 root 权限(创建 TUN 设备 + iptables)
# 如需降权,需配置 NET_ADMIN capability
[Install]
WantedBy=multi-user.target
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 协议 47 | GRE | GRE | GRE 封装(无 TCP/UDP 端口) |
管理(仅限你的 IP 或内网)
| 端口 | 协议 | 类型 | 用途 |
|---|---|---|---|
| TCP 18080 | 管理平台 | 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
# GRE 不是 TCP/UDP 端口,需在安全组中放行 GRE / IP 协议 47
GRE 协议 47 对端公网 IP/32 # 建议只允许对端地址
# 管理(仅限你的 IP)
TCP 18080 你的IP/32 # 管理 UI
TCP 22 你的IP/32 # SSH
注意:IPSec 必须同时开放 UDP 500 + 4500(缺一个连不上)。GRE 需要本端、对端及中间云安全组双向允许 IP 协议 47,不是端口号;Linux 端依赖
iproute2的ip tunnel。管理端口 18080 切勿对公网开放。仅用 WireGuard 最简部署只需 3 个端口:UDP 51820 + TCP 18080 + 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 |
❌ 系统包 |
| GRE | apt install -y iproute2(多数系统默认已安装) |
❌ 系统包 |
| FRP | 无需系统包 | ✅ 平台 UI「下载部署」自动从 GitHub 下载 |
在「总览 → 协议引擎状态」表中,未就绪的协议会显示「下载部署」或「安装命令」按钮。
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
VPN_LISTEN_ADDR |
:18080 |
监听地址 |
VPN_DATA_DIR |
./data |
数据目录(SQLite、密钥、实例配置、下载的二进制) |
常用命令
| 命令 | 说明 |
|---|---|
./run.sh run |
构建并后台运行单二进制(默认) |
./run.sh build |
全量构建(前端 + 后端二进制) |
./run.sh dev |
开发模式(前后端分离) |
./run.sh stop |
停止所有服务 |
./run.sh restart |
重新构建并重启 |
./run.sh status |
查看服务状态 |
项目结构
frontend/ # Vue3 + Element Plus 前端
backend/
main.go # Gin 入口(内嵌前端 embed.FS)
internal/
api/ # REST 路由与鉴权
core/ # Protocol 统一接口 + 注册中心
model/ # GORM 数据模型
store/ # SQLite + AES-GCM 密钥存储
service/ # 协议实现
wireguard/ ipsec/ ikev2/ l2tp/ frp/ openvpn/
custom/ # 自定义协议插件
monitor/ # 状态/流量/会话/配额采集引擎
sessionmgr/ # 在线会话同步 + 连接审计
trafficmgr/ # 流量配额 + 异常检测 + 限速
binmgr/ # 协议二进制下载部署 + 安装引导
sshutil/ # SSH 连接测试(节点验证)
交付形态
- 单二进制:前端构建后通过
go:embed内嵌进 Go 二进制,./opsx-vpn单文件即可运行(含 SPA + REST API + SQLite) - 不依赖 Docker、不依赖外部数据库
- 纯静态编译:
CGO_ENABLED=0可交叉编译到任意 Linux/Windows