自建代理完整指南:从购买 VPS 到配置 VLESS+Reality

9.3k 词

摘要:不想依赖机场,想完全掌控自己的代理服务?本文从零开始,手把手带你走完自建代理的全流程——选购 VPS、配置服务器环境、安装 Xray、部署 VLESS+Reality、客户端连接,一步不落。适合有一定 Linux 基础、愿意动手的用户。


自建 vs 机场

在投入时间和金钱之前,先确认自建确实适合你。

自建代理的核心优势是完全控制隐私最优——服务器只有你一个人用,没有任何第三方能看到你的流量元数据。但代价也很明确:单点故障、IP 被封需要自己处理、缺少多地区覆盖、运维成本不低。

如果你不确定自建是否适合自己的情况,建议先阅读 月付 vs 年付、自建 vs 机场:决策框架 那篇文章,里面有一套系统的评估方法。

简单来说:如果你具备基本的 Linux 操作能力、只需要一个地区的节点、对隐私有较高要求、并且愿意投入时间维护——自建值得尝试。反之,机场可能更适合你。

本文假设你已经做出了自建的决定,接下来进入实操环节。


第一步:选购 VPS

VPS(Virtual Private Server,虚拟专用服务器)是你运行代理的基础设施。选购 VPS 需要考虑以下几个维度。

地理位置

VPS 的地理位置直接影响延迟和使用体验。常见的选择:

地区 典型延迟(大陆直连) 适合场景 备注
香港(HK) 30-60ms 低延迟需求、游戏 价格较贵,带宽常受限
日本(JP) 50-80ms 日常使用、流媒体 线路成熟,选择多
新加坡(SG) 60-100ms 东南亚服务、通用 部分线路绕美国
美国(US) 150-200ms 大带宽需求、低价 延迟高但带宽便宜

建议:如果只买一台,日本是综合性价比最高的选择。延迟可接受,线路稳定,价格也不算太贵。

VPS 提供商

以下是一些适合自建代理的 VPS 提供商,各有侧重:

BandwagonHost(搬瓦工)
老牌提供商,中国用户群体最大。CN2 GIA 线路质量优秀,但价格相对较高(年付 $49.99 起)。适合对线路质量有要求的用户。官网有中文界面,支持支付宝。

RackNerd
以极低价格著称,美国节点年付低至 $10 左右。经常在促销期间推出超低价套餐。适合预算有限、对延迟要求不高的用户。缺点是线路质量一般,走的是普通线路。

DMIT
提供优质的香港和日本 CN2 GIA 线路,价格比搬瓦工略低。Premium 线路质量非常好,但基础套餐带宽较小。适合追求线路质量且预算充足的用户。

AWS Lightsail
亚马逊云的轻量级 VPS 服务,$3.5/月起。优势是 IP 被封后可以免费更换(释放旧 IP 绑定新 IP),缺点是到大陆的线路质量一般。适合怕折腾 IP 问题的用户。

DigitalOcean
界面简洁,操作友好,$4/月起。新加坡和旧金山节点到大陆的线路尚可。IP 被封后也可以通过销毁重建 Droplet 的方式更换 IP。适合有一定英文基础的用户。

硬件规格

运行 Xray 代理不需要多好的配置。最低要求:

  • CPU:1 核
  • 内存:512MB(够用),1GB(更稳)
  • 硬盘:10GB SSD
  • 带宽:500GB/月以上(日常使用足够)
  • 系统:Debian 12 或 Ubuntu 22.04 LTS(推荐 Debian,更轻量)

注意事项

避免严重超售的提供商。如果一个 VPS 价格低到不合理(比如 1GB 内存年付 $5),大概率是严重超售。大量用户共享同一台物理服务器,高峰期 CPU 和网络都会被争抢,代理体验会很差。

购买前测试 IP 是否可用。很多 VPS 提供商的 IP 段已经被 GFW 封锁过。购买后发现 IP 不通会非常麻烦。部分提供商支持购买前测试 IP 或提供 IP 更换服务,优先选择这类提供商。

测试 IP 是否被封的方法:在大陆环境下用浏览器访问 https://ping.pe/<你的IP>,看各地区的连通性。


第二步:服务器基础配置

拿到 VPS 后,首先做一些基础配置来保障安全和性能。

连接服务器

VPS 提供商会给你一个 IP 地址和 root 密码(或 SSH 密钥)。用 SSH 连接:

1
ssh root@你的服务器IP

