3X-UI 搭 VLESS Reality 节点:不用域名,也不用证书
- 13X-UI 搭 VLESS Reality 节点:不用域名,也不用证书本文
- 2v2rayN / v2rayNG 客户端下载:官方 Release 与 CDN 镜像

手上有了一台全新的 VPS,怎么把它变成一个能导入客户端的代理节点?这篇记录我用 3X-UI 面板搭 VLESS Reality 节点的完整过程:从 SSH 连上服务器,到装面板、开 Reality 入站、设置 Vision 流控,最后拿到一条改个 IP 就能用的分享链接。全程在 Debian 13 上操作,Windows 自带的终端就够了,不需要额外装工具。
Reality 不用自己买域名,也不用配证书。它借一个真实网站的 TLS 握手做掩护:认证通过的客户端拿到的是服务端私钥签发的临时证书,数据走 xtls-rprx-vision 通道;认不出来的探测流量会被原样转发到那个真实网站,对方看到的只是一个正常站点。对只想自己用的人来说,它是省心程度和安全性比较平衡的选择。
适合谁:有一台干净 VPS、不排斥命令行、想自己掌控节点的人。读完你能得到:一个绑定在 127.0.0.1 的 3X-UI 面板、一个 443 端口上的 VLESS Reality 入站、一条能直接导入客户端的链接。
这是《自建代理链路》的第一篇,讲的是服务端:把一台空 VPS 变成能导入客户端的节点。第二篇讲客户端从哪下、怎么确认没下错,链接在下面「复制分享链接」那节。两篇按顺序读最顺,但各自都能独立照着做完。
- Reality 不用买域名也不用配证书:它借一个真实网站的 TLS 握手做掩护,探测流量会被原样转发过去
- 面板装完只监听 127.0.0.1,用 SSH 隧道打开就行,不用为它多开一个公网端口
- 面板生成的分享链接里写的是 localhost,必须换成 VPS 公网 IP,原样导入客户端连不上
- 客户端的 Flow 要选 xtls-rprx-vision,不选就没有抗探测的效果
- 给自己用的规模不用管数据库,客户端数上到几百之后 SQLite 才需要换成 PostgreSQL
连接 VPS:Windows 自带终端就够
按 Win + R,输入 cmd,回车,打开命令提示符。

然后根据 VPS 的 SSH 端口选择命令。新买的 VPS 默认 22 端口,直接连:
ssh root@你的VPS IP服务商如果给了非 22 的端口,加 -p 指定:
ssh -p 2222 root@你的VPS IP首次连接会提示指纹确认,输入 yes;接着提示输密码。

终端输入密码时不显示字符,连 * 都没有。直接输完按回车就行。
先做安全加固:改 SSH 端口和防火墙
如果拿这台 VPS 搭加速节点,被攻破后你的所有外网访问数据都会暴露。这步不要跳过。
加固做两件事:把 SSH 端口从 22 改成一个高位端口(下文用 2222 做例子),再用 UFW 防火墙只放行需要的端口。
改 SSH 端口
用 sed 一条命令改掉配置文件里的端口,省得手动找那一行:
sed -i 's/^#\?Port .*/Port 2222/' /etc/ssh/sshd_config这条命令做的事,等价于把下面这行:
#Port 22Port 2222nano /etc/ssh/sshd_config,找到 #Port 22,删掉开头的 #,把 22 改成 2222,Ctrl + O 保存、Ctrl + X 退出。
改完先验证语法,再重启 SSH 服务:
sshd -t && systemctl restart sshsshd -t 没有任何输出就说明配置没问题如果它报错,按提示改对再重启。配置写错又直接 reboot,重启后可能再也连不上这台机器。
Debian 12 上如果提示 Failed to restart ssh.service: Unit ssh.service not found,说明这台机器用了 socket 激活,改用这条:
systemctl restart ssh.socket重启服务后不要关掉当前这个终端窗口,新开一个窗口用新端口试连一次,能连上再往下走:
ssh -p 2222 root@你的VPS IP连不上就回到还开着的旧窗口把端口改回去,这是留一条后路的意思。
装 UFW 并放行端口
然后安装并配置 UFW。注意顺序:先把新 SSH 端口放行了,再启用防火墙,否则会把自己锁在门外。
apt update && apt install -y ufwufw allow 443/tcpufw allow 2222/tcpufw enablerebootufw status看到 443/tcp 和 2222/tcp 两行 ALLOW 就说明放行了,再 reboot 才放心。
VPS 重启完成后,再用新端口连回去确认一遍:
ssh -p 2222 root@你的VPS IP安装 3X-UI 面板
连回去之后,一条命令安装 3X-UI:
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)如果提示 command not found,先装 curl 再重跑:
apt update && apt install -y curl安装过程中的几个选择
安装脚本会依次问你几个问题,按下面选。
数据库选 1(SQLite):官方推荐客户端数在 500 以下用 SQLite,自用完全够了。面板端口问你要不要自定义时输入 y,然后填一个随机高位端口,本文截图里用的是 2095。

