知识库 使用 Profitserver 服务的简单说明
主要 知识库 Xray VLESS Reality Guide:VPS、Windows、Mac、Android、iPhone

Xray VLESS Reality Guide:VPS、Windows、Mac、Android、iPhone


本Xray VLESS Reality 服务器设置指南将引导您在 VPS 上部署现代代理。目前,使用 Reality 传输安全层的 VLESS 是最受欢迎的自托管代理设置:与传统 VPN 不同,它不会生成独特的握手或固定的数据包签名。Reality 会克隆一个真实、热门网站(目标网站)的 TLS 1.3 握手,因此对于监控网络的深度包检测 (DPI) 系统来说,连接到您服务器的行为与访问该网站的行为完全相同——因为您的服务器会在握手期间短暂转发目标网站的实际证书,所以不存在伪造或自签名证书可供识别。

协议栈包括:VLESS(一种轻量级、无状态的代理协议,用于处理身份验证)、运行在XTLS Vision(一种流控制模式,通过在原始套接字级别复制已加密的 TLS 记录来加速连接)之上,并由Reality(上文所述的伪装层)提供安全保护。这三者均来自同一个项目 Xray-core,它是原始 V2Ray/V2Fly 项目的积极维护的后续项目。

本指南将指导您如何手动设置 Xray 服务器,完全通过命令行操作,无需 Web 控制面板,也无需 Docker——最大限度地减少 VPS 上的资源占用。无需域名,也无需购买 TLS 证书:Reality 会借用目标网站的证书进行握手,而不会提供自己的证书。接下来,在“your_IP”处,您需要输入您分配的 IP 地址。

你需要:一台运行 Ubuntu 22.04/24.04 或 Debian 11/12 的 VPS、root 权限、你的 VPS 的 IP 地址,以及空闲的 TCP 端口 443(没有 web 服务器、面板或其他代理正在监听该端口)。

还没有服务器?请参阅“如何订购服务器并支付费用”。

想先将它与其他自托管方案进行比较吗?请参阅AmneziaWG 服务器部署指南,了解基于 WireGuard 的替代方案;或者参阅Hysteria2 和 TUIC 设置,了解另外两种现代的、抗审查的协议。

正在连接服务器

Windows(PuTTY)

打开 PuTTY,在主机名字段中输入您的 VPS IP 地址,将端口设置为 22,然后使用您的 VPS 提供商通过电子邮件发送给您的密码以 root 用户身份登录。

服务器 IP 地址:您的 IP 地址
以 root 用户身份登录
密码:您的密码

  • 打开 PuTTY,在主机名字段中输入您的 VPS IP 地址。
Xray VLESS Reality 服务器设置 — PuTTY 连接窗口
  • 将端口设置为 22。
会话已填充 VPS IP 地址和端口 22,已保存的会话“我的 VPS”已选中,可以单击“打开”。
  • 输入以root用户身份登录。
打开一个新的 PuTTY 终端窗口,建立 SSH 会话并提示输入登录用户名。
  • 使用您的VPS提供商通过电子邮件发送给您的密码。然后您应该会进入服务器的shell提示符。
输入 root 后,PuTTY 会提示输入帐户密码。

有关通过 PuTTY/SSH 连接的详细步骤,请参阅如何通过 SSH 连接到 Linux 服务器。

Xray VLESS Reality 服务器设置已成功通过 SSH 登录。

Linux / macOS(终端)

ssh root@your_IP

以下所有命令均在服务器上的同一 SSH 会话中运行——这涵盖了第 2 节到第 6 节,以及第 10 节中的服务器端检查。第 7 节到第 9 节(安装和配置 VPN 客户端)则在您自己的 Windows/Android/iOS 设备上进行,因为代理需要在该设备上运行;这些章节中明确说明了哪些行(如果有)仍然需要与服务器交互。

准备服务器

更新系统

安装任何软件之前,请刷新软件包列表并升级已安装的软件包:

apt update -y && apt upgrade -y
运行 apt update 来刷新软件包列表。 运行 apt upgrade 来安装可用的软件包更新。 升级过程仍在继续——正在解压和配置新软件包。 升级完成——如果内核已更新,建议重启。

如果在 apt 升级后会话中断,这是预期的(dbus/polkit 已重启) - 只需通过 SSH 重新连接即可。 

如果此操作升级了内核,建议重启系统后再继续。(如需复习 apt 以及 Linux 软件包管理器的工作原理,请参阅Linux 软件包管理器。)检查:

cat /var/run/reboot-required