如果是 Windows 用户,可以用 PowerShell 自带的 SSH 或 PuTTY、FinalShell 等工具。

更新系统

连上服务器后,第一件事是更新系统包:

1
apt update && apt upgrade -y

安装常用工具

1
apt install -y curl wget vim unzip

开启 BBR

BBR(Bottleneck Bandwidth and Round-trip propagation time)是 Google 开发的 TCP 拥塞控制算法,能显著提升代理连接的速度和稳定性。Debian 12 和 Ubuntu 22.04 的内核已经内置了 BBR,只需要启用即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 写入配置
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 使配置生效
sysctl -p

# 验证 BBR 是否启用
sysctl net.ipv4.tcp_congestion_control
# 输出应为:net.ipv4.tcp_congestion_control = bbr

lsmod | grep bbr
# 输出应包含 tcp_bbr

配置防火墙

ufw(Uncomplicated Firewall)配置基础防火墙规则。只放行必要的端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装 ufw
apt install -y ufw

# 默认策略:拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 放行 SSH(重要!先放行再启用,否则会把自己锁在外面)
ufw allow 22/tcp

# 放行你打算给 Xray 使用的端口(这里以 443 为例)
ufw allow 443/tcp

# 启用防火墙
ufw enable

# 查看规则
ufw status verbose

⚠️ 警告:务必先放行 SSH 端口再启用 ufw,否则你会被锁在服务器外面,只能通过 VPS 提供商的控制台 VNC 才能重新登录。

(可选)创建普通用户

出于安全考虑,不建议长期使用 root 账户。可以创建一个普通用户并赋予 sudo 权限:

1
2
adduser proxyuser
usermod -aG sudo proxyuser

后续操作用 proxyuser 登录,需要管理员权限时加 sudo。本文为了简化演示,后续步骤仍以 root 执行。


第三步:安装 Xray

Xray-core 是 VLESS+Reality 协议的实现核心。使用官方的一键安装脚本:

1
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

安装完成后,验证版本:

1
xray version

输出应显示当前安装的 Xray 版本号,类似 Xray 24.12.31 (Xray, Pair of Conditions) ...

接下来生成配置所需的密钥和 UUID:

1
2
3
4
5
6
7
8
9
# 生成 UUID(用于客户端认证)
xray uuid
# 输出示例:a1b2c3d4-e5f6-7890-abcd-ef1234567890

# 生成 x25519 密钥对(用于 Reality)
xray x25519
# 输出示例:
# Private key: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
# Public key: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=

记下这三个值:UUID、Private key(私钥)、Public key(公钥)。私钥配置在服务端,公钥配置在客户端。


第四步:配置 VLESS+Reality

编辑 Xray 的主配置文件:

1
vim /usr/local/etc/xray/config.json

将以下内容写入(替换注释标注的部分为你自己生成的值):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
// 日志设置
"log": {
"loglevel": "warning" // 日志级别:debug/info/warning/error/none
},

// 入站配置(监听来自客户端的连接)
"inbounds": [
{
"listen": "0.0.0.0", // 监听所有网卡
"port": 443, // 监听端口,建议 443
"protocol": "vless", // 协议:VLESS
"settings": {
"clients": [
{
"id": "你生成的UUID", // 第三步生成的 UUID
"flow": "xtls-rprx-vision" // 流控模式,必须为 vision
}
],
"decryption": "none" // VLESS 不需要额外加密
},
"streamSettings": {
"network": "tcp", // 传输层:TCP
"security": "reality", // 安全层:Reality
"realitySettings": {
"dest": "www.apple.com:443", // 伪装目标网站(见下方说明)
"serverNames": [ // 允许的 SNI 列表
"www.apple.com",
"apple.com"
],
"privateKey": "你生成的私钥", // 第三步生成的 Private key
"shortIds": [ // 短 ID,可自定义(0-16位十六进制)
"",
"abcd1234"
]
}
}
}
],

// 出站配置(代理服务器如何访问目标网站)
"outbounds": [
{
"protocol": "freedom", // 直连出站:直接访问目标
"tag": "direct"
},
{
"protocol": "blackhole", // 黑洞出站:丢弃流量
"tag": "block"
}
]
}

ℹ️ Xray 的 JSON 配置支持 // 注释,这是 Xray 的特性而非 JSON 标准。如果你使用其他工具解析此文件可能会报错。

关键参数说明

dest(伪装目标)