SSL 证书这一步选 4(跳过):因为面板等下只通过 SSH 隧道访问,不需要证书。

只有在反向代理或 SSH 隧道后面才安全。下一步把面板绑定到 127.0.0.1 时会问你,输入 y,强制只能通过隧道或反代访问。要公网直连面板的,先看后面「不想开隧道」那一节再决定。
记下安装完成输出的凭据
装完后往上翻,找到 Panel Installation Complete 字样,把 Username、Password、Port、WebBasePath、API Token 都记下来,登录面板要用。

最后会输出 x-ui 的控制菜单,看到它就说明面板服务已经跑起来了。

用 SSH 隧道打开面板
面板绑定在 127.0.0.1 上,公网直接访问是打不开的——这是故意的,面板不暴露到公网。本地开一条 SSH 隧道把面板端口转发出来:
ssh -p 2222 -L 2222:127.0.0.1:2095 root@你的VPS IP-p 2222安装完输出的标准隧道命令没有带 -p,那是按默认 22 端口写的。前面把 SSH 端口改成了 2222,所以要加上,否则会连到 22 端口上去。
隧道保持开着,浏览器访问 http://localhost:2222/你的WebBasePath/,看到登录页就说明成功了。用刚才记下的账号密码登录。

登录成功后进入面板首页。

创建 VLESS Reality 入站
侧边栏点「入站」,再点左上角的「添加入站」。基础配置里:备注随便填(本文用 Freekm.com),协议选 vless,端口写 443。

切到「安全」页签,把安全类型从「无」改成 Reality。表单会展开一串参数:
- 目标填
www.microsoft.com:443,然后点旁边的「扫描」,让面板测试这个目标站点可用;也可以直接点「查找目标」让它自动挑一个 - uTLS 保持 chrome
- Short IDs、SpiderX、公钥、私钥全部由面板自动生成,不用手动改

点右下角「创建」,回到入站列表,能看到新记录:端口 443 上有 vless、TCP、Reality 三个标签,状态为开启,说明入站已经生效。
添加客户端并设置 Vision 流控
侧边栏点「客户端」,再点「添加客户端」。弹窗顶部有「基本」「凭据」「链接」三个页签。在「基本」页签把关联入站选成刚才创建的那个入站。

切到「凭据」页签,这里是 UUID、密码、订阅 ID 这些连接凭据。关键一步:在 Flow(流控)下拉菜单里选 xtls-rprx-vision,然后点「创建」。

流控模式怎么选:
- 无:不开流控,兼容性最好,性能一般
- xtls-rprx-vision:推荐,配合 Reality 或普通 TLS 使用,握手后的数据走 XTLS Vision 通道,减少可探测特征
- xtls-rprx-vision-udp443:把 UDP 443 也纳入流控,兼容性较差,一般不选
创建完回到客户端列表,新客户端已经在列表里了。
复制分享链接并改成你的 VPS IP
点击客户端行最左边的二维码图标,弹出分享面板,展开「Vless TCP REALITY」这一项,点右侧的「复制」按钮拿到链接。

因为面板监听在 127.0.0.1,生成的链接里服务器地址是 localhost,直接导入客户端是连不上的。把 localhost 替换成你的 VPS 公网 IP 再导入。
替换前的链接长这样:
vless://0dff199d-4a03-445f-9108-4595727672bb@localhost:443?encryption=none&flow=xtls-rprx-vision&fp=chrome&pbk=Ifs0B19vQw4LPiV1zvkK3cSLQj5q-6iKxXHobjEfoQI&security=reality&sid=f527e0ddad&sni=c.s-microsoft.com&spx=%2F91b3b23fbbde023&support-x25519mlkem768=true&type=tcp#Freekm.com-73r5lux703qw把 @localhost:443 改成 @你的VPS IP:443,导入客户端就能用了。

