VPN 安装配置过程记录
VPN 安装配置过程记录
环境
| 项目 | 详情 |
|---|---|
| 硬件 | Intel Celeron J3455 @ 1.50GHz, 8GB RAM |
| 系统 | Ubuntu 22.04.5 LTS (amd64) |
| 网络 | WiFi, 内网 IP 192.168.1.156 |
| 用户 | 普通用户 wys,有 sudo 权限 |
目标
安装 v2rayA + Xray-core,导入 xeno6.top 订阅,使机器能通过代理访问外网,同时局域网内其他设备也能使用该代理。
安装过程
1. v2rayA 安装
尝试 1:APT 官方源(失败)
添加 v2rayA 官方 APT 源时,GPG 密钥已过期(EXPKEYSIG),导致 apt update 报错,无法通过 APT 安装。
尝试 2:GitHub 直接下载 .deb(成功)
1 | curl -L "https://github.com/v2rayA/v2rayA/releases/download/v2.2.7.5/installer_debian_x64_2.2.7.5.deb" -o /tmp/v2raya.deb |
成功安装 v2rayA 2.2.7.5。
2. Xray-core 安装
尝试 1:官方安装脚本(超时)
curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh | sudo bash 因网络问题下载极慢(预计 3 分钟+),终止。
尝试 2:直接下载 GitHub Release(成功)
1 | curl -L "https://github.com/XTLS/Xray-core/releases/download/v26.3.27/Xray-linux-64.zip" -o /tmp/xray.zip |
成功安装 Xray-core 26.3.27。
3. 配置阶段
基础配置
- v2rayA 默认监听
0.0.0.0:2017(已包含局域网访问) - 创建
/etc/default/v2raya指定V2RAYA_V2RAY_BIN=/usr/local/bin/xray - 移动 geoip.dat / geosite.dat 到
/usr/local/share/xray/
遗留数据清理
系统残留了 5 月 14 日的旧 v2rayA 配置(/etc/v2raya/config.json 和 bolt.db),导致 API 访问需要认证。删除数据库重新初始化:
1 | sudo systemctl stop v2raya |
4. API 对接(关键调试过程)
v2rayA 的 Web API 是本次配置中最复杂的部分。
账号创建
- 首次访问
/api/touch后才能创建账号(v2rayA 的 CSRF 保护机制) - 尝试了多个端点后发现正确流程:先
GET /api/touch→ 然后POST /api/account - 账号:admin / admin123
- 认证方式:JWT Bearer Token
订阅导入
- 尝试了
/api/subscriptions、/api/subscription(均 404) - 最终发现正确端点是
POST /api/import - 请求格式:
{"url": "订阅地址"}
连接节点(核心问题)
这是遇到的最大障碍。通过 POST /api/connection 可以设置连接:
1 | { |
API 返回 SUCCESS,connectedServer 被成功设置,但 running 始终为 false,Xray 进程从未被启动。
排查过程:
- 检查日志:
/var/log/v2raya/v2raya.log中无任何连接错误 - 检查资产目录:geoip.dat / geosite.dat 在
/run/user/0/v2raya/已就位(v2rayA 自动创建了符号链接) - 分析 v2rayA Web UI 的 JavaScript 代码(
/static/js/app.f8a5d29c.js),确认使用了相同的 API 参数格式 - 发现关键问题:订阅导入后,节点详情中的
Link字段为空("")
根因分析:
v2rayA 的 /api/import 导入订阅时只保存了节点摘要信息(名称、地址、协议类型),但没有解析节点的完整 vmess:// 链接(包含 UUID、传输配置等)。当 /api/connection 被调用时,v2rayA 需要 Link 字段来生成 Xray 配置,但由于 Link 为空,配置生成失败,Xray 无法启动。
这个问题的根本原因是 v2rayA 2.2.7.5 版本中,通过 API 导入订阅不会自动解析节点的完整连接信息。在 Web UI 中点击节点时,前端会单独请求解析,但 API 缺少这一步。
5. 最终方案:手动配置 Xray
绕开 v2rayA 的连接管理,直接手动配置 Xray:
- 从订阅链接 base64 解码提取 vmess:// 节点
- 找到目标节点(HK 0301)的完整配置
- 手工编写 Xray 配置文件
/usr/local/etc/xray/config.json - 创建 systemd 服务
/etc/systemd/system/xray.service - 启动 systemd 服务
注意事项:
- 使用
sudo tee配合 heredoc 写入文件时,sudo -S会导致密码字符串wys混入文件开头 - 解决方案:改用
sudo python3 -c "..."直接写文件
6. 最终测试
| 测试 | 结果 |
|---|---|
| Google (代理) | HTTP 200, 0.86s |
| YouTube (代理) | HTTP 200 |
| Baidu (代理) | HTTP 200(直连规则) |
| Google (直连) | 超时 |
总结
最终架构:
- Xray 手动配置 + systemd 管理(负责实际代理流量)
- v2rayA 保留运行(Web 面板可浏览节点、更新订阅)
- 两者独立运行,不互相依赖