# VPS 一键部署 Xray VLESS-Reality（高速 / 抗封锁 / 稳定）

> 相比旧版（无 TLS 裸奔 TCP），本方案使用 **VLESS + Reality** 协议，无需域名和证书，伪装为访问真实 HTTPS 网站的流量，极难被识别和封锁。

---

## 〇、推荐配置

### 系统

| 系统 | 推荐 | 说明 |
|------|-----|------|
| **Debian 12** | ⭐ 首选 | 内核 6.1+，原生 BBR，资源占用最低 |
| Ubuntu 22.04 / 24.04 | 可用 | 略重，snap 占内存 |
| CentOS / AlmaLinux | 不推荐 | 内核旧、防火墙复杂 |

> 优先选 **Debian 12 x86_64 最小安装**。

### VPS 配置

| 项目 | 最低 | 推荐 | 说明 |
|------|------|------|------|
| **CPU** | 1 核 | 1 核 | Reality 握手有少量加密运算，但 1 核足够 |
| **内存** | 256 MB | 512 MB | Xray 占用 < 30MB |
| **硬盘** | 5 GB | 10 GB | 系统 + Xray 约 2GB |
| **带宽** | 200 Mbps | 1 Gbps | 带宽决定速度上限 |
| **流量** | 500 GB/月 | 1 TB+/月 | 视频消耗大，按需选择 |
| **位置** | — | 日本 / 新加坡 / 美西 | 越近延迟越低 |

### 推荐 VPS 厂商

| 厂商 | 最低价 | 特点 |
|------|--------|------|
| **Vultr** | $3.5/月 | 按小时计费，随删随换 IP，机房多 |
| **Bandwagon (搬瓦工)** | $49.99/年 | CN2 GIA 线路，国内直连快 |
| **RackNerd** | $10.98/年 | 性价比极高，轻度使用首选 |
| **DMIT** | $6.9/月 | 三网 CN2 GIA / CMIN2，延迟低 |
| **Akile** | ¥15/月起 | 中转 / IPLC 专线，速度顶级 |

> **选机关键**：带宽 > 线路 > 位置 > 配置。Reality 方案对硬件要求与裸 TCP 方案一致。

### 线路优先级（国内访问）

| 线路 | 延迟 | 高峰稳定性 | 价格 |
|------|------|-----------|------|
| IPLC / IEPL 专线 | ★★★★★ | ★★★★★ | 极贵 |
| CN2 GIA (AS4809) | ★★★★ | ★★★★ | 贵 |
| CMIN2 (移动精品) | ★★★★ | ★★★★ | 中等 |
| CN2 GT | ★★★ | ★★★ | 中等 |
| 普通线路 (163) | ★★ | ★★ | 便宜 |

> 💡 **Reality 方案的额外优势**：普通线路 (163) 封 IP 风险高，Reality 能大幅降低被封概率，在便宜线路上性价比更高。

---

## 一、服务端一键部署

复制下面**整段**，在全新 VPS 上以 root 运行：

