对话笔记直发:5.2 x-ui新服务器Cloudflare与Reality节点排查修复。分类:网络基建。
x-ui新服务器Cloudflare与Reality节点排查修复
时间
2026-05-02
用户目标
- 在新服务器
你的服务器IP(已脱敏)上继续处理x-ui - 保持当前
Cloudflare Tunnel架构 - 优先复用现有证书、现有域名体系、现有
x-ui配置 - 不破坏已经可用的面板、订阅和节点
- 所有修改前先备份数据库和关键配置
- 重点排查并修复:
VLESS + WS + TLS节点在客户端无法连接的问题Reality节点分享链接和使用方式的问题
- 最终方向确认采用“双轨并存”:
Cloudflare线路作为主力,隐藏源站 IPReality线路作为备用,仅少量自用
背景与上下文
- 服务器:
你的服务器IP(已脱敏) - 面板入口:
https://xui.douy.indevs.in/WgjJiwoKMBuMFs/ - 订阅入口:
https://sub.douy.indevs.in - 统一证书路径:
/etc/ssl/douy-indevs-in/fullchain.cer/etc/ssl/douy-indevs-in/private.key
- Tunnel / Cloudflare 相关域名:
xui.douy.indevs.insub.douy.indevs.invless.douy.indevs.invmess.douy.indevs.invmess20443.douy.indevs.invless9443.douy.indevs.invless11443.douy.indevs.in
- 用户明确要求:直接执行,不只给方案;修改前先备份;不要破坏现有可用节点。
过程摘要
- 首先对服务器做只读检查,确认
x-ui、cloudflared、证书文件、监听端口和面板/订阅入口状态。 - 确认
x-ui与cloudflared都在运行,证书有效,xray监听443/8443/9443/11443等端口。 - 发现外部访问
xui.douy.indevs.in和sub.douy.indevs.in一度返回 Cloudflare 侧404,随后继续核对本地服务、Tunnel 配置与数据库设置。 - 读取
/etc/cloudflared/config.yml,确认各 hostname 到本地源站端口的映射,其中:xui.douy.indevs.in -> https://127.0.0.1:37937sub.douy.indevs.in -> https://127.0.0.1:2096vless9443.douy.indevs.in -> https://127.0.0.1:9443vless11443.douy.indevs.in -> https://127.0.0.1:11443
- 检查
x-ui数据库与xray运行配置,定位到9443、11443两条VLESS + WS + TLS节点的实际配置参数均存在且监听正常。 - 对
vless9443.douy.indevs.in的 WebSocket 握手进行了本机和公网双重验证,均得到101 Switching Protocols,确认链路本身是通的。 - 最终定位
VLESS + WS + TLS节点问题的根因:x-ui后台导出的分享链接把“后端源站端口9443/11443”直接暴露给客户端,而在Cloudflare Tunnel架构下,客户端实际应该连接公网443。 - 随后利用
3x-ui原生支持的externalProxy机制,修复9443与11443这两条入站的导出逻辑,使后台复制出来的链接能按域名 + 443导出。 - 后续又排查了
Reality节点。用户使用的分享链接是@xui.douy.indevs.in:443,这会把面板域名当成Reality服务器地址,容易导致客户端连接失败或行为异常。 - 对
Reality节点进行修复:给443 Reality入站增加externalProxy,将导出地址改为直连服务器公网 IP “你的服务器IP(已脱敏):443,保留原有Reality参数不变。 - 在讨论架构后,用户确认采用“双轨并存”:主力用
Cloudflare隐藏 IP,备用保留Reality直连节点,但不作为公开主力。
关键结论
Cloudflare Tunnel架构下:
- 后端端口如
9443、11443仅是服务器源站入站端口 - 客户端不应直接使用这些后端端口
- 客户端应连接各自域名的公网
443
-
VLESS + WS + TLS节点本身并未损坏,问题主要是x-ui导出分享链接未适配 Tunnel 架构。 -
3x-ui的externalProxy字段可以解决“后台监听端口”和“客户端对外端口”不一致的问题,是本次修复的关键机制。 -
Reality节点不能像Cloudflare Tunnel一样隐藏源站 IP。Reality本质上要求客户端直接连真实入口,因此不适合作为需要隐藏 IP 的公开主力节点。 -
当前合理架构是:
- 主力:
VLESS + WS + TLS + Cloudflare Tunnel - 备用:
VLESS + Reality直连
执行动作
- 只读巡检新服务器当前状态。
- 核查
cloudflared配置与x-ui数据库设置。 - 确认
9443、11443两条VLESS入站在xray中存在且监听。 - 对
vless9443.douy.indevs.in执行 WebSocket 升级测试,确认链路通畅。 - 备份关键文件:
/etc/x-ui/x-ui.db/etc/cloudflared/config.yml
- 修改数据库中
9443、11443两条入站的stream_settings.externalProxy:vless9443.douy.indevs.in:443vless11443.douy.indevs.in:443
- 重启
x-ui并验证externalProxy已成功写入数据库。 - 对
Reality入站再次备份数据库。 - 修改
port=443这条Reality入站的externalProxy为 “你的服务器IP(已脱敏):443。 - 再次重启
x-ui并验证Reality的导出映射生效。
执行命令记录
- 检查主机和服务状态
ssh root@`你的服务器IP(已脱敏)` "hostnamectl; echo '---'; uptime; echo '---'; systemctl is-active x-ui; systemctl is-active cloudflared"- 目的:确认主机系统、运行时长、
x-ui和cloudflared是否运行。 - 结果:两项服务均为
active。
- 检查关键监听端口
ssh root@`你的服务器IP(已脱敏)` "ss -tulpn | grep -E '(:80|:443|:2096|:8443|:9443|:11443|:20443|:37937)' || true"- 目的:确认
x-ui/xray对外监听情况。 - 结果:确认
443、8443、9443、11443、2096等端口有进程监听。
- 检查证书文件与有效期
ssh root@`你的服务器IP(已脱敏)` "ls -l /etc/ssl/douy-indevs-in/ && echo '---' && openssl x509 -in /etc/ssl/douy-indevs-in/fullchain.cer -noout -subject -issuer -dates"- 目的:确认统一证书存在且有效。
- 结果:证书
CN = *.douy.indevs.in,有效期至2026-07-31。
- 读取 Tunnel 配置
ssh root@`你的服务器IP(已脱敏)` "sed -n '1,220p' /etc/cloudflared/config.yml"- 目的:确认域名与本地源站端口映射关系。
- 结果:确认
xui/sub/vmess/vless9443/vless11443等域名的 ingress 映射。
- 检查本机和公网的 WebSocket 升级
ssh root@`你的服务器IP(已脱敏)` "curl -sk --http1.1 -D - -o /dev/null https://127.0.0.1:9443/TIGxBWnHOkYpQWA3/ -H 'Host: vless9443.douy.indevs.in' -H 'Connection: Upgrade' -H 'Upgrade: websocket' -H 'Sec-WebSocket-Version: 13' -H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' --max-time 10"curl --http1.1 -sk -D - -o NUL https://vless9443.douy.indevs.in/TIGxBWnHOkYpQWA3/ -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" --max-time 15- 目的:确认
WS+TLS+Tunnel链路是否真正打通。 - 结果:本机与公网都返回
101 Switching Protocols,是诊断“链路正常、导出错误”的关键证据。
- 读取
xray运行配置中的入站参数
ssh root@`你的服务器IP(已脱敏)` "python3 - <<'PY'
import json
p='/usr/local/x-ui/bin/config.json'
with open(p,'r',encoding='utf-8') as f:
data=json.load(f)
for ib in data.get('inbounds',[]):
port=ib.get('port')
if port in (9443,11443,8443,443):
print('PORT',port)
print('STREAM',json.dumps(ib.get('streamSettings',{}),ensure_ascii=False))
PY"- 目的:确认
9443/11443/443的真实传输配置。 - 结果:验证
9443与11443为VLESS + ws + tls,443为VLESS + reality。
- 备份数据库与关键配置
ssh root@`你的服务器IP(已脱敏)` 'cp /etc/x-ui/x-ui.db /etc/x-ui/x-ui.db.bak-ui-export-fix && cp /etc/cloudflared/config.yml /etc/cloudflared/config.yml.bak-ui-export-fix'- 目的:保证导出修复前可回滚。
- 本地修改数据库后回传服务器
scp root@`你的服务器IP(已脱敏)`:/etc/x-ui/x-ui.db "C:\Users\fengx\AppData\Local\Temp\opencode\x-ui.db.remote"
scp "C:\Users\fengx\AppData\Local\Temp\opencode\x-ui.db.remote" root@`你的服务器IP(已脱敏)`:/etc/x-ui/x-ui.db- 目的:绕开远程多层引号问题,稳定修改 SQLite 中的 JSON 字段。
- 结果:成功将
9443/11443的externalProxy写回服务器。
- 重启并验证
x-ui
ssh root@`你的服务器IP(已脱敏)` 'systemctl restart x-ui && sleep 3 && systemctl is-active x-ui && sqlite3 -line /etc/x-ui/x-ui.db "select port,stream_settings from inbounds where port in (9443,11443,443);"'- 目的:确认服务正常拉起且数据库中的
externalProxy已生效。 - 结果:
x-ui为active,相关入站的externalProxy成功保存。
- 测试服务器外网出站能力
ssh root@`你的服务器IP(已脱敏)`
---
---
**相关**: [[00-索引-网络基建索引]] [[4.30 Cloudflare Tunnel 0基础手动安装教程]]