代理与网络
教程进阶17 分钟

VLESS + Reality + Vision 基础部署:目前抗检测能力最强的自建代理

在 443 空闲的 VPS 上部署最小可用的 Reality 节点

VLESS + Reality + Vision 基础部署:目前抗检测能力最强的自建代理 封面图
更新于 2026年7月12日0 收藏0 认为有帮助系列第 2 / 5
验证版本
Xray v26.3.27
验证日期
2026-05-28 08:00
现在可看
19 个
剩余内容
当前页已完整
开始前
你会得到什么
  • 完成 Xray Reality 最小部署
  • 生成 UUID、X25519 密钥和 Short ID
  • 用客户端验证链路可用
  • 得到目前抗检测能力最强的自建代理
开始前要有
  • VPS 的 443 端口空闲
  • root 或 sudo 权限
  • 客户端支持 Reality
关键工具
Xray-core · v26.3.27
VLESS
Reality
XTLS-Vision
UFW
systemd
行动入口

来源与后续讨论

这里不是普通友情链接,而是读完文章后最应该跳转确认的地方:官网确认版本,GitHub 看源码和 Issue,第三方来源做交叉参考,X 帖子看后续补充和讨论。

建议顺序:官网 → GitHub → 第三方来源 → X 讨论。遇到版本差异时,优先相信官网和仓库发布记录。
正文

VLESS + Reality + Vision 基础部署:目前抗检测能力最强的自建代理

这篇适合只有一台 VPS,没有网站,443 端口空闲的情况.目标是让 Xray 直接监听 443,用 VLESS + Reality + XTLS-Vision 跑出一条最小可用链路.

如果你的服务器已经有 Nginx 网站占用 443,不要照抄本文.应该看 Nginx SNI 分流版,让 Nginx 接管 443,再把 Reality 流量转到 Xray 内部端口.

适合和不适合的场景

适合:

✅ VPS 443 端口空闲,没有跑任何网站

✅ IP 目前可以直连,没被墙

✅ 追求最简单的部署,配置文件越少越好

✅ 不需要域名,直接用 IP 连接

不适合:

  • 443 已经由 Nginx,Caddy,Apache 或其他服务占用.
  • 必须隐藏 VPS 源站 IP.
  • 已经有 Cloudflare 代理域名,并且希望所有流量经 Cloudflare 中转.

如果你不确定 443 是否空闲,先执行:

命令bash
ss -tulnp | grep ':443'

没有输出,才适合继续使用本文的直连方案.

部署架构

输出text
  |  | VLESS + Reality + XTLS-Vision  | SNI: www.microsoft.com  vVPS:443  |  vXray reality inbound

这里没有 Nginx,也没有 Cloudflare.Xray 直接对外监听 443,所有连接都由 Xray 判断是否是合法 Reality 客户端.

前置条件

建议准备:

  • Ubuntu 22.04 或 24.04 LTS,或 Debian 12.
  • root 或 sudo 权限.
  • 一个可直连的 VPS 公网 IPv4.
  • 本地客户端,例如 v2rayN,v2rayNG,Nekoray 或其他兼容 Xray Reality 的客户端.

v2ray客户端v7.19.5,v7.18.0版本仍完整支持 security=reality,flow=xtls-rprx-visionfp=chrome.

vless-reality-vision-basic_Reality基础部署闭环教学图

步骤一:更新系统并开启 BBR

命令bash
# 系统更新apt update && apt upgrade -y vim /etc/sysctl.conf# 把下面三行内容复制到此文件的最末尾# 开启 BBR 拥塞控制,提升网络性能net.core.default_qdisc=fqnet.ipv4.tcp_congestion_control=bbr # 使配置生效sysctl -p # 验证 BBR 是否生效sysctl net.ipv4.tcp_congestion_control# 应输出:net.ipv4.tcp_congestion_control = bbr

最后一条命令输出 bbr,说明拥塞控制已生效.

如果你的系统镜像已经默认开启 BBR,这一步重复执行通常不会影响服务.但正式发布前建议在目标系统上复测,避免不同云厂商镜像行为不一致.

步骤二:安装 Xray-core

使用 XTLS 官方安装脚本:

命令bash
# 使用官方安装脚本(自动安装最新版)bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install # 验证安装xray version

步骤三:生成 UUID,Reality 密钥和 Short ID

命令bash
# 1. 生成 UUID(用于用户身份验证)xray uuid# 示例输出:a3b2c1d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx  → 记为 <UUID> # 2. 生成 X25519 密钥对(Reality 核心)xray x25519# 示例输出:# PrivateKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  → 记为 <PRIVATE_KEY># Password (PublicKey):  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy  → 记为 <PUBLIC_KEY> # 3. 生成 Short ID(8字节随机十六进制)openssl rand -hex 8# 示例输出:a1b2c3d4e5f6a7b8  → 记为 <SHORT_ID> # 4. 获取服务器公网 IPcurl -4 ifconfig.me# 记为 <SERVER_IP>