```bash
#!/bin/bash
set -e

# ======================== 安装 Xray ========================
bash <(curl -fsSL https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)

# ======================== 生成密钥 ========================
uuid=$(cat /proc/sys/kernel/random/uuid)
keys=$(/usr/local/bin/xray x25519 2>&1)
private_key=$(echo "$keys" | grep -i 'private' | awk -F': ' '{print $2}' | tr -d '[:space:]')
public_key=$(echo "$keys" | grep -i 'public' | awk -F': ' '{print $2}' | tr -d '[:space:]')
short_id=$(openssl rand -hex 8)

# 验证密钥生成
if [ -z "$private_key" ] || [ -z "$public_key" ]; then
  echo "❌ 密钥生成失败！xray x25519 输出:"
  echo "$keys"
  echo "请检查 Xray 是否正确安装。"
  exit 1
fi

# ======================== Reality 伪装目标 ========================
# 自动选延迟最低的伪装目标（降低 Reality 握手耗时）
CANDIDATES=("www.microsoft.com" "dl.google.com" "www.apple.com" "www.amazon.com")
BEST_DEST="www.microsoft.com"
BEST_MS=9999
for site in "${CANDIDATES[@]}"; do
  ms=$(curl -so /dev/null -w '%{time_connect}' --max-time 3 "https://${site}" 2>/dev/null | awk '{printf "%d", $1*1000}')
  if [ -n "$ms" ] && [ "$ms" -lt "$BEST_MS" ] 2>/dev/null; then
    BEST_MS=$ms
    BEST_DEST=$site
  fi
done
echo "✅ 伪装目标: ${BEST_DEST} (延迟 ${BEST_MS}ms)"
DEST="$BEST_DEST"
SNI="$BEST_DEST"

# ======================== 写入 Xray 配置 ========================
cat > /usr/local/etc/xray/config.json << EOF
{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "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": "${DEST}:443",
          "xver": 0,
          "serverNames": [
            "${SNI}"
          ],
          "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": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "block",
        "protocol": [
          "bittorrent"
        ]
      }
    ]
  }
}
EOF

# ======================== 防火墙 ========================
if command -v ufw &> /dev/null; then
  ufw allow 443/tcp
  ufw allow 22/tcp
  ufw --force enable
elif command -v firewall-cmd &> /dev/null; then
  firewall-cmd --permanent --add-port=443/tcp
  firewall-cmd --reload
fi

# ======================== BBR + 网络深度调优 ========================
cat > /etc/sysctl.d/99-xray-turbo.conf << 'SYSEOF'
# BBR 拥塞控制
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

# TCP 缓冲区（提升大文件 / 视频流吞吐量）
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216

# 连接优化
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_slow_start_after_idle=0
net.ipv4.tcp_mtu_probing=1
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_max_tw_buckets=262144
net.ipv4.tcp_max_syn_backlog=8192
net.core.somaxconn=8192
net.core.netdev_max_backlog=8192
SYSEOF
sysctl --system > /dev/null 2>&1

# ======================== 文件描述符 + 服务加固 ========================
# 防止长时间运行后 "too many open files" 导致新连接无法建立
grep -q '99-xray-nofile' /etc/security/limits.conf 2>/dev/null || cat >> /etc/security/limits.conf << 'LIMITEOF'
# 99-xray-nofile
* soft nofile 1000000
* hard nofile 1000000
root soft nofile 1000000
root hard nofile 1000000
LIMITEOF

# systemd 服务：提升 fd 上限 + 崩溃自动重启
mkdir -p /etc/systemd/system/xray.service.d
cat > /etc/systemd/system/xray.service.d/override.conf << 'OVERRIDE'
[Service]
LimitNOFILE=1000000
Restart=always
RestartSec=3
OVERRIDE

# ======================== 定时重启（每日凌晨 4 点）========================
# 使用 systemd timer，释放内存碎片，防止长时间运行后性能衰退
cat > /etc/systemd/system/xray-restart.service << 'RSVC'
[Unit]
Description=Daily restart of Xray
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart xray
RSVC

cat > /etc/systemd/system/xray-restart.timer << 'RTMR'
[Unit]
Description=Daily restart Xray at 04:00 CST

[Timer]
OnCalendar=*-*-* 04:00:00
TimeZone=Asia/Shanghai
Persistent=true

[Install]
WantedBy=timers.target
RTMR

# ======================== 启动服务 ========================
systemctl daemon-reload
systemctl restart xray
systemctl enable xray
systemctl enable --now xray-restart.timer

# ======================== 验证运行状态 ========================
sleep 2
if systemctl is-active --quiet xray; then
  STATUS="✅ 运行中"
else
  STATUS="❌ 启动失败，请检查: journalctl -u xray"
fi

# ======================== 输出配置 ========================
SERVER_IP=$(curl -s --max-time 5 ipv4.ip.sb || curl -s --max-time 5 ifconfig.me)

clear
echo "=========================================================="
echo "       Xray VLESS-Reality 部署完成  ${STATUS}"
echo "=========================================================="
echo ""
echo "  IP          : ${SERVER_IP}"
echo "  端口        : 443"
echo "  协议        : VLESS"
echo "  UUID        : ${uuid}"
echo "  流控        : xtls-rprx-vision"
echo "  传输        : tcp"
echo "  安全        : reality"
echo "  SNI         : ${SNI}"
echo "  Fingerprint : chrome"
echo "  PublicKey   : ${public_key}"
echo "  ShortId     : ${short_id}"
echo ""
echo "=========================================================="
echo ""
echo ">>> VLESS 分享链接（可直接导入客户端）:"
echo ""
echo "vless://${uuid}@${SERVER_IP}:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=${SNI}&fp=chrome&pbk=${public_key}&sid=${short_id}&type=tcp#VPS-Reality"
echo ""
echo "=========================================================="
echo ""
echo "⚠️  请妥善保存以上信息！UUID 和密钥仅在此处显示一次。"
echo "    配置文件位置: /usr/local/etc/xray/config.json"
echo "    查看日志:     journalctl -u xray -f"
echo "    重启服务:     systemctl restart xray"
echo "=========================================================="
```

---

## 二、客户端配置

### 方式 1：VLESS 分享链接（推荐）

脚本运行完成后会输出一条 `vless://` 链接，直接复制粘贴到以下客户端即可：

| 平台 | 推荐客户端 |
|------|-----------|
| Windows | v2rayN（6.x+） |
| macOS | V2BOX / NekoRay |
| iOS | Shadowrocket / Streisand |
| Android | v2rayNG |

### 方式 2：Clash Meta (mihomo) 配置

