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
2
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
sudo dpkg -i /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
2
curl -L "https://github.com/XTLS/Xray-core/releases/download/v26.3.27/Xray-linux-64.zip" -o /tmp/xray.zip
sudo unzip /tmp/xray.zip -d /usr/local/bin/

成功安装 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
2
3
sudo systemctl stop v2raya
sudo rm -f /etc/v2raya/bolt.db /etc/v2raya/boltv4.db /etc/v2raya/config.json
sudo systemctl start 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
2
3
4
5
6
{
"id": 29,
"sub": 1,
"outbound": "proxy",
"_type": "subscriptionServer"
}

API 返回 SUCCESS,connectedServer 被成功设置,但 running 始终为 false,Xray 进程从未被启动。

排查过程:

  1. 检查日志:/var/log/v2raya/v2raya.log 中无任何连接错误
  2. 检查资产目录:geoip.dat / geosite.dat 在 /run/user/0/v2raya/ 已就位(v2rayA 自动创建了符号链接)
  3. 分析 v2rayA Web UI 的 JavaScript 代码(/static/js/app.f8a5d29c.js),确认使用了相同的 API 参数格式
  4. 发现关键问题:订阅导入后,节点详情中的 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:

  1. 从订阅链接 base64 解码提取 vmess:// 节点
  2. 找到目标节点(HK 0301)的完整配置
  3. 手工编写 Xray 配置文件 /usr/local/etc/xray/config.json
  4. 创建 systemd 服务 /etc/systemd/system/xray.service
  5. 启动 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 面板可浏览节点、更新订阅)
  • 两者独立运行,不互相依赖