不想开隧道:面板暴露到公网要付什么代价
面板绑在 127.0.0.1 上不是多余的一步。它和节点不一样:节点对外只暴露 443 上的 TLS 握手,面板暴露的是一个登录表单加一套 API,扫描器最喜欢这类东西。
跳过证书、把面板端口直接开到公网,有两个现实风险:密码和会话 Cookie 走明文 HTTP,链路上的人能看到;面板端口和路径会被批量扫,弱密码可能几小时内就被撞开,撞开等于把你所有入站、客户端配置和 API Token 一起交出去。
先加密,再谈公网访问
有域名的话,安装时 SSL 那一步别选跳过(本文选的 4),按提示填域名,让脚本走 Let’s Encrypt 把证书签下来。已经装完的也能补:在 x-ui 菜单的证书管理里配好证书路径,重启面板即可。之后访问走:
https://你的域名:面板端口/你的WebBasePath/没有域名就别硬放出去
Let’s Encrypt 不给纯 IP 签证书,自签证书浏览器会一直报警告,用起来和安全都打折扣。这种情况继续用 SSH 隧道,或者套一层 Cloudflare Tunnel,都比明文挂公网强。
把暴露面缩到最小
真要开,就把能收的口都收掉:WebBasePath 用安装时生成的随机串,别改成 admin 这类好猜的词;面板端口别留 2095 这种默认值;UFW 只放行你自己的 IP。
ufw allow from 你的家庭公网IP to any port 2095 proto tcp本文的 443 已经被 Reality 入站占用,反代只能换端口(比如 8443),或者把面板挂到反代的子路径下——后者配置繁琐,容易把自己绕进去。用面板自带的证书,比额外架一层反代省事。
面板默认只听 127.0.0.1,想公网访问得在 x-ui 菜单的「设置」里把监听地址改成 0.0.0.0(不同版本菜单措辞略有差异),改完重启面板。
我的选择是:平时关着,要用的时候开隧道进去。省下的不是配置时间,是被爆破的概率。
常见问题
Q:输入密码时终端没反应?
正常现象。Linux 终端输入密码不回显任何字符,直接输完按回车。
Q:安装脚本提示 command not found?
缺 curl。先执行 apt update && apt install -y curl,再重跑安装命令。
Q:浏览器打不开面板?
按顺序检查三件事:SSH 隧道窗口是否还开着;地址是否用的 http://localhost:转发端口/WebBasePath/;端口和路径是否和安装完成输出的一致。面板绑定了 127.0.0.1,用公网 IP 直接访问面板端口是打不开的,这是预期行为。
Q:面板能不能直接用公网 IP 打开?
默认不行,面板只监听 127.0.0.1,公网访问面板端口会直接被拒。真想直连,得先改监听地址、再配好证书,步骤在「不想开隧道」那一节。不加密就挂公网,等于把登录密码放在明文信道上让人看。
Q:链接导入客户端后连不上?
先确认把链接里的 localhost 换成了 VPS 公网 IP;再确认 UFW 放行了 443 端口;最后确认客户端支持 Reality 和 xtls-rprx-vision 流控,太老的客户端内核不支持。
最后验收一下
全部做完,对照这份清单:
- 浏览器能通过 SSH 隧道打开面板登录页
- 入站列表里 443 端口有 vless、TCP、Reality 三个标签,状态开启
- 客户端导入改好 IP 的链接后能正常连通
- 面板要么没对公网开放,要么是 https 且只放行了你的 IP
这套方案适合自己用、节点数量不多、想要抗探测的场景;如果你要给很多人用,SQLite 在客户端数超过 500 后就该换 PostgreSQL 了,安装时选 2 即可。不适合想一键脚本梭哈的人——但这套流程走一遍下来,以后排查问题会容易很多。
下一步建议:登录面板后先把默认账号密码改掉,养成定期备份 /etc/x-ui/x-ui.db 的习惯,数据库文件里存着所有入站和客户端配置。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!