```yaml
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info

dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - 8.8.8.8
    - 1.1.1.1
  fallback-filter:
    geoip: true
    geoip-code: CN

proxies:
  - name: "VPS-Reality"
    type: vless
    server: 【你的IP】
    port: 443
    uuid: 【你的UUID】
    network: tcp
    tls: true
    udp: true
    flow: xtls-rprx-vision
    servername: www.microsoft.com
    client-fingerprint: chrome
    reality-opts:
      public-key: 【你的PublicKey】
      short-id: 【你的ShortId】

proxy-groups:
  - name: "Proxy"
    type: select
    proxies:
      - VPS-Reality
      - DIRECT

rules:
  # 国内直连
  - GEOIP,CN,DIRECT
  - GEOSITE,cn,DIRECT
  # 其余走代理
  - MATCH,Proxy
```

### 方式 3：Sing-Box 配置（新一代客户端）

```json
{
  "outbounds": [
    {
      "type": "vless",
      "tag": "vps-reality",
      "server": "【你的IP】",
      "server_port": 443,
      "uuid": "【你的UUID】",
      "flow": "xtls-rprx-vision",
      "tls": {
        "enabled": true,
        "server_name": "www.microsoft.com",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        },
        "reality": {
          "enabled": true,
          "public_key": "【你的PublicKey】",
          "short_id": "【你的ShortId】"
        }
      }
    }
  ]
}
```

---

## 三、与旧版对比

| 特性 | 旧版（VLESS TCP 无 TLS） | 本版（VLESS Reality） |
|------|--------------------------|----------------------|
| **加密** | ❌ 无，明文传输 | ✅ Reality TLS 1.3 |
| **抗检测** | ❌ 极易被 DPI 识别 | ✅ 伪装为访问真实网站，主动探测返回真实证书 |
| **需要域名** | 否 | 否 |
| **需要证书** | 否 | 否（自动生成 x25519 密钥对） |
| **速度** | 裸 TCP 无加密，理论最快 | ✅ Vision 流控避免双重加密 + 深度网络调优，实测差距 < 5% |
| **被封风险** | 极高（明文特征明显） | 极低 |
| **伪装目标选择** | 无 | ✅ 自动测延迟，选最快的目标站 |
| **网络调优** | 仅 BBR | ✅ BBR + TCP 缓冲区 + FastOpen + 连接池优化 |
| **BT 屏蔽** | 无 | ✅ 路由规则屏蔽 BT，降低 VPS 被投诉风险 |
| **防火墙兼容** | 仅 ufw | ✅ 自动检测 ufw / firewalld |
| **BBR 幂等** | ❌ 重复追加 | ✅ 独立 sysctl.d 配置，干净幂等 |
| **服务状态检查** | 无 | ✅ 部署后自动验证 |
| **分享链接** | 无 | ✅ 自动生成 vless:// 链接 |

---

## 四、运维命令速查

```bash
# 查看运行状态
systemctl status xray

# 实时查看日志
journalctl -u xray -f

# 重启服务
systemctl restart xray

# 查看配置文件
cat /usr/local/etc/xray/config.json

# 测试配置语法
/usr/local/bin/xray run -test -config /usr/local/etc/xray/config.json

# 更新 Xray 核心
bash <(curl -fsSL https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)

# 查看当前 BBR 状态
sysctl net.ipv4.tcp_congestion_control

# 验证 443 端口监听
ss -tlnp | grep 443

# 查看定时重启计划（下次执行时间）
systemctl list-timers xray-restart.timer

# 手动触发一次定时重启任务
systemctl start xray-restart.service

# 关闭定时重启
systemctl disable --now xray-restart.timer

# 重新开启定时重启
systemctl enable --now xray-restart.timer
```

---

## 五、注意事项

1. **伪装目标选择** — 脚本会自动测试延迟并选择最快的站点。如需手动指定，修改脚本中 `CANDIDATES` 数组。目标站点需支持 TLS 1.3 + H2。
2. **速度说明** — 与旧版裸 TCP 的速度差距来源：
   - **Vision 流控**（xtls-rprx-vision）会检测内层流量，对已加密的 TLS 流量（如 HTTPS 网页、视频）**直接透传不再二次加密**，所以浏览网页/看视频几乎无额外开销
   - 主要开销在**连接建立阶段**的 Reality 握手（一次性，约增加 10-30ms），传输阶段影响极小
   - 深度网络调优（TCP 缓冲区 16MB、FastOpen、idle 优化等）实测可弥补甚至超过裸 TCP 的吞吐量
3. **端口** — 使用 443 是因为该端口为标准 HTTPS 流量，不会被运营商 QoS 降速或封锁。
4. **密钥安全** — `PublicKey` 是给客户端用的（可公开），`PrivateKey` 只存在服务端配置中，切勿泄露。
5. **多用户** — 在 `clients` 数组中添加更多 `{ "id": "新UUID", "flow": "xtls-rprx-vision" }` 即可。
6. **IP 被墙** — Reality 能极大降低被封概率，但如果 IP 已经被墙，需要更换 IP 后重新部署。