记录四个值:

占位符来源用途
<UUID>xray uuid客户端身份
<PRIVATE_KEY>xray x25519 的 PrivateKey服务端 Reality 私钥
<PUBLIC_KEY>xray x25519 的 PublicKey 或 Password客户端 Reality 公钥
<SHORT_ID>openssl rand -hex 8Reality shortId
<SERVER_IP>curl -4 ifconfig.me客户端连接地址

不要把 <PRIVATE_KEY> 放进客户端,也不要把真实 UUID 和私钥发布到博客,截图或公开仓库.

步骤四:写入 Xray 服务端配置

编辑配置文件:

命令bash
vim /usr/local/etc/xray/config.json

写入以下配置,并替换占位符:

配置json
{  "log": {    "loglevel": "warning"  },  "inbounds": [    {      "tag": "reality-in",      "listen": "0.0.0.0",      "port": 443,      "protocol": "vless",      "settings": {        "clients": [          {            "id": "<UUID>",            "flow": "xtls-rprx-vision"          }        ],        "decryption": "none"      },      "streamSettings": {        "network": "tcp",        "security": "reality",        "realitySettings": {          "show": false,          "dest": "www.microsoft.com:443",          "serverNames": ["www.microsoft.com", "microsoft.com"],          "privateKey": "<PRIVATE_KEY>",          "shortIds": ["<SHORT_ID>"]        }      },      "sniffing": {        "enabled": true,        "destOverride": ["http", "tls", "quic"],        "routeOnly": true      }    }  ],  "outbounds": [    {      "protocol": "freedom",      "tag": "direct"    },    {      "protocol": "blackhole",      "tag": "block"    }  ],  "routing": {    "domainStrategy": "IPIfNonMatch",    "rules": [      {        "type": "field",        "ip": ["geoip:private"],        "outboundTag": "block"      },      {        "type": "field",        "protocol": ["bittorrent"],        "outboundTag": "block"      }    ]  }}

伪装域名应该选择稳定的大型 HTTPS 站点,并且客户端 SNI,服务端 serverNamesdest 要保持一致.不要随意把 dest 改成无法正常 TLS 握手的站点.

步骤五:检查配置并启动服务

命令bash
# 检查配置是否正确xray -test -config /usr/local/etc/xray/config.json# 重新加载配置systemctl daemon-reload# 启动服务并设置开机自启systemctl enable --now xray# 检查运行状态systemctl status xray# 等一会,再查看443 是否在正常监听. 一定要出现类似的输出,才算服务正常ss -tulnp | grep 443tcp   LISTEN 0      4096                 *:443             *:*    users:(("xray",pid=9013,fd=3)) # 如果443还是没有监听到,就重启一下试试systemctl restart xray# 查看日志(排错用,查看启动情况)journalctl -u xray -f

预期结果:

  • xray -test 没有报错.
  • systemctl status xray 显示服务正在运行.
  • ss 能看到 Xray 监听 0.0.0.0:443*:443.

如果 443 没有监听,先看日志:

命令bash
systemctl status xray --no-pager -l# 如果有以下问题,则修改文件后從重启一下:/etc/systemd/system/xray.service:7: Special user nobody configured, this is not safe! vim /etc/systemd/system/xray.service# User=nobody  <-- 注释掉或删除这行sudo systemctl daemon-reloadsudo systemctl restart xray

步骤六:配置防火墙(看情况需要)

不要在没有放行 SSH 的情况下启用 UFW,否则可能把自己锁在服务器外.

命令bash
# 安装 ufw(如未安装)apt install ufw -y # 放行 SSH(避免锁死)ufw allow 22/tcp # 放行 VLESS 端口ufw allow 443/tcp # 查看状态ufw status# 启用防火墙ufw enable

如果云厂商还有安全组,也要同步放行 443/TCP.系统防火墙和云安全组缺一不可.

步骤七:服务端快速验证

先验证本机 443 是否有 TLS 响应:

命令bash
curl -sIv https://www.microsoft.com \  --resolve www.microsoft.com:443:127.0.0.1 \  -m 8 2>&1 | grep -Ei 'SSL connection|ALPN|subject|issuer|HTTP/'

类似结果如下:

输出text
* ALPN: offers h2,http/1.1* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384* ALPN: server accepted h2*  subject: C=US; ST=WA; L=Redmond; O=Microsoft Corporation; CN=www.microsoft.com*  subjectAltName: host "www.microsoft.com" matched cert's "www.microsoft.com"*  issuer: C=US; O=Microsoft Corporation; CN=Microsoft TLS G2 RSA CA OCSP 04* using HTTP/2> HEAD / HTTP/2< HTTP/2 200HTTP/2 200