如果文件存在,请先使用“rebo​​ot”命令重启,等待约 30 秒,然后重新连接。

安装本指南使用的工具

apt install -y curl wget unzip openssl ufw qrencode

Xray 安装程序本身需要 Curl 和 unzip;openssl 在第 4 节中生成短 ID;ufw 是下面配置的防火墙;qrencode 在第 7 节中将完成的客户端链接转换为可扫描的二维码。

正在安装所需工具:curl、wget、unzip、openssl、ufw、qrencode。

检查系统时钟

Reality 的握手过程包含时间戳检查(maxTimeDiff 字段,默认禁用但值得了解),如果时钟出现明显偏差,也可能导致服务器上其他地方的普通 TLS 证书验证出现异常。请确认时钟已同步:

timedatectl status
Timedatectl 状态输出确认系统时钟已同步。

如果“系统时钟同步”显示为“否”,请启用它:

timedatectl set-ntp true

配置防火墙(UFW)

有关 UFW 规则的更多信息,请参阅在 Linux 上配置防火墙。

打开你需要的两个端口:22/tcp 用于 SSH(跳过此规则,你可能会失去对服务器的访问权限)和 443/tcp,Xray 将监听该端口,也是普通 HTTPS 流量使用的端口——这正是它成为 Reality 正确选择的原因。

ufw allow 22/tcp
允许 SSH(端口 22/tcp)通过 UFW 防火墙。
ufw allow 443/tcp
允许 Xray 代理端口 (443/tcp) 通过 UFW。
ufw --force enable
使用 --force 选项启用 UFW 防火墙。
ufw status
Ufw 状态输出显示两条规则(22 和 443)均已激活并允许。

ufw 状态输出中这两条规则都应该显示为 ALLOW。

为 VLESS Reality Server 安装 Xray-core

Xray-core 项目 (XTLS) 发布了一个官方的安装和升级脚本,该脚本会将二进制文件安装为 systemd 服务。在将任何第三方脚本通过管道传递给 bash 之前,请务必先进行审查——此脚本直接来自项目自身的代码库。

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
安装用于 VLESS Reality 服务器设置的 Xray-core。

确认二进制文件已安装到位并检查已安装的版本:

/usr/local/bin/xray version
使用 /usr/local/bin/xray 版本检查已安装的 Xray-core 版本。

如果命令输出分页且似乎卡住,请按 Q 退出。Xray 二进制文件已安装到 /usr/local/bin/xray其配置文件存储在 /usr/local/etc/xray/.

您还可以使用相同的安装脚本来升级现有安装。要查看完整的选项列表(包括卸载、仅更新地理数据和日志轮换),请运行:

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

生成密钥和凭证

真实性认证依赖于四项数据。请立即生成所有数据;您将在第 5 节中将它们粘贴到服务器配置中。

为客户端生成 UUID

/usr/local/bin/xray uuid
使用 xray uuid 生成 VLESS 客户端 UUID。

这是 VLESS 用户 ID——请将其视为凭证,因为它用于验证客户端与服务器之间的连接。对于您要授予访问权限的每个其他设备或用户,请再次运行此命令。

生成 Reality X25519 密钥对

/usr/local/bin/xray x25519
生成 Reality X25519 密钥对——私钥、密码和 Hash32。

这会打印三行:PrivateKey、Password和Hash32。PrivateKey仅用于服务器配置,绝对不能共享。Password 是对应的公钥——尽管名称如此,但这是每个客户端都需要输入的值;Xray 特意将该字段从 PublicKey 重命名为 Password,以防止用户随意发布。Hash32 仅用于独立的 VLESS 加密功能,Reality 设置中不需要它。

生成一个短 ID

openssl rand -hex 8
使用 openssl rand -hex 8 生成一个短 ID。

这将生成一个 16 个字符的十六进制字符串,用于区分不同的客户端或客户端组。服务器和客户端必须使用相同的值。

选择并测试一个现实目标

目标是真实网站,您的服务器需要模仿其 TLS 握手过程。目标网站应支持 TLS 1.3 和 HTTP/2,不能位于 Cloudflare 等 CDN 服务之后(Xray 会将所有 Reality 身份验证失败的流量直接转发到目标网站,因此,如果目标网站位于 CDN 服务之后,您的服务器可能会变成该 CDN 服务的开放中继)。理想情况下,目标网站应与您的 VPS 托管在同一网络区域,以获得合理的延迟情况。直接从服务器测试候选目标网站:

/usr/local/bin/xray tls ping www.microsoft.com:443
使用 xray tls ping 测试 Reality 目标的 TLS 握手。