dest 是 Reality 的核心参数之一,指定客户端伪装访问的目标网站。当 GFW 或任何第三方探测你的服务器时,服务器会将请求转发到这个真实网站并返回真实的 TLS 证书,使探测者认为你的服务器只是一个普通的反向代理。

选择 dest 目标的要求:

  • 必须是境外网站(不在 GFW 封锁名单上)
  • 必须支持 TLS 1.3 和 HTTP/2
  • 域名不能有重定向(访问时不能自动跳转到其他域名)
  • 目标站 IP 与你的 VPS IP 不能相差太远(最好在同一地区)

常用的 dest 目标:www.apple.com:443www.microsoft.com:443www.samsung.com:443www.lovelive-anime.jp:443。你也可以自己找——用浏览器开发者工具检查目标站是否支持 TLS 1.3 和 HTTP/2。

serverNames(SNI 列表)

serverNames 是允许客户端使用的 SNI(Server Name Indication)值。必须与 dest 目标的域名一致。通常填写 dest 中的域名及其主域名即可。

privateKey(私钥)

服务端使用的 x25519 私钥,用于与客户端完成 Reality 的密钥协商。这个值必须保密,只存在于服务端配置中。对应的公钥需要配置在客户端。

shortIds(短 ID)

额外的认证字段,可以理解为一个简单的密码。空字符串 "" 表示允许不带 shortId 的连接。你可以生成随机的十六进制字符串作为 shortId(最长 16 位),客户端连接时必须携带匹配的 shortId。

flow(流控)

设置为 xtls-rprx-vision。Vision 模式会对内层 TLS 握手包进行填充处理,消除 TLS-in-TLS 的流量特征,提高隐蔽性。使用 Reality 时必须配合 vision 使用。

关于 VLESS+Reality 原理的深入解析,参见 VLESS+Reality 深度解析。各协议的横向对比可参考 主流代理协议横向对比


第五步:启动与验证

配置写完后,启动 Xray 并设置开机自启:

1
2
3
4
5
6
7
8
# 启用开机自启
systemctl enable xray

# 启动 Xray
systemctl start xray

# 查看运行状态
systemctl status xray

如果状态显示 active (running),说明启动成功。如果显示 failed,需要查看日志排查问题:

1
2
3
4
5
# 查看 Xray 日志(实时跟踪)
journalctl -u xray -f

# 查看最近 50 行日志
journalctl -u xray -n 50

常见的启动失败原因:

  • JSON 格式错误:多了或少了逗号、引号不匹配。可以先用 xray run -test -c /usr/local/etc/xray/config.json 测试配置文件语法。
  • 端口被占用:443 端口可能被 Nginx 或其他服务占用。用 ss -tlnp | grep 443 检查。
  • 密钥格式错误:确保 UUID 和 x25519 密钥是完整复制的,没有多余的空格或换行。

第六步:客户端配置

服务端跑起来后,需要在本地设备上配置客户端来连接。

Clash Verge Rev(推荐)

Clash Verge Rev 支持 VLESS+Reality。你需要创建一个本地配置文件。

在 Clash Verge 的”订阅”(Profiles)页面中,点击”新建”,选择”Local”类型,创建一个 YAML 配置文件,填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
proxies:
- name: "我的VPS"
type: vless
server: 你的服务器IP # VPS 的 IP 地址
port: 443 # 与服务端配置一致
uuid: 你生成的UUID # 与服务端配置一致
network: tcp
udp: true
tls: true
flow: xtls-rprx-vision # 与服务端配置一致
servername: www.apple.com # 与服务端 serverNames 一致
reality-opts:
public-key: 你生成的公钥 # 第三步生成的 Public key(不是私钥!)
short-id: "abcd1234" # 与服务端 shortIds 中的某一个一致

proxy-groups:
- name: "Proxy"
type: select
proxies:
- "我的VPS"

rules:
- GEOIP,CN,DIRECT
- MATCH,Proxy

保存后,在 Clash Verge 中选中这个配置,切换代理模式为”规则”模式(Rule),然后开启系统代理或 TUN 模式。打开浏览器访问 https://www.google.com,如果能正常加载,说明一切配置正确。

ℹ️ 上面的 rules 只是最简化的示例——大陆 IP 直连,其余走代理。如果需要更精细的分流规则,参考 规则入门自定义规则

v2rayN(Windows)

v2rayN 同样支持 VLESS+Reality。添加服务器时选择 VLESS 协议,然后填入对应的参数:

  • 地址:你的服务器 IP
  • 端口:443
  • UUID:与服务端一致
  • 流控(Flow):xtls-rprx-vision
  • 传输方式:tcp
  • TLS:reality
  • SNI:www.apple.com
  • 公钥(Public Key):第三步生成的公钥
  • 短 ID(Short Id):与服务端一致

