Files
infosave2007 809b0ca63d feat(migrations): Add WARP auto-integration with redsocks and iptables
- Implemented migration 067 to set up Cloudflare WARP with automatic routing for VPN client TCP traffic through a redsocks proxy.
- Included installation scripts for WARP and redsocks, along with iptables rules for traffic redirection.
- Added detection for X-Ray and patching of its outbound configuration.
- Created uninstall scripts to clean up configurations and remove installed packages.

fix(migrations): Enhance WARP install script for heredoc compatibility

- Implemented migration 068 to fix nested heredoc conflicts and streamline the WARP installation script for panel compatibility.
- Removed duplicate `set -eo pipefail` and adjusted formatting for better readability.

feat(migrations): Auto-detect AIVPN subnet for routing in WARP setup

- Implemented migration 069 to enhance the WARP installation script by adding detection for AIVPN subnets alongside existing AWG container detection.
- Updated routing logic to handle both container IPs and host-level VPN subnets.
- Ensured proper configuration of iptables for seamless traffic routing through the WARP proxy.
2026-04-25 10:40:21 +03:00

409 lines
12 KiB
Markdown
Raw Permalink 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.
# Amnezia VPN Web Panel
用于管理 Amnezia AWG (WireGuard) VPN 服务器的 Web 面板。
## 功能特性
- 通过 SSH 部署 VPN 服务器(密码或 **SSH 密钥**
- **从现有 VPN 面板导入**wg-easy、3x-ui
- **高级协议管理**WireGuard、AmneziaWG、OpenVPN、Shadowsocks 等)
- **AI 驱动的协议配置** 使用 OpenRouter(可选)
- 客户端配置管理,支持**过期日期**
- 客户端**流量限制**,自动执行
- **服务器备份和恢复**功能
- **场景测试**:定义和测试不同协议的网络连接场景
- **高级日志管理**:查看、搜索和管理系统和容器日志
- 流量统计监控
- 为移动应用生成二维码
- 多语言界面(英语、俄语、西班牙语、德语、法语、中文)
- 带 JWT 认证的 REST API
- 用户认证和访问控制
- **自动客户端过期和流量限制检查** 通过 cron
## 可用协议
- AmneziaWG Advanced (`amnezia-wg-advanced`)
- AmneziaWG 2.0 (`awg2`)
- WireGuard 标准 (`wireguard-standard`)
- OpenVPN (`openvpn`)
- Shadowsocks (`shadowsocks`)
- XRay VLESS (`xray-vless`)
- MTProxy (Telegram) (`mtproxy`)
- SMB 服务器 (`smb`)
- AIVPN (`aivpn`) - https://github.com/infosave2007/aivpn
- Cloudflare WARP 代理 (`cf-warp`) — 通过 Cloudflare 透明代理流量
## 系统要求
- Docker
- Docker Compose
## 安装
```bash
git clone https://github.com/infosave2007/amneziavpnphp.git
cd amneziavpnphp
cp .env.example .env
# 对于 Docker Compose V2(推荐)
docker compose up -d
docker compose exec web composer install
# 等待数据库准备就绪(初始 SQL 迁移文件由 MySQL 入口点自动应用)
until [ "$(docker inspect -f '{{.State.Health.Status}}' amnezia-panel-db 2>/dev/null)" = "healthy" ]; do
sleep 2
done
# 或者对于旧版 Docker Compose V1
docker-compose up -d
docker-compose exec web composer install
until [ "$(docker inspect -f '{{.State.Health.Status}}' amnezia-panel-db 2>/dev/null)" = "healthy" ]; do
sleep 2
done
# 手动迁移模式(仅用于现有安装/更新)
set -a; source .env; set +a
for f in migrations/*.sql; do
docker compose exec -T db mysql -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" < "$f" || true
done
# 对于 Docker Compose V1 手动迁移模式:
# for f in migrations/*.sql; do
# docker-compose exec -T db mysql -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" < "$f" || true
# done
```
访问地址:http://localhost:8082
默认登录凭据:admin@amnez.ia / admin123
### 远程服务器前提条件
要在干净的远程主机上部署协议,该主机必须可用 Docker Engine。
如果缺少 Docker,请先安装(Ubuntu 示例):
```bash
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu ${VERSION_CODENAME} stable" > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
```
## 配置
编辑 `.env` 文件:
```
DB_HOST=db
DB_PORT=3306
DB_DATABASE=amnezia_panel
DB_USERNAME=amnezia
DB_PASSWORD=amnezia
ADMIN_EMAIL=admin@amnez.ia
ADMIN_PASSWORD=admin123
JWT_SECRET=your-secret-key-change-this
```
## 使用方法
### 添加 VPN 服务器
1. 服务器 → 添加服务器
2. 输入:名称、主机 IP、SSH 端口、用户名
3. 选择认证方法:**密码** 或 **SSH 密钥**
- 对于 SSH 密钥:粘贴您的私钥(PEM/OpenSSH 格式)
3. **(可选)启用从现有面板导入:**
- 勾选"从现有面板导入"
- 选择面板类型(wg-easy 或 3x-ui
- 上传备份文件(JSON
4. 点击"创建服务器"
5. 等待部署完成
6. 如果启用了导入,客户端将自动导入
### 创建客户端
1. 打开服务器详情
2. 输入客户端名称
3. **选择过期时间**(可选,默认:永不过期)
4. **选择流量限制**(可选,默认:无限制)
5. 点击创建客户端
6. 下载配置或扫描二维码
### 管理客户端过期时间
通过 UI 或 API 设置过期时间:
```bash
# 设置特定日期
curl -X POST http://localhost:8082/api/clients/123/set-expiration \
-H "Authorization: Bearer <token>" \
-d '{"expires_at": "2025-12-31 23:59:59"}'
# 延长 30 天
curl -X POST http://localhost:8082/api/clients/123/extend \
-H "Authorization: Bearer <token>" \
-d '{"days": 30}'
# 获取即将过期的客户端(7 天内)
curl http://localhost:8082/api/clients/expiring?days=7 \
-H "Authorization: Bearer <token>"
```
### 管理流量限制
通过 UI 或 API 设置和监控流量限制:
```bash
# 设置流量限制(10 GB = 10737418240 字节)
curl -X POST http://localhost:8082/api/clients/123/set-traffic-limit \
-H "Authorization: Bearer <token>" \
-d '{"limit_bytes": 10737418240}'
# 移除流量限制(设置为无限制)
curl -X POST http://localhost:8082/api/clients/123/set-traffic-limit \
-H "Authorization: Bearer <token>" \
-d '{"limit_bytes": null}'
# 检查流量限制状态
curl http://localhost:8082/api/clients/123/traffic-limit-status \
-H "Authorization: Bearer <token>"
# 获取超过流量限制的客户端
curl http://localhost:8082/api/clients/overlimit \
-H "Authorization: Bearer <token>"
```
### 服务器备份
通过 UI 或 API 创建和恢复备份:
```bash
# 创建备份
curl -X POST http://localhost:8082/api/servers/1/backup \
-H "Authorization: Bearer <token>"
# 列出备份
curl http://localhost:8082/api/servers/1/backups \
-H "Authorization: Bearer <token>"
# 从备份恢复
curl -X POST http://localhost:8082/api/servers/1/restore \
-H "Authorization: Bearer <token>" \
-d '{"backup_id": 123}'
```
### 协议管理
通过 **设置 → 协议** 管理 VPN 协议:
- 安装/卸载协议(WireGuard、AmneziaWG、OpenVPN 等)
- 配置协议设置(端口、传输、混淆)
- **AI 助手**:使用"询问 AI"生成符合您需求的复杂协议配置(需要 OpenRouter API 密钥)。
### Cloudflare WARP 代理
WARP 透明地代理 **所有 TCP 流量** 从 VPN 客户端通过 Cloudflare 网络,隐藏服务器的真实 IP 地址。
> **⚠️ 最后安装 WARP** — 在所有其他协议之后(AWG、X-Ray、AIVPN 等)。安装过程中,WARP 会自动检测活跃的 VPN 容器和接口,并为每个配置路由。
**支持的协议:**
- **AWG / AWG2** — 通过容器 IP + 主机 redsocks 路由
- **X-Ray VLESS** — 通过 X-Ray 配置中的 SOCKS5 `warp-out` 出站
- **AIVPN / WireGuard** — 通过主机级 iptables + redsocks 路由
**验证:** 连接到 VPN 并打开 `https://1.1.1.1/cdn-cgi/trace` — 字段 `warp=on` 确认工作正常。
### 场景测试和日志
**场景测试**
- 创建测试场景以验证跨不同协议和网络条件的连接。
- 运行自动化测试以确保您的 VPN 基础设施可靠。
**日志管理**
- 所有系统、容器和应用程序日志的集中视图。
- 搜索和过滤功能,快速诊断问题。
### AI 助手
**设置** 中配置 OpenRouter API 密钥以启用:
- 界面自动翻译
- AI 辅助协议配置
- 智能故障排除建议
### 自动监控和指标收集
**指标收集器在容器启动时自动运行**,并由 cron 每 3 分钟监控一次。如果进程崩溃,将自动重启。
检查指标收集器日志:
```bash
docker compose exec web tail -f /var/log/metrics_collector.log
```
检查监控脚本日志:
```bash
docker compose exec web tail -f /var/log/metrics_monitor.log
```
手动重启指标收集器:
```bash
docker compose exec web pkill -f collect_metrics.php
# 它将在 3 分钟内由监控脚本自动重启
```
### 自动客户端过期检查
**在 Docker 容器中自动运行**,每小时禁用过期客户端。
检查 cron 日志:
```bash
docker compose exec web tail -f /var/log/cron.log
```
手动运行:
```bash
docker compose exec web php /var/www/html/bin/check_expired_clients.php
```
### 自动流量限制检查
**在 Docker 容器中自动运行**,每小时禁用超过流量限制的客户端。
检查 cron 日志:
```bash
docker compose exec web tail -f /var/log/cron.log
```
手动运行:
```bash
docker compose exec web php /var/www/html/bin/check_traffic_limits.php
```
### API 认证
获取 JWT 令牌:
```bash
curl -X POST http://localhost:8082/api/auth/token \
-d "email=admin@amnez.ia&password=admin123"
```
使用令牌:
```bash
curl -H "Authorization: Bearer <token>" \
http://localhost:8082/api/servers
```
## API 端点
### 认证
```
POST /api/auth/token - 获取 JWT 令牌
POST /api/tokens - 创建持久 API 令牌
GET /api/tokens - 列出 API 令牌
DELETE /api/tokens/{id} - 撤销令牌
```
### 服务器
```
GET /api/servers - 列出所有服务器
POST /api/servers/create - 创建新服务器
参数:name, host, port, username, password
DELETE /api/servers/{id}/delete - 按 ID 删除服务器
GET /api/servers/{id}/clients - 列出服务器上的客户端
```
### 协议
```
GET /api/protocols/active - 列出所有可用协议(JWT 友好,包含协议 ID)
GET /api/protocols - 协议管理端点(需要会话管理员认证,非 JWT)
GET /api/servers/{id}/protocols - 列出服务器上已安装的协议
POST /api/servers/{id}/protocols/install - 安装协议
```
### 客户端
```
GET /api/clients - 列出所有客户端
GET /api/clients/{id}/details - 获取客户端详情,包括统计信息、配置和二维码
GET /api/clients/{id}/qr - 获取客户端二维码
POST /api/clients/create - 创建新客户端(返回配置和二维码)
参数:server_id, name, protocol_id(可选,默认:已安装), expires_in_days(可选)
POST /api/clients/{id}/revoke - 撤销客户端访问
POST /api/clients/{id}/restore - 恢复客户端访问
DELETE /api/clients/{id}/delete - 按 ID 删除客户端(从数据库和服务器删除)
POST /api/clients/{id}/set-expiration - 设置客户端过期日期
参数:expires_atY-m-d H:i:s 或 null
POST /api/clients/{id}/extend - 延长客户端过期时间
参数:daysint
GET /api/clients/expiring - 获取即将过期的客户端
参数:days(默认:7)
POST /api/clients/{id}/set-traffic-limit - 设置客户端流量限制
参数:limit_bytesint 或 null 表示无限制)
GET /api/clients/{id}/traffic-limit-status - 获取流量限制状态
GET /api/clients/overlimit - 获取超过流量限制的客户端
```
### 备份
```
POST /api/servers/{id}/backup - 创建服务器备份
GET /api/servers/{id}/backups - 列出服务器备份
POST /api/servers/{id}/restore - 从备份恢复
参数:backup_id
DELETE /api/backups/{id} - 删除备份
```
### 面板导入
```
POST /api/servers/{id}/import - 从现有面板导入客户端
参数:panel_typewg-easy|3x-ui, backup_filemultipart/form-data
GET /api/servers/{id}/imports - 获取服务器导入历史记录
```
## 翻译
在设置中添加 OpenRouter API 密钥,然后运行:
```bash
docker compose exec web php bin/translate_all.php
```
或通过 Web 界面翻译:设置 → 自动翻译
## 项目结构
```
public/index.php - 路由
inc/ - 核心类
Auth.php - 认证
DB.php - 数据库连接
Router.php - URL 路由
View.php - Twig 模板
VpnServer.php - 服务器管理
VpnClient.php - 客户端管理
Translator.php - 多语言
JWT.php - 令牌认证
QrUtil.php - 二维码生成
PanelImporter.php - 从 wg-easy/3x-ui 导入
InstallProtocolManager.php - 协议管理核心
OpenRouterService.php - AI 集成
templates/ - Twig 模板
migrations/ - SQL 迁移(按字母顺序执行)
```
## 技术栈
- PHP 8.2
- MySQL 8.0
- Twig 3
- Tailwind CSS
- Docker
## 许可证
MIT
## 支持项目
如果您觉得这个项目有用,可以通过 Tribute 捐款支持其开发:https://t.me/tribute/app?startapp=dzX1