使用主机名,不要使用 URL。以下几个域名常被用作 Reality 测试目标,因为它们稳定、支持 TLS 1.3 且未使用 CDN:www.microsoft.com、addons.mozilla.org、dl.google.com。测试几个域名,选择一个从您的 VPS 服务器位置可以稳定响应的域名;您需要在目标域名和第 5 部分中的 serverNames 条目中使用相同的主机名。

编写服务器配置

备份安装程序自带的配置文件,然后打开该文件进行编辑:

cp /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.orig
nano /usr/local/etc/xray/config.json
编辑 Xray config.json 文件以进行 VLESS Reality 服务器设置。

打开配置文件进行编辑:

nano /usr/local/etc/xray/config.json
在 nano 文本编辑器中编辑 config.json 文件。

请将整个文件替换为以下模板,并将第 4 部分中的 UUID、私钥、短 ID 和目标主机名替换为您自己的 UUID、私钥、短 ID 和目标主机名(如果您在第 2 部分中将其从 443 端口更改为其他端口,则还需要替换为该端口):

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "users": [
          {
            "id": "YOUR-UUID-HERE",
            "flow": "xtls-rprx-vision",
            "email": "client1"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "method": "raw",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "target": "www.microsoft.com:443",
          "serverNames": ["www.microsoft.com"],
          "privateKey": "YOUR-SERVER-PRIVATE-KEY",
          "shortIds": ["YOUR-SHORT-ID"]
        }
      }
    }
  ],
  "outbounds": [
    { "protocol": "freedom", "tag": "direct" },
    { "protocol": "blackhole", "tag": "blocked" }
  ]
}

按 Ctrl+O(WriteOut)保存文件。

按回车键确认文件名。

按Ctrl+X退出nano。

重要字段:users[].id 是第 4 节中的 UUID;users[].flow 启用 XTLS Vision;method(以前称为 network)选择 RAW 传输方式,即 Reality 所需的纯 TCP 传输方式;target 和 serverNames 是您在第 4 节中测试的站点;privateKey 是服务器端的 X25519 密钥,切勿使用 Password 值;shortIds 列出了客户端允许使用的所有短 ID。要稍后添加更多用户,请将其他对象追加到 users 数组中,每个对象都应具有自己的 UUID 和电子邮件标签,然后重启服务。

自 Xray 26.3.27 版本起,如果 Reality 入站请求中没有显式指定 minClientVer 字段,则会强制使用服务器自身的核心版本——旧版本的客户端应用(例如,使用过时的 v2rayN、v2rayNG 或 Streisand 构建并捆绑了旧版 Xray 核心的版本)会被静默重定向到目标服务器的备用页面,而不会建立连接。客户端不会报错,服务器日志中也不会出现明显的异常。如果某个客户端在更新后突然超时,请首先尝试更新客户端应用本身;如果无法更新,请在 realitySettings 中添加 "minClientVer": "25.9.11"(或其他更早的版本),但这样做会导致旧客户端的 TLS 指纹与现代浏览器的兼容性略有下降。

验证并重启

在重启线上服务之前测试配置——这样可以避免因 JSON 拼写错误和不支持的字段导致代理服务器宕机:

/usr/local/bin/xray run -test -c /usr/local/etc/xray/config.json
使用 xray run -test 验证新配置——未发现错误。

启动服务并启用自动启动

使用新配置重启 Xray,并启用开机自动启动功能:

systemctl enable --now xray
启用 Xray 在系统启动时自动启动。
systemctl restart xray
正在重启 Xray 服务以应用新配置。
systemctl status xray --no-pager
Systemctl status xray 输出 — 服务处于活动状态(正在运行)。

状态应显示为活动(正在运行)。请确认确实有程序在监听 443 端口:

ss -lntp | grep ':443'
使用 ss -lntp 确认 Xray 正在监听端口 443。

如果 Xray 启动失败,最快的查看原因是查看 systemd 日志(有关阅读 Linux 日志的一般背景知识,请参阅如何阅读 Linux 日志以及在哪里可以找到它):

journalctl -u xray -n 50 --no-pager

建立客户端连接链接

Xray 客户端导入的是单个 vless:// 共享链接,而不是配置文件。根据第 4 节中生成的值构建该链接(客户端应用程序的共享链接格式仍然使用旧的传输类型 type=tcp,即使 JSON 字段本身现在称为 method):

YOUR-UUID — 来自 xray uuid(例如,a1b2c3d4-e5f6-7890-abcd-ef1234567890)

