前言
Xray-Core 是目前功能最强大的代理内核之一,而 Reality 协议凭借其“无需证书”、“抗封锁能力强”的特点,成为目前最推荐的部署方案。本文基于 Xray-Core 官方文档,手把手教你部署 VLESS-Reality 节点。假设你已经拥有一台 Linux 服务器,并且已经部署好了一个正常的 HTTPS 网站(用于伪装流量)。
1. 准备工作
在开始之前,请确保你拥有以下信息:
- 服务器 IP 地址
- 域名:例如
example.com - 域名对应的 IP 解析:确保域名解析到了当前服务器的公网 IP。
- 网站证书:服务器上 443 端口已经运行了一个网站(如 Nginx/Caddy),并且该网站拥有域名的有效 SSL 证书。
- 注意:Xray Reality 需要模拟与服务器的 TLS 握手,因此服务器本地必须能处理该域名的 HTTPS 请求。
- Xray-Core 已安装:如果你还没安装,可以使用官方一键脚本安装。
2. 生成 Reality 密钥对
Reality 协议需要一对非对称密钥(私钥和公钥)。私钥在服务器端签名,公钥发给客户端验证。
在服务器终端运行以下命令:
xray x25519
输出示例:
{
"public": "这里粘贴生成的公钥",
"private": "这里粘贴生成的私钥"
}
请妥善保存这两个值:
- Private Key:填入服务器配置文件。
- Public Key:填入客户端配置文件。
3. 生成 UUID
VLESS 协议需要一个唯一的用户 ID (UUID)。
运行以下命令生成:
xray uuid
输出示例:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4. 编写服务器配置文件 (config.json)
根据你的需求,我们生成以下配置。
配置参数说明:
- 端口:
8443(自定义端口,避开 443 冲突) - 域名 (ServerName):
example.com(替换为你的域名) - 伪装目标 (Dest):
example.com:443(指向本地网站) - 协议:
vless - 流控 (Flow):
xtls-rprx-vision(推荐,提升性能) - Xver (Proxy Protocol):
0(不发送 PROXY protocol 头)
配置文件内容:
请将以下代码保存为 /usr/local/etc/xray/config.json(注意替换所有 // 替换为... 的内容):
{
"log": {
"access": "/var/log/xray/access.log",
"error": "/var/log/xray/error.log",
"loglevel": "warning"
},
"inbounds": [
{
// 入站监听端口
"port": 8443,
// 协议类型
"protocol": "vless",
"settings": {
"clients": [
{
// 步骤3生成的 UUID
"id": "替换为你的UUID",
// 启用流控
"flow": "xtls-rprx-vision"
}
],
// Reality 模式下,TLS 已加密,无需额外解密
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
// 是否显示握手失败页面
"show": false,
// 伪装目标:Xray 将模拟与 localhost:443 的 TLS 握手
"dest": "example.com:443",
// 是否发送 PROXY protocol 头,0为关闭,1为开启
"xver": 0,
// 客户端连接时使用的 SNI 域名列表
"serverNames": [
"example.com"
],
// 步骤2生成的私钥
"privateKey": "替换为Private Key",
// 接受的 Short ID 列表,空字符串表示接受任意
"shortIds": [
""
]
}
}
}
]
}
注意:
- 确保
dest指向的域名在服务器本地 DNS 解析正确,且本地 443 端口有对应的 HTTPS 证书。- 如果
dest和serverNames中的域名不一致,请根据实际域名调整。
5. 启动与验证服务
1. 验证配置格式
在重启前,检查配置文件是否有语法错误:
xray -c /usr/local/etc/xray/config.json format
如果没有报错,说明 JSON 格式合法。
2. 启动 Xray 服务
systemctl restart xray
3. 检查运行状态
systemctl status xray
如果显示 Active: active (running),则服务已启动。
4. 验证端口监听
使用 ss 命令检查 8443 端口是否正在监听:
ss -tlnp | grep 8443
预期输出:
LISTEN 0 511 :::8443 :::* users:(("xray",pid=xxxx,fd=6))
如果看到上述输出,说明配置成功生效。
5. 配置防火墙
确保服务器防火墙放行了 8443 端口:
Ubuntu/Debian (UFW):
ufw allow 8443/tcp
ufw reload
CentOS/RHEL (Firewalld):
firewall-cmd --zone=public --add-port=8443/tcp --permanent
firewall-cmd --reload
6. 客户端配置
现在你需要在客户端(手机/电脑)上填入以下信息。你可以使用 Xray 分享链接 (vless://) 或手动配置。
参数列表:
| 参数 | 值 | 说明 |
|---|---|---|
| Address (地址) | example.com | 你的域名 |
| Port (端口) | 8443 | 服务器监听端口 |
| Id (ID) | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | 步骤3生成的 UUID |
| Security (加密) | xtls-rprx-vision | 必须与服务端 Flow 一致 |
| SNI | example.com | 服务器域名 |
| Type (底层传输) | tcp | |
| PublicKey | 这里粘贴Public Key | 步骤2生成的公钥 |
| ShortId | (留空) | 服务端允许任意 ShortId |
| Flow | xtls-rprx-vision | 与服务端一致 |
分享链接格式:
vless://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@example.com:8443?type=tcp&encryption=none&security=reality&sni=example.com&fp=chrome&pbk=这里粘贴Public Key&flow=xtls-rprx-vision
7. 常见问题排查
- 客户端提示 “TLS Handshake Timeout”
- 检查服务器防火墙是否放行 8443。
- 检查
dest指向的本地网站(443端口)是否正常开启,且证书有效。 - 检查
serverNames中的域名是否与客户端 SNI 一致。
- 客户端提示 “Protocol Error” 或连接断开
- 检查 UUID 是否正确。
- 检查
flow是否一致(服务端xtls-rprx-vision,客户端加密方式选xtls-rprx-vision)。 - 检查
PublicKey是否复制完整(Base64 字符串)。
- 日志报错 “Permission denied”
- 确保
/var/log/xray/目录有写入权限,或者使用sudo启动 Xray。
- 确保
- 同一服务器共用 443 端口
- 如果 Xray 监听 8443,网站监听 443,则无冲突。
- 如果 Xray 也想监听 443,需通过 Nginx/Caddy 根据 SNI 或路径进行分流,或者使用
xver: 1配合 Nginx 的proxy_protocol。
8. 总结
通过以上步骤,你已成功搭建了一个基于 Xray-Core 的 VLESS-Reality 节点。该配置具有抗封锁能力强、无需自定义证书、性能优异等特点。
下一步建议:
- 定期备份
config.json。 - 监控日志
/var/log/xray/access.log以观察流量情况。 - 根据需求调整
maxClientIps或shortIds以增强安全性。
(注:本文配置严格基于 Xray-Core 官方文档生成,字段有效性已通过文档核对。)