这篇教程记录一次从零开始部署 VLESS + REALITY 节点的完整流程,面板使用开源项目 MHSanaei/3x-ui。它本质上是一个管理 Xray-core 的 Web 面板,适合把复杂的入站、客户端、流量限制和订阅配置都集中到网页里维护。
先说明边界:本文面向个人加密通信、跨区域网络访问测试和服务端配置学习。部署前请确认自己所在地区的法律法规、云服务器服务条款以及实际使用场景,别把它用在不合规的事情上。
一、准备工作
建议准备一台干净的 VPS,系统优先选 Debian 12 或 Ubuntu 22.04/24.04,CentOS、Rocky、AlmaLinux 也能跑。服务器需要有公网 IPv4,最好是 root 权限。REALITY 节点本身不强制需要域名和证书,但面板如果要公开访问,建议用域名加 HTTPS 或直接限制为本地访问。
部署前先确认三件事:
- 端口:节点端口可以用 443,也可以用 8443、2053 之类的自定义端口。如果服务器已经有 Nginx、Caddy 或宝塔站点占用 443,就不要硬抢 443。
- 防火墙:云厂商安全组和系统防火墙都要放行 SSH 端口、节点端口,以及你决定公开的面板端口。
- 时间同步:服务器时间偏差太大会造成 TLS/REALITY 握手异常,先打开 NTP。
apt update
apt install curl ca-certificates socat -y
timedatectl set-ntp true
timedatectl status
如果使用 Ubuntu 的 UFW,可以按下面的思路放行端口。这里的 32451 只是示例面板端口,实际以安装后显示的端口为准。
ufw allow 22/tcp
ufw allow 443/tcp
ufw allow 32451/tcp
ufw enable
ufw status
如果你打算只通过 SSH 隧道访问面板,就不要公开面板端口,只放行 SSH 和节点端口即可。
二、安装 3x-ui 面板
3x-ui 官方推荐的一键安装命令如下。当前官方仓库已经进入 3.x 分支,安装脚本会自动拉取最新 Release,并创建 x-ui 管理命令。
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

安装脚本现在会尽量随机化面板入口,通常会输出类似下面几项:
Username:面板用户名。Password:面板密码。Port:面板监听端口。WebBasePath:面板访问路径。Access URL:完整访问地址。
这些信息一定要保存。装完以后可以用下面几个命令确认状态:
x-ui status
x-ui settings
systemctl status x-ui --no-pager
常用管理命令也很简单:
x-ui
x-ui restart
x-ui restart-xray
x-ui log
x-ui update
三、先把面板安全做好
节点能不能跑通是一回事,面板安全是另一回事。面板暴露在公网时,建议至少完成下面几项:
- 不要使用默认或短密码,用户名和密码都换成长随机字符串。
- 保留随机
WebBasePath,不要改成/admin、/xui这种容易猜的路径。 - 面板端口不要和节点端口混用。
- 有域名时给面板配置 HTTPS;没有域名时可以只监听
127.0.0.1,通过 SSH 隧道访问。 - 打开面板的双因素认证、登录限制或 Fail2Ban 相关功能。

如果不想公开面板,可以让面板只监听本机,然后在本地电脑开 SSH 隧道:
ssh -L 2222:127.0.0.1:32451 root@你的服务器IP
浏览器访问 http://127.0.0.1:2222/你的WebBasePath 即可进入面板。这种方式麻烦一点,但面板不直接暴露在公网,安全性会好很多。
四、新增 VLESS + REALITY 入站
登录面板后进入 Inbounds,点击 Add Inbound。3x-ui 的核心逻辑是:先创建一个入站,再给这个入站添加一个或多个客户端。


入站建议按下面的方式填写:
| 项目 | 推荐值 | 说明 |
|---|---|---|
| Remark | reality-vless-443 |
只是备注,方便自己识别。 |
| Protocol | vless |
协议选择 VLESS。 |
| Listen IP | 留空或 0.0.0.0 |
留空通常表示监听所有网卡。 |
| Port | 443 或自定义端口 |
确认没有被其他服务占用,并在防火墙放行。 |
| Transmission | TCP (RAW) |
REALITY 常见组合就是 TCP + VLESS。 |
| Security | Reality |
不是 TLS,也不是 None。 |
| Dest | www.microsoft.com:443 |
伪装目标,要是一个真实可访问的 HTTPS 站点。 |
| Server Names / SNI | www.microsoft.com |
要和 Dest 的域名匹配。 |
| Fingerprint | chrome |
客户端也要保持一致。 |
| Short ID | 随机十六进制字符串 | 例如 0123456789abcdef,客户端要填写同一个。 |
| SpiderX | / |
一般默认即可。 |