YOUR-PASSWORD-PUBLIC-KEY — 是来自 xray x25519 的密码(不是私钥!)

YOUR-SHORT-ID — 来自 openssl rand -hex 8(例如,a1b2c3d4e5f67890)

您的IP地址 — (您的服务器IP地址)

SNI — www.microsoft.com(或您的目标网站)

vless://YOUR-UUID-HERE@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=YOUR-PASSWORD-PUBLIC-KEY&sid=YOUR-SHORT-ID&type=tcp&flow=xtls-rprx-vision#My-Xray-Server

示例链接: 

vless://a1b2c3d4-e5f6-7890-abcd-ef1234567890@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=xyz_public_key_here&sid=a1b2c3d4e5f67890&type=tcp&flow=xtls-rprx-vision#My-Xray-Server

pbk 是来自 xray x25519 的密码值(公钥,而不是私钥),sni 与目标主机名匹配,# 后面的文本只是一个显示标签,您可以在任何客户端中自由重命名。

将其转换为二维码,以便移动用户可以直接扫描:

qrencode -o ~/vless-client.png "vless://YOUR-UUID@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=YOUR-PASSWORD-PUBLIC-KEY&sid=YOUR-SHORT-ID&type=tcp&flow=xtls-rprx-vision#My-Xray-Server"

或者直接将其打印到终端,而不保存文件:

qrencode -t ansiutf8 "vless://YOUR-UUID@your_IP:443?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome&pbk=YOUR-PASSWORD-PUBLIC-KEY&sid=YOUR-SHORT-ID&type=tcp&flow=xtls-rprx-vision#My-Xray-Server"
使用 qrencode 从 vless:// 客户端链接生成二维码。

使用 scp 命令将 PNG 文件复制到您自己的计算机上,并在您计算机的终端(或 Windows 上的 PowerShell)中运行该命令,而不是在服务器上运行:

scp root@your_IP:~/vless-client.png .

从 Windows 连接

本节中的所有操作都在您的 Windows PC 上进行,而不是通过 SSH 进行——客户端必须在实际使用代理的设备上运行。

安装 v2rayN

v2rayN 是一款免费且积极维护的 GUI 客户端,它捆绑了 Xray-core,并原生支持 VLESS/Reality。请从项目页面下载最新版本:

获取 Windows 64 位 .zip 资源(自包含版本,从最新的 v2rayN 版本开始,无需单独的 .NET 运行时),将其解压到任意位置,然后运行 ​​v2rayN.exe。

导入服务器

将第 7 部分中内置的 vless:// 链接复制到剪贴板(或者使用 scp 命令复制 QR PNG 文件并打开),然后在 v2rayN 中选择“服务器”,然后选择“从剪贴板批量导入 URL”(或者使用内置扫描器扫描 QR 码)。新的服务器配置文件将出现在列表中,并在 # 后显示您设置的标签。

右键单击配置文件并将其选为活动配置文件,然后从主窗口工具栏启用系统代理(或 TUN 模式,用于路由整个计算机)。

通过 Android 连接

这里的所有操作都在您的安卓设备上进行,而不是通过 SSH。

安装 v2rayNG

v2rayNG 是 v2rayN 的 Android 版本,由同一维护者开发,也是 Android 上使用最广泛的 X 射线客户端。您可以从 Google Play 安装,如果 Play 在您所在的地区不可用,也可以直接从项目的发布页面下载 APK 文件:

导入服务器

打开 v2rayNG,点击右上角的“+”按钮,复制 vless:// 链接后选择“从剪贴板导入配置”,或者扫描二维码并将摄像头对准第 7 部分生成的 PNG 文件。点击导入的配置文件进行选择,然后点击底部的圆形连接按钮。Android 系统首次连接时会提示授予 VPN 权限——请允许以建立连接。

从 iOS 连接

所有操作都在您的 iPhone 或 iPad 上进行,而非通过 SSH。根据苹果 App Store 的准则,iOS 上的 Xray/VLESS 客户端通常是免费的,但偶尔也会有付费的独立应用,而不是系统集成功能。

安装一个支持 Reality 的客户端

Streisand 是一款免费的开源客户端,支持 VLESS with Reality 以及其他几种协议。您可以在 App Store 中搜索它,或者点击此链接。

App Store 的目录因商店/地区而异,并且会随着时间而改变;如果 Streisand 在您的商店中不可见,支持 VLESS+Reality 的替代应用包括 Happ、V2Box 和 V2rayTun — 在 App Store 中搜索适用于您帐户的应用。

导入服务器