再验证服务状态和端口:

命令bash
systemctl is-active xrayss -tlnp | grep ':443'xray version # 类似结果如下:activeLISTEN 0      4096               *:443             *:*    users:(("xray",pid=13712,fd=3))Xray 26.3.27 (Xray, Penetrates Everything.) d2758a0 (go1.26.1 linux/amd64)A unified platform for anti-censorship.

脚本验证

  1. 写验证脚本
命令bash
cat << 'EOF' > ~/check-reality.sh#!/bin/bash # --- 颜色与格式定义 ---GREEN="\033[32m"RED="\033[31m"YELLOW="\033[33m"RESET="\033[0m" VPS_IP=$(curl -4s ifconfig.me)SNI="www.microsoft.com"TARGET_IP="127.0.0.1" # 本机测试,排除外部防火墙干扰 echo -e "${YELLOW}=================================================${RESET}"echo -e "${YELLOW}       REALITY 伪装防封锁深度诊断脚本            ${RESET}"echo -e "${YELLOW}=================================================${RESET}"echo -e "VPS 公网 IP: ${GREEN}${VPS_IP}${RESET}"echo -e "伪装目标域名(SNI): ${GREEN}${SNI}${RESET}"echo "" # ---------------------------------------------------echo -e "${YELLOW}[1] Xray 核心服务与端口监听${RESET}"if systemctl is-active --quiet xray; then    echo -e "Xray 运行状态: ✅ ${GREEN}运行中 (Active)${RESET}"else    echo -e "Xray 运行状态: ❌ ${RED}未运行 (请执行 systemctl status xray 查看错误)${RESET}"fiecho "监听端口(443/xray):"ss -tlnp | grep -E "xray|443" | sed 's/^/   /' || echo -e "   ${RED}警告: 未发现监听 443 的进程${RESET}" # ---------------------------------------------------echo -e "\n${YELLOW}[2] 模拟 GFW 嗅探 (HTTP 响应提取)${RESET}"# 获取完整响应头并清除可能导致排版混乱的回车符HTTP_RES=$(curl -sI https://$SNI --resolve $SNI:443:$TARGET_IP -m 5 | tr -d '\r')HTTP_CODE=$(echo "$HTTP_RES" | grep -i "^HTTP/")SERVER_HEADER=$(echo "$HTTP_RES" | grep -i "^Server:") echo -e "HTTP 状态码: ${GREEN}${HTTP_CODE:-"/超时"}${RESET}" # ---------------------------------------------------echo -e "\n${YELLOW}[3] 验证身份铁证 (AkamaiGHost 等大厂 CDN)${RESET}"if [[ -n "$SERVER_HEADER" ]]; then    echo -e "提取到的标识: ${GREEN}${SERVER_HEADER}${RESET}"    if [[ "$SERVER_HEADER" =~ "AkamaiGHost" || "$SERVER_HEADER" =~ "Microsoft" ]]; then        echo -e "结论: ✅ ${GREEN}身份铁证成立!GFW 探测时只会看到一个真实的微软 CDN 节点.${RESET}"    else        echo -e "结论: ⚠️ ${YELLOW}返回了响应,但 Server 不是微软/Akamai.请确认配置的 dest 是否对应.${RESET}"    fielse     echo -e "结论: ❌ ${RED}未提取到 Server 头信息,伪装被拒绝或未生效.${RESET}"fi # ---------------------------------------------------echo -e "\n${YELLOW}[4] 验证 TLS 握手无缝衔接${RESET}"# 捕获 curl 的底层 verbose 输出TLS_LOG=$(curl -sIv https://$SNI --resolve $SNI:443:$TARGET_IP -m 5 2>&1) # 提取核心的握手成功标志TLS_CONN=$(echo "$TLS_LOG" | grep -i "SSL connection using" | tr -d '\r')ALPN_ACCEPT=$(echo "$TLS_LOG" | grep -i "ALPN" | grep -i "accepted" | tr -d '\r') if [[ -n "$TLS_CONN" ]]; then    echo -e "握手协议版本: ${GREEN}${TLS_CONN}${RESET}"    if [[ -n "$ALPN_ACCEPT" ]]; then        echo -e "ALPN 协商结果: ${GREEN}${ALPN_ACCEPT}${RESET}"    fi    echo -e "结论: ✅ ${GREEN}TLS 握手无缝衔接!底层加密通道已顺滑建立,无特征暴露.${RESET}"else    echo -e "结论: ❌ ${RED}TLS 握手存在异常特征或被中途阻断!${RESET}"    echo -e "${YELLOW}>> 详细错误日志: ${RESET}"    echo "$TLS_LOG" | grep -i "SSL\|TLS\|error\|alert" | sed 's/^/   /'fi # ---------------------------------------------------echo -e "\n${YELLOW}[5] 验证数字证书归属 (偷天换日)${RESET}"CERT_INFO=$(echo | openssl s_client -connect $TARGET_IP:443 -servername $SNI 2>/dev/null | openssl x509 -noout -subject -issuer 2>/dev/null)if [[ -n "$CERT_INFO" ]]; then    echo -e "结论: ✅ ${GREEN}成功获取目标网站的真实 TLS 证书:${RESET}"    echo "$CERT_INFO" | sed 's/^/   /'else    echo -e "结论: ❌ ${RED}无法获取证书,伪装可能已失效.${RESET}"fi echo -e "\n${YELLOW}=================================================${RESET}"EOF
  1. 给脚本添加执行权限,并运行
