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 |
传输层协议 | tcp 或 xhttp |
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 共享端口时网站打不开
- 确认
target用的是域名(如your-domain.com:4443)而不是127.0.0.1:4443 - 确认 nginx 的 4443 端口默认虚拟主机有正常页面(不要用
ssl_reject_handshake on) xver设为0
Q: 速度慢
- 尝试更换协议:XTLS vs XHTTP 在不同网络环境表现不同
- 检查服务器带宽:
speedtest-cli - 尝试更换 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