REALITY 的密钥有一对:Private Key 放服务器端,Public Key 给客户端使用。3x-ui 面板里通常有生成按钮,直接生成即可。不要把私钥发给别人,也不要把私钥填进客户端。
Dest 和 SNI 的选择要保守。它们不是让你套 CDN,而是给 REALITY 握手使用的真实 HTTPS 目标。建议选一个稳定、能从服务器正常访问的站点,例如 www.microsoft.com:443、www.apple.com:443 这类。选好以后,Dest 写域名加端口,Server Names 写域名本身。
如果节点端口使用 443,先确认服务器上没有其他服务占用:
ss -tulpn | grep ':443'
如果看到 Nginx、Caddy、宝塔网站正在监听 443,就换一个节点端口,例如 8443 或 2053,然后在客户端链接里也使用对应端口。
五、添加客户端
入站创建好以后,在这个入站下面添加客户端。客户端可以理解为“一个可用账号”,每个客户端都有独立 UUID、流量限制、到期时间和备注。

客户端建议这样填:
- Email:填一个方便识别的名字,例如
macbook、iphone、home-pc。 - ID:点击生成 UUID,不要手写。
- Flow:如果面板提供这个选项,选择
xtls-rprx-vision。 - Total Flow:不限制就填
0。 - Duration:不限制就留空,需要临时账号再设置到期时间。
保存后回到 Inbounds 列表,展开入站,点击二维码或分享按钮,面板会生成客户端链接。
六、客户端怎么填
以 v2rayN、Nekoray、Shadowrocket、Stash 这类客户端为例,字段本质上都一样:
| 客户端字段 | 填写内容 |
|---|---|
| 地址 / Address | 你的服务器公网 IP 或域名 |
| 端口 / Port | 入站端口,例如 443 |
| 用户 ID / UUID | 客户端 ID |
| 传输协议 / Network | tcp |
| 安全 / Security | reality |
| Flow | xtls-rprx-vision |
| Public Key | 面板生成的公钥,不是私钥 |
| Short ID | 入站里填写的 Short ID |
| SNI / Server Name | 入站里的 Server Names,例如 www.microsoft.com |
| Fingerprint | chrome |
| SpiderX | / |
分享链接大致长这样,实际使用时把大写占位符替换成自己的真实值:
vless://UUID@SERVER_IP:443?type=tcp&security=reality&pbk=PUBLIC_KEY&fp=chrome&sni=www.microsoft.com&sid=0123456789abcdef&spx=%2F&flow=xtls-rprx-vision#3x-ui-reality
如果客户端支持直接导入 3x-ui 的二维码或分享链接,优先用导入,少手填字段就少出错。
七、测试是否跑通
测试时不要只看客户端显示“已连接”,还要看面板有没有流量变化。建议按顺序检查:
- 客户端导入链接后连接节点。
- 打开一个网页或测速地址,产生实际流量。
- 回到 3x-ui 的 Inbounds 页面,看入站和客户端流量是否增长。
- 如果没流量,查看 Xray 日志和系统端口监听。
x-ui log
x-ui restart-xray
ss -tulpn | grep ':443'
云服务器还要确认安全组。很多时候系统里端口已经监听了,但云厂商安全组没放行,外部依然连不上。
八、常见问题排查
| 现象 | 优先检查 |
|---|---|
| 客户端超时 | 节点端口是否监听、防火墙和云安全组是否放行、服务器 IP 是否写错。 |
| 一连接就断 | Public Key、Short ID、SNI、Fingerprint 是否和面板一致。 |
| 面板能开,节点不通 | 面板端口和节点端口是两回事,检查 Inbound 的端口。 |
| 443 端口启动失败 | Nginx、Caddy、宝塔站点可能已经占用 443,换端口或调整反代。 |
| 手机能用,电脑不能用 | 客户端版本是否支持 REALITY 和 Vision,配置是否完整导入。 |
| 突然全部失效 | 服务器时间、Xray 日志、证书/密钥字段、服务商防火墙策略。 |
九、备份和升级
3x-ui 默认数据库目录是 /etc/x-ui,核心数据库通常是 x-ui.db。升级前建议先备份:
cp /etc/x-ui/x-ui.db /root/x-ui.db.$(date +%F).bak
x-ui update
x-ui restart
如果你在面板里维护了很多客户端,最好定期从面板导出数据库,或者把 /etc/x-ui/x-ui.db 纳入自己的服务器备份。更新 3x-ui 和 Xray-core 前,也建议先保留一份数据库和当前配置。
十、最后给一套推荐配置
如果只是个人使用,我会按下面这套来配:
- 面板使用随机端口、随机 WebBasePath、强密码,最好只通过 SSH 隧道访问。
- 节点协议用
VLESS,传输用TCP RAW,安全层用REALITY。 - 客户端 Flow 使用
xtls-rprx-vision。 - Dest / SNI 选择稳定的大站 HTTPS 域名,并保持服务端、客户端完全一致。
- 每台设备单独一个客户端 UUID,方便限速、限流和排查。
- 每次大改前备份
/etc/x-ui/x-ui.db。
到这里,一个完整的 3x-ui + VLESS + REALITY 节点就搭好了。这个方案的难点不在安装,而在 REALITY 相关字段必须严格一致:私钥留在服务端,公钥填客户端;SNI 和 Dest 要匹配;Short ID、Fingerprint、Flow 不要漏。只要这几项不乱,后续维护基本就是在面板里增删客户端和看流量。
参考资料:3x-ui GitHub 仓库、3x-ui 官方安装文档、3x-ui 官方配置文档、XTLS REALITY 项目说明。