命令bash
chmod +x ~/check-reality.shbash ~/check-reality.sh
  1. 类似输出结果
输出text
=================================================       REALITY =================================================VPS  IP: <SERVER_IP>(SNI): www.microsoft.com [1] Xray Xray :   (Active)(443/xray):   LISTEN  0        4096                          *:443                   *:* [2]  GFW  (HTTP )HTTP : HTTP/2 200 [3]  (AkamaiGHost  CDN): server: AkamaiGHost:  !GFW  CDN . [4]  TLS : * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384ALPN : * ALPN, server accepted to use h2:  TLS !,. [5]  ():   TLS :   subject=C = US, ST = WA, L = Redmond, O = Microsoft Corporation, CN = www.microsoft.com   issuer=C = US, O = Microsoft Corporation, CN = Microsoft TLS G2 RSA CA OCSP 04

这些检查只能说明服务端形态正常,不能替代客户端连通性验证.真正能否使用,还要看客户端导入节点后是否能完成 Reality 握手,访问外部网站,并确认 DNS,出口 IP 和速度符合预期.

步骤八:生成客户端连接参数

vless-reality-vision-basic_服务端与客户端参数对应关系教学图

VLESS 分享链接示例:

输出text
vless://<UUID>@<SERVER_IP>:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.microsoft.com&fp=chrome&pbk=<PUBLIC_KEY>&sid=<SHORT_ID>&type=tcp#MyServer-Reality

v2rayN 参数表:

参数
地址<SERVER_IP>
端口443
UUID<UUID>
Flowxtls-rprx-vision
传输tcp
TLSreality
SNIwww.microsoft.com
Fingerprintchrome
PublicKey<PUBLIC_KEY>
ShortId<SHORT_ID>

导入后,先测真连接延迟,再打开代理访问一个能显示出口 IP 的页面.不要只看客户端"测试成功",还要确认出口 IP 是 VPS 或你预期的网络出口.

常见错误

443 被其他服务占用

现象:

输出text
address already in use

处理:

命令bash
ss -tulnp | grep ':443'

如果是 Nginx 占用,不要强行停站点,改用 Nginx SNI 分流版.

客户端公钥和服务端私钥不匹配

Reality 客户端使用 <PUBLIC_KEY>,服务端使用 <PRIVATE_KEY>.两者来自同一次 xray x25519 输出.重新生成后,服务端和客户端必须一起更新.

云安全组没放行 443

系统里 ss 显示已经监听,但客户端仍然连不上,优先检查云厂商控制台的安全组,防火墙和端口策略.

伪装站点不可用

如果 dest 指向的站点 TLS 响应异常,Reality 的回落表现也会异常.换站点前要同时更新服务端 dest,serverNames 和客户端 SNI.

小结

这一版是整个系列的最小闭环:

  • Xray 直接监听 443,适合没有网站的 VPS.
  • Reality 需要 UUID,X25519 密钥对和 Short ID 三类关键参数.
  • 服务端配置通过 xray -test 后,再启动 systemd 服务.
  • 防火墙要同时检查系统 UFW 和云安全组.
  • 服务端验证只能证明形态正常,客户端验证才证明链路真正可用.

如果 443 已经被网站占用,下一步看 VLESS + Reality + Nginx SNI 分流,用 Nginx 把网站和 Reality 放在同一个 443 入口下.

0%
继续行动
阅读提示

按文章步骤复核自己的 VPS、域名、端口和客户端参数。

复制命令前先替换占位符并执行配置检查。现在可看 19 段,这页已经可以直接看完。属于系列 VLESS/Xray 自建代理实战 · 第 2 / 5 篇

这篇已经可以直接看完,可以继续下一篇。

相关阅读

按顺序继续补齐上下文

4
继续这个系列

VLESS/Xray 自建代理实战

当前第 2 / 5
更新记录
2026年5月25日
已完成验证