v2rayN 的界面会引导你逐项填写,按照服务端配置对应填入即可。


进阶优化

基础搭建完成后,可以通过以下手段进一步优化体验。

确认 BBR 生效

第二步中我们已经启用了 BBR。如果你跳过了那一步,或者想确认是否真的生效了:

1
sysctl net.ipv4.tcp_congestion_control

输出应为 bbr。如果显示 cubic 或其他值,回到第二步重新配置。BBR 对代理速度的提升非常明显,尤其是在丢包率较高的国际线路上。

使用 warp-cli 获取 IPv6 和解锁能力

很多 VPS 默认只有 IPv4,部分流媒体服务(如 Netflix)和 AI 服务可能需要特定地区的 IP 才能解锁。Cloudflare WARP 可以为你的 VPS 提供一个 Cloudflare 的出口 IP,有时能绕过一些 IP 限制。

安装 WARP CLI:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 添加 Cloudflare 的 APT 仓库(以 Debian 为例)
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg \
| gpg --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" \
| tee /etc/apt/sources.list.d/cloudflare-client.list

apt update && apt install -y cloudflare-warp

# 注册并启用代理模式
warp-cli registration new
warp-cli mode proxy
warp-cli connect

# 验证(通过 WARP 的 socks5 代理访问)
curl --proxy socks5://127.0.0.1:40000 https://cloudflare.com/cdn-cgi/trace

然后在 Xray 的出站配置中,可以添加一条通过 WARP 出去的出站规则,配合路由将特定流量经由 WARP 转发。这属于更高级的配置,适合有具体解锁需求的用户。

IP 监控与告警

自建节点最怕 IP 被封。你可以写一个简单的定时脚本来监控 VPS 的可达性。在大陆的一台设备上(或使用国内的云函数服务)设置 cron 任务:

1
2
# 每 30 分钟检测一次 VPS 端口是否可达
*/30 * * * * nc -z -w5 你的服务器IP 443 || curl -s "你的告警Webhook"

如果端口不通,通过 Webhook 发送通知到 Telegram 或微信。这样你能在 IP 被封后第一时间知道并着手更换 IP。


常见问题

Q1:配置完成后客户端连不上怎么办?

按以下顺序排查:

  1. 确认服务端运行正常systemctl status xray 应显示 active (running)
  2. 确认端口放行ufw status 中应有你配置的端口(如 443)的 ALLOW 规则。VPS 控制面板中如果有安全组/防火墙,也需要放行对应端口。
  3. 确认 IP 未被封:在大陆网络下访问 https://ping.pe/你的IP,看是否全国范围不通。如果大陆全部 timeout 而海外正常,说明 IP 已被 GFW 封锁,需要更换 IP。
  4. 检查客户端参数:UUID、公钥(注意是公钥不是私钥)、shortId、SNI、服务器 IP/端口是否与服务端配置完全一致。

Q2:IP 被封了怎么办?

取决于你的 VPS 提供商:

  • AWS Lightsail / DigitalOcean:释放当前 IP,重新分配一个弹性 IP(或销毁重建实例),不需要额外付费。
  • 搬瓦工:部分套餐支持在控制面板中免费更换 IP(每 10 周一次)。也可以购买付费更换。
  • 其他提供商:提工单咨询是否支持更换 IP。如果不支持,可能需要新购一台 VPS。

更换 IP 后,只需修改客户端配置中的服务器地址,服务端配置无需改动。

Q3:Reality 的 dest 目标站怎么选?

好的 dest 目标需要满足:支持 TLS 1.3、不做 301/302 重定向、在你的 VPS 地区有 CDN 节点(这样 IP 地理位置看起来合理)。一些常用选择:www.apple.comwww.microsoft.comwww.samsung.comwww.lovelive-anime.jpwww.swift.org

避免使用冷门小站(可能宕机)、已被大量自建用户使用导致被标记的目标、以及墙内可直连访问的站点。

Q4:Xray 需要手动更新吗?

是的。Xray 不会自动更新,你需要定期手动升级以获得安全补丁和性能优化。更新方法很简单,重新运行安装脚本即可:

1
2
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
systemctl restart xray

建议每 1-2 个月检查一次 Xray-core Releases 页面,看是否有重要更新。


相关资源

站内相关文章: