Xray 使用与节点搭建指南

Xray 是什么?

Xray-core 是一个开源网络代理平台,是 V2Ray 的继任者。它支持多种代理协议和传输方式,主要用于突破网络限制、保护通信隐私。

核心概念

1. 协议(Protocol)

VLESS — 轻量级 VMess,无内置加密。比 VMess 性能更好,通常搭配 TLS/REALITY 使用。

VMess — V2Ray 原生协议,有内置加密。比 VLESS 多一层加密,但因此性能略有损耗。

Trojan — 模仿 HTTPS 流量的代理协议。需要 TLS 证书。

Shadowsocks — 传统的加密代理协议,混淆能力较弱。

Hysteria 2 — 基于 QUIC(UDP)的协议,抗丢包能力强,适合高延迟网络。

TUIC — 基于 QUIC 的代理协议,与 Hysteria 2 类似。

2. 传输方式(Transport / Stream Settings)

TCP — 基础 TCP 传输,通常搭配 TLS 使用。

XTLS — Xray 特有的传输层优化。XTLS 在握手后做"流量分流"——代理流量走 XTLS 隧道,直连流量直接穿透。对比标准 TLS,XTLS 减少了加解密的开销,速度更快。适用场景:代理节点出口有大量流量的情况。

XHTTP — Xray 的 HTTP/2 传输模式。使用 HTTP/2 多路复用传输,抗干扰能力强,适合 HTTP/2 优先的网络环境。与 XTLS 不可同时使用,是 XTLS 的替代方案。

gRPC — 基于 HTTP/2 的 gRPC 传输。适合有特殊需求的场景。

WebSocket(WS) — 通过 WebSocket 建立隧道。可以像普通 WebSocket 流量一样被代理转发,适合部署在 CDN 后面。

3. 安全(Security)

TLS — 标准 TLS 加密。使用合法证书(如 Let's Encrypt),流量看起来像普通 HTTPS。配置参数: - serverName — 客户端指定的 SNI(服务器名称指示),必须与服务端证书的域名匹配 - allowInsecure — 是否允许不安全的证书连接。生产环境应设为 false

REALITY — Xray 的 TLS 替代方案,是目前最先进的混淆技术。REALITY 于 2023 年由 Xray-core 首创,它:

  • 不需要证书:无需 Let's Encrypt,不暴露服务器 IP 特征
  • TLS 指纹模仿:使用 uTLS 库模仿真实浏览器的 TLS 握手指纹(如 Chrome、Firefox),DPI 无法区分你的流量和正常网页浏览
  • 会话 ID 填充:将代理标识隐藏在 TLS ClientHello 的 session_id 字段中
  • 回退机制:探测请求(非代理流量)会被转发到一个真实网站,完美伪装

REALITY 对比 TLS 的选择建议: - REALITY:推荐用于所有 VLESS 节点,无需证书、无特征、性能好 - TLS:如果需要 CDN 加速(Cloudflare),必须使用 TLS + WebSocket 或 gRPC - XTLS + REALITY:最佳性能组合(XTLS 减少加密开销 + REALITY 隐藏特征)

Xray 关键参数详解

服务端 inbound 配置

{
  "inbounds": [
    {
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "UUID",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "target": "your-domain.com:4443",
          "serverNames": ["your-domain.com"],
          "shortIds": ["12345"],
          "privateKey": "...",
          "xver": 0
        }
      },
      "tag": "inbound-443"
    }
  ]
}

关键参数表

参数 位置 含义 建议值
id settings.clients[].id 客户端 UUID,唯一标识一个用户 uuidgen 生成
flow settings.clients[].flow 流量控制 xtls-rprx-vision(推荐)
network streamSettings.network 传输层协议 tcpxhttp
security streamSettings.security 安全模式 reality(推荐)或 tls
target realitySettings.target REALITY 回退目标 你的域名:nginx端口
serverNames realitySettings.serverNames 客户端连接的 SNI 目标域名的 SAN
shortIds realitySettings.shortIds 客户端标识符 1~3 个,不要太长
privateKey realitySettings.privateKey REALITY 私钥 xray x25519 生成
flow settings.clients[].flow 流量控制模式 xtls-rprx-vision
path xhttpSettings.path XHTTP 路径 /api 等正常路径

注意:REALITY 不使用 fallbacks

// 错误:REALITY + fallbacks(fallbacks 被忽略)
"settings": {
  "fallbacks": [{"dest": 4443}]
}

// 正确:REALITY 只使用 target
"streamSettings": {
  "security": "reality",
  "realitySettings": {
    "target": "your-domain.com:4443"
  }
}

REALITY 用 target 处理所有非代理流量,settings.fallbacks 只适用于 security: "tls"

端口布局方案

方案一:共享端口模式(推荐)

端口 443   (TCP) → xray VLESS+XTLS+REALITY  (target → nginx:4443)
端口 4443  (TCP) → nginx                    (所有网站,按 SNI 路由)
端口 8443  (TCP) → xray VLESS+XHTTP+REALITY (第二节点)
端口 443   (UDP) → Hysteria 2               (UDP,与 TCP 不冲突)
端口 8443  (UDP) → TUIC                     (UDP)
端口 80    (TCP) → nginx                    (HTTP 重定向 + certbot)

共享端口原理: REALITY 监听 443 端口,非代理流量通过 target 转发给 nginx:4443,nginx 按 SNI 路由到对应服务。外部看起来 443 就是正常网站。

方案二:独立端口模式

端口 443   (TCP) → nginx                    (网站)
端口 8443  (TCP) → xray VLESS+XTLS+REALITY  (第一节点)
端口 8444  (TCP) → xray VLESS+XHTTP+REALITY (第二节点)

客户端配置

sing-box 客户端示例

{
  "outbounds": [
    {
      "type": "vless",
      "server": "你的服务器IP或域名",
      "server_port": 443,
      "uuid": "你的UUID",
      "flow": "xtls-rprx-vision",
      "tls": {
        "enabled": true,
        "server_name": "your-domain.com",
        "utls": {
          "enabled": true,
          "fingerprint": "chrome"
        },
        "reality": {
          "enabled": true,
          "public_key": "服务器REALITY公钥",
          "short_id": "12345"
        }
      }
    }
  ]
}

v2rayN / Nekoray 客户端配置

字段
协议 VLESS
地址 服务器 IP 或域名
端口 443
UUID 你的 UUID
Flow xtls-rprx-vision
传输 tcp
安全 reality
SNI your-domain.com
Fingerprint chrome
PublicKey 服务器 REALITY 公钥
ShortId 12345

密钥生成

# 生成 REALITY 密钥对
xray x25519
# 输出:
# Private key: xxxxxxxxxxxxxx  ← 服务器配置用
# Public key:  xxxxxxxxxxxxxx  ← 客户端用

# 生成 UUID
uuidgen
# 输出:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

常见问题

Q: 节点连接不上

排查步骤: 1. 服务器防火墙是否放行端口:sudo ufw status 2. xray 是否在监听:sudo ss -tulnp | grep xray 3. 检查 xray 日志:sudo journalctl -u x-ui -n 50 | grep -i error 4. 客户端 UUID、shortId 是否与服务端一致 5. 客户端 SNI 是否在服务端的 serverNames 列表中

Q: REALITY 共享端口时网站打不开

  1. 确认 target 用的是域名(如 your-domain.com:4443)而不是 127.0.0.1:4443
  2. 确认 nginx 的 4443 端口默认虚拟主机有正常页面(不要用 ssl_reject_handshake on
  3. xver 设为 0

Q: 速度慢

  1. 尝试更换协议:XTLS vs XHTTP 在不同网络环境表现不同
  2. 检查服务器带宽:speedtest-cli
  3. 尝试更换 REALITY 的 fingerprint(chrome / firefox / safari)

Q: x-ui 面板修改后不生效

x-ui 从 SQLite 数据库生成配置,直接修改 config.json 会被覆盖。修改后必须重启 x-ui:

sudo systemctl restart x-ui

Q: 面板返回 403 空白页

x-ui 面板验证 Host 头。如果在 nginx 反代后遇到 403,需覆盖 Host 头:

location /xui/ {
    proxy_pass http://127.0.0.1:15033;
    proxy_set_header Host your-web-domain.com;
}

一键安装 x-ui

# 安装 3x-ui(推荐,功能更全)
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

# 安装后访问 http://IP:端口,默认账号 admin / admin

验证节点

# 检查端口监听
sudo ss -tulnp | grep -E 'xray|nginx'

# 检查 xray 状态
sudo systemctl status x-ui

# 测试 fallback
curl -sk https://你的域名:443/ | head -5