将 vless:// 链接复制到剪贴板,打开客户端,然后使用其“从剪贴板添加”(或等效的“导入”)选项,或者使用客户端内置的扫描器扫描第 7 部分中的二维码。启用新配置文件;iOS 系统首次启用时会提示授予 VPN 配置权限,您需要通过面容 ID、触控 ID 或密码进行授权。

验证连接

从第 8、9 或 10 节激活隧道后,回到您自己的设备(而不是 SSH 会话),在浏览器中打开任何“我的 IP 地址是什么”检查器——显示的地址应该与您的 VPS 的 IP 地址匹配。

要从服务器端进行验证,请检查 systemd 日志中的连接活动,并确认端口 443 上已建立 TCP 会话:

journalctl -u xray -n 50 --no-pager
ss -tnp | grep ':443'

在默认的“警告”日志级别下,Xray 不会打印太多关于单个连接的信息;如果您在排查故障时需要查看更多详细信息,请暂时在 config.json 中将“loglevel”设置为“info”并重新启动服务,然后在一切正常后将其切换回“警告”。

文献参考:

领域

价值

地址

您的VPS的公网IP地址

港口

443(与第 2 部分打开的端口相同)

UUID / id

您的 UUID 在此处 — 在第 4 节中使用 xray uuid 生成

自动化流程

xtls-rprx-vision — 两侧必须匹配

安保防护

现实

SNI / 服务器名称

第 4 节中测试的目标主机名,例如 www.microsoft.com

指纹(fp)

chrome — 受支持的 uTLS 指纹;必须在客户端上设置

公钥 / pbk

xray x25519 中的密码值——绝非私钥

短 ID / SID

使用 openssl rand -hex 8 生成;必须与 shortIds 中的值匹配

结语

按照本指南操作,您的 VPS 将运行一个独立的 Xray VLESS+Reality 服务器,该服务器伪装成指向真实网站的普通 HTTPS 流量,无需域名和证书维护。该服务以 systemd 单元 xray 的形式运行,并且在您无需任何操作的情况下,重启后仍然有效。

随时可以通过在 config.json 的 users 数组中添加另一个对象来添加新客户端,该对象具有来自 xray uuid 的新 UUID 和不同的电子邮件标签,然后重启服务 (systemctl restart xray) 并根据第 7 节为该用户构建他们自己的共享链接。每个人或设备使用单独的 UUID 可以撤销某个用户或设备,而不会影响其他人。

服务器运行后,以下几个习惯值得保持:

  • 保持 Xray 补丁更新。定期重新运行第 3 节中的安装脚本(它会就地升级现有安装),并根据第 5 节中提到的 minClientVer 行为,保持客户端应用程序更新。
  • 将 config.json 文件备份到服务器以外的私密位置。该文件保存着服务器的 Reality 私钥和每个客户端的 UUID;丢失该文件意味着需要为每个设备重新生成凭据。
  • 立即撤销丢失的设备。从 config.json 文件中的 users 数组中删除相应的条目,然后重启服务。

如果连接始终无法建立,请按以下顺序检查:

  • 服务状态(systemctl status xray --no-pager)和日志(journalctl -u xray -n 50 --no-pager)
  • 防火墙规则(ufw 状态 — 端口 443/tcp 必须打开)
  • 端口 443 没有被其他服务占用(ss -lntp | grep ':443' 应该只显示 xray)。
  • 客户端中的 UUID、公钥、短 ID、SNI 和流程必须与 config.json 完全匹配——哪怕只有一个字符不匹配,握手也会静默失败。
  • 现实目标本身,带有X射线TLS ping :443,以防网站更改其 TLS 配置

想将 Xray 与其他方案进行比较?请参阅AmneziaWG 服务器部署指南和如何在服务器上设置 WireGuard VPN,了解基于 WireGuard 的替代方案;或者参阅Hysteria2 和 TUIC 设置,了解另外两种专为丢包或过滤严重的网络设计的抗审查协议。如果您只需要一个简单的代理而不是完整的隧道设置,那么在 CentOS/ArchLinux 上配置 3proxy是一个更轻量级的选择;而 Linux 上的旧版VPN 服务器设置:PPTP 还是 OpenVPN?则涵盖了设置更简单但更容易被深度包检测 (DPI) 检测和屏蔽的协议。代理上线后,如需进行常规服务器加固,请参阅Linux 用户:管理和权限。

❮ 上一篇文章 AmneziaWG 服务器部署指南

向我们咨询有关 VPS 的问题

无论白天还是黑夜,我们随时准备解答您的问题。