从 0 到可用:CentOS 服务器搭建 VLESS + Reality,并让 Clash Verge 成功订阅[仅供学习交流,请勿用于违法行为]
从 0 到可用:CentOS 服务器搭建 VLESS + Reality,并让 Clash Verge 成功订阅
记录一次完整实战: 无域名、CentOS、海外服务器(越南) 最终实现:中国可用 + Clash Verge 成功订阅
一、背景与目标
背景
- 有一台海外服务器(越南 河内)
- 系统:CentOS
- 没有域名
- 希望从中国稳定访问海外
- 使用 Clash Verge / Clash Meta
目标
- 服务端使用 Xray
- 协议:VLESS + Reality + TCP
- 端口:443
- 不依赖域名和证书
- 最终得到一个 Clash 可订阅的 URL
二、为什么选择 VLESS + Reality?
对比常见方案:
| 方案 | 状态 |
|---|---|
| VMess + WS | ❌ 易被封 |
| Trojan | ⚠️ 需要证书 |
| VLESS + TLS | ⚠️ 需要域名 |
| VLESS + Reality | ✅ 无域名 / 抗封 / 稳定 |
Reality 的优势:
- 不需要真实证书
- 使用真实网站 SNI 伪装(如 Cloudflare)
- 在中国网络环境下成功率高
三、服务器准备(CentOS)
1. 防火墙说明
执行:
firewall-cmd --add-port=443/tcp --permanent
如果提示:
FirewallD is not running
👉 不是错误 说明系统未启用 firewalld,端口默认放行,可直接继续。
四、安装 Xray
使用官方脚本:
bash <(curl -Ls https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)
确认安装成功:
xray version
五、生成 Reality 密钥(关键)
xray x25519
输出类似:
PrivateKey: xxxxxxxxxxxxxxxxxxxxxxxxx
Password: yyyyyyyyyyyyyyyyyyyyyyyyy
Hash32: zzzzzzzzzzz
说明:
- PrivateKey:服务端用
- Password:客户端用(等价于 public key)
- Hash32:不用管
⚠️ 不同版本 Xray 命名可能不是 PublicKey,而是 Password,但它就是 pbk。
六、配置 Xray(VLESS + Reality)
编辑配置文件:
nano /usr/local/etc/xray/config.json
示例配置(可直接用):
{
"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": {
"dest": "www.cloudflare.com:443",
"serverNames": ["www.cloudflare.com"],
"privateKey": "你的PrivateKey",
"shortIds": ["abcd"]
}
}
}
],
"outbounds": [
{ "protocol": "freedom" }
]
}
生成 UUID:
cat /proc/sys/kernel/random/uuid
七、验证配置并启动
1. 测试配置(非常重要)
xray run -test -config /usr/local/etc/xray/config.json
无输出 = 配置正确
2. 启动服务
systemctl restart xray
systemctl enable xray
systemctl status xray
3. 确认端口监听
ss -lntp | grep 443
看到 xray 在监听即成功。
八、原始 VLESS 节点(用于客户端)
vless://UUID@服务器IP:443
?encryption=none
&flow=xtls-rprx-vision
&security=reality
&sni=www.cloudflare.com
&fp=chrome
&pbk=你的Password
&sid=abcd
&type=tcp
#Hanoi
说明:
- Shadowrocket / sing-box 可直接用
- Clash 不支持直接导入
九、为什么 subconverter 失败?
尝试用 subconverter 转换为 Clash 订阅时:
- 返回
400 Bad Request - 原因:subconverter 0.9.x 对 VLESS + Reality URI 支持不完整
👉 最终解决方案:直接写 Clash Meta(mihomo)原生 YAML
十、手写 Clash Meta 订阅 YAML(最终方案)
1. 创建订阅文件
mkdir -p /root/subs
cat > /root/subs/hanoi.yaml <<'YAML'
mixed-port: 7890
allow-lan: true
mode: rule
log-level: info
proxies:
- name: Hanoi-Reality
type: vless
server: 服务器IP
port: 443
uuid: UUID
network: tcp
tls: true
udp: true
flow: xtls-rprx-vision
servername: www.cloudflare.com
client-fingerprint: chrome
reality-opts:
public-key: 你的Password
short-id: abcd
proxy-groups:
- name: PROXY
type: select
proxies:
- Hanoi-Reality
- DIRECT
rules:
- MATCH,PROXY
YAML
十一、暴露为订阅链接
方式一:测试用(Python)
cd /root/subs
python3 -m http.server 8080
订阅地址:
http://服务器IP:8080/hanoi.yaml
方式二:systemd 常驻(推荐)
cat > /etc/systemd/system/subs-http.service <<'EOF'
[Unit]
Description=Clash Subscription Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/root/subs
ExecStart=/usr/bin/python3 -m http.server 8080
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now subs-http
十二、Clash Verge 使用
- Profiles / 订阅
- 从 URL 导入
- 粘贴订阅地址
- 更新配置
- 选择
PROXY - 开启系统代理
🎉 成功连接
十三、关键踩坑总结
❌ 常见错误
privateKey写成中文占位符pbk少一个字符- shortId 非偶数长度
- 依赖 subconverter 转 Reality
- Clash 用
target=clash而不是原生支持
✅ 最稳方案
Xray + VLESS + Reality + Clash Meta 原生 YAML
十四、结语
这套方案的特点是:
- 无域名
- 抗封锁
- 配置透明、可控
- 非机场、无依赖第三方
非常适合 自建、学习、长期使用。