安全列表里 80 端口开了,域名也解析好了,一点申请证书——失败。再试一次,还是失败。
如果你用的是 Oracle,问题多半不在你操作错了,而是 Oracle 有两道锁,大部分教程只告诉你开一道。更麻烦的是,3X-UI 经过几轮大更新,面板布局、入站和客户端的设置方式都变了,老教程基本对不上号。
这篇从头装一遍最新版 3X-UI,在甲骨文实例上建好一个 VLESS + Reality 节点,导进 v2rayN 和 Shadowrocket 能用。路上我踩过的 5 个坑都会标出来,其中一个能把你直接锁在自己服务器外面。本来想在 ARM 实例上演示的,但第二台 ARM 实例没开出来,整个安装过程就移到了 Micro 实例上了,操作步骤是一样的。这里提醒一下刚刚拿下甲骨文账户的小伙伴,抓紧在免费试用期内申请 ARM 实例,成功几率会高很多。
🕳️ 本篇 5 个坑速览
- Cloudflare 小黄云没关 → Reality 连不上
- 只开了安全列表、没开 iptables → 证书申请失败
- iptables 规则加在 REJECT 后面 → 加了等于没加
- 用 3X-UI 自带的防火墙菜单(ufw)→ 被锁在服务器外面
- 建完客户端不重启 Xray → 订阅是空的
开工前准备好这三样
- 一台 Oracle 实例:本文演示改用 Micro 实例、Ubuntu 系统。ARM 实例申请过程看系列前几篇:创建第一个 ARM Ampere A1 实例、新实例开机第一件事。抢不到 ARM 的话,可以先开一天普通的 Micro 机器,也可以先用 Vultr 的按小时计费实例过渡,流程基本一样(防火墙那部分更简单)。
- 一个 Cloudflare 账户
- 一个已经托管到 Cloudflare 的域名。还没托管的看这几篇:
整个过程要开放的端口,先列在这里心里有个数:
| 端口 | 干什么用 | 不开会怎样 |
|---|---|---|
| 22 | SSH 登录 | 默认已开 |
| 80 | 申请域名证书 | 证书申请失败 |
| 443 | Reality 入站 | 节点连不上 |
| 2096 | 订阅链接 | 订阅无法更新,SUB 页面打不开 |
| 面板端口 | 登录 3X-UI 面板 | 面板打不开(安装完才知道是多少) |
⚠️ 特别注意顺序:80 端口必须在运行安装脚本之前就两道锁都开好。因为新版 3X-UI 把证书申请做进了安装流程里,装到一半就会问你要不要申请证书——那时候再去开端口就来不及了。
第一步:先把域名指到你的服务器
后面申请证书要用到域名(主域名或二级域名都行),所以先把解析做好,免得到时候手忙脚乱。
在 Cloudflare 里加一条 A 记录
进 Cloudflare 后台 → 点你的域名 → 左侧 DNS → 记录 → 添加记录:
- 类型:A
- 名称:
3xui(访问地址就是3xui.你的域名.com,直接用主域名也行) - IPv4 地址:你 Oracle 实例的公网 IP
- 代理状态:⚠️ 关掉,点成灰色云朵(仅 DNS)
保存。
🕳️ 坑 1:小黄云一定要关 橙色云朵开着,流量会先绕到 Cloudflare 再转给你的服务器。证书申请会验证到 Cloudflare 的 IP 上,后面的 Reality 节点也会连不上。口诀:灰云直连,橙云绕路,我们这套全程要直连。
确认解析对不对
等一两分钟,SSH 登录服务器,跑下面两条命令,缺一条说明不了问题:
|
|
ifconfig.me 卡住没反应就换一个:
|
|
两个输出完全一样,解析就成功了。 如果 dig 返回的是一个陌生 IP(常见的是 104.x 或 172.x 开头),那就是小黄云还开着,回去关掉。不一致就别急着往下走,改好、等生效了再继续,这样证书能一次过。
第二步:打开端口——Oracle 的两道锁
先说清楚为什么 Oracle 比别家麻烦。谷歌云、亚马逊这些,开端口只需要在控制台操作一次。而甲骨文有两道锁:
- 网页控制台里的安全列表
- 实例系统里自带的 iptables 规则
关键是它们是串联的:数据包先过安全列表,再过 iptables,两关都过了才能到你的程序。只开一道,等于没开。
🕳️ 坑 2:只开了安全列表 这就是开头那个"80 端口明明开了,证书还是失败"的原因——你开的是第一道锁,第二道还锁着。
第一道锁:安全列表
最快的路径:控制台顶部搜索框输入 VCN → 点进你的 VCN → 安全列表 → 点默认安全列表 → 安全规则 → 入站规则 → 添加入站规则。
(也可以走:左上角三条杠 → 实例 → 点你的实例 → 网络 → 子网 → 安全 → 安全列表)。
这里注意,免费账户可以创建多个 VCN,如果你创建过其他的 VCN,要看清不要选错。
每条规则这样填:
- 源 CIDR:
0.0.0.0/0 - IP 协议:TCP
- 目的地端口范围:
80(443、2096 同样各加一条,或者写成80,443,2096)
第二道锁:iptables
先看看现在有哪些规则:
|
|
你会在靠后的位置看到一条 REJECT,它负责把前面没匹配上的包全部挡掉。
🕳️ 坑 3:规则要加在 REJECT 前面 iptables 从上往下匹配,撞上 REJECT 就不往下看了。规则加在它后面,等于没加。
最省心的办法是用 -I,它会把规则插到第一行,自然在 REJECT 前面:
|
|
最后一行是把规则存下来,不然重启就没了。
再跑一次查看命令,确认这几条出现在 REJECT 上面:
|
|
另一种方法:直接改规则文件(进阶,可跳过)
|
|
找到 SSH 那行:
|
|
在它下面照葫芦画瓢加上要开的端口,一定要在 -A INPUT -j REJECT ... 那行上面:
|
|
Ctrl+O 回车保存,Ctrl+X 退出,然后让规则生效:
|
|
开错了怎么删
|
|
第三步:一行命令装好 3X-UI
装最新版:
|
|
装指定版本:
|
|
末尾的 v3.7.0 是指定版本,本文就是按这个版本演示的,界面和你看到的对得上。想装最新版就把它去掉。3X-UI 更新比较快,目前已经更新到 v3.10.2 版本,感兴趣可尝试安装最新版本。
安装过程会问你这些(按顺序走一遍)
新版把证书申请也做进了安装流程,所以这一路问下来,装完证书就一起配好了,不用再单独跑一次菜单。下面是完整顺序:
1. 选数据库
3X-UI 支持两种后端:
- SQLite(默认)— 位于
/etc/x-ui/x-ui.db的单个文件,无需配置,适合中小型部署 - PostgreSQL — 推荐用于大量客户端或多节点设置,安装程序可以为你在本地安装 PostgreSQL
自己用选 SQLite 就行。
2. 选择是否自定义面板端口
可以自定义,也可以让它随机生成。记住你的选择,装完要把这个端口加进两道锁。
3. 选择证书方式
这里会列出几个选项,选 Let’s Encrypt for domain(90-day validity, auto-renews) 这一项,开始申请域名证书。
4. 填入要绑定的域名
填你第一步解析好的那个,比如 3xui.你的域名.com。
5. 确认使用 80 端口
直接确认。这一步就是前面反复强调 80 端口的原因——两道锁都得开好,不然这里会失败。
6. Would you like to modify --reloadcmd for ACME? (y/n)
选 n,或者直接回车。这是给需要自定义续期后重载命令的高级场景用的,我们用不上。
7. Would you like to set this certificate for the panel? (y/n)
选 y,同意把证书直接设置到面板上。
这一步很关键。选了 y,面板就直接用上 HTTPS 了;选 n 的话证书虽然申请下来了,但面板还是 http,你得事后手动去菜单里挂一次。
8. 完成
屏幕上会打印出面板地址、端口、用户名和密码,截图或复制保存好。
📝 证书也可以用 Cloudflare API 方式申请,不需要开 80 端口。这个方法单讲一期,感兴趣的在评论区说一声。
装完只剩一件事
把面板端口加进两道锁里(安全列表 + iptables,方法同第二步)。
然后浏览器打开 https://3xui.你的域名.com:面板端口/面板路径,能看到登录页、地址栏有小锁头,就说明装好了。
🕳️ 坑 4:别碰主菜单第 23 项「Firewall Management」
在 SSH 里敲
x-ui打开管理菜单,第 23. Firewall Management 就是这个坑。它底下七个子项全部是在调用 ufw,没有一条会去动 Oracle 那套 iptables 规则。
危险程度不一样,分开说:
子项 实际执行什么 风险 1. Install Firewall 装 ufw → 先放行 ssh、http、https、2053、2096 → ufw --force enable中 2. Port List ufw status numbered无 3. Open Ports ufw allow <端口>低,但在 Oracle 上是白干 4. Delete Ports ufw delete中,不拦着你删掉 22 端口的规则 5. Enable Firewall 只跑 ufw enable,不加任何放行规则最高 6. Disable Firewall ufw disable无(这是救命的那个) 7. Firewall Status ufw status verbose无 真正会把你锁在外面的是第 5 项。 它不做任何检查,直接
ufw enable,而 ufw 默认拒绝所有入站——你的 SSH 连接在回车那一刻就断了。第 1 项其实会先
ufw allow ssh再启用,不至于立刻断线。但在 Oracle 上它同样不该碰,原因是另一个:你机器里本来就跑着一套 iptables 规则,再启用 ufw 等于两套规则体系在管同一个内核,之后你改哪边都可能不生效,排查起来极其痛苦。第 3 项「Open Ports」在 Oracle 上更是白忙一场——你以为端口开了,云平台那层的安全列表还锁着呢。另外它默认放行的是
2053,那是 3X-UI 的旧默认面板端口,你随机生成的那个它压根没放行。在 Oracle 上,开端口就老老实实用第二步的方法。
另外如果安装中途退出或中断,安装完成后看不到用户名和密码,需要在 SSH 中运行
x-ui重置用户名密码。
如果安装时跳过了证书这一步,怎么补申请(可跳过)
在 SSH 里输入 x-ui 打开管理菜单,找到 SSL 证书管理,选择为域名申请证书,填入你的域名,流程跟安装时那几步是一样的。申请完别忘了在同一个子菜单里把证书路径设置到面板上。
第四步:创建 Reality 入站
登录面板 → 左侧 入站列表 → 添加入站。协议选 VLESS,下面按选项卡一项项来。
基础配置:端口用 443
443 是 HTTPS 的默认端口,用它能让连接看起来更像正常的网页访问。如果这台 VPS 上已经跑了网站或 Nginx,就别用 443,在 1024~65535 之间随便挑一个,记得去两道锁里把它打开。
协议配置
保持默认。
传输配置
选 RAW(新版的叫法,老版本叫 TCP),其他默认。
安全配置:选 Reality
Reality 不用像普通 HTTPS 网站那样单独配 SSL 证书,它借一个真实网站当伪装目标,让你的连接看起来像在正常访问那个网站。
- uTLS:伪装成某个浏览器的 TLS 指纹。默认是 Chrome,兼容性最好,不用改。
- 目标网站:这是 Reality 配置里最重要的一项。老版本要自己找,新版本点 查找目标,挑一个延迟低的点 使用,SNI 会自动填好。本文用
www.microsoft.com演示。想自己挑目标网站的,看这篇:Reality 回落域名怎么选。 - 最小 / 最大客户端版本:保持默认。如果后面导入客户端连不上,可以把最小客户端版本改成
0.0.0再试。
💡 以后哪天突然连不上了,先别急着重装,回到这里换一个目标网站试试。
嗅探配置(可选)
嗅探提升的是按域名分流的能力,属于调优,关着也不影响使用。想开的话:勾选 HTTP、TLS、QUIC,不要勾 FAKEDNS;“仅元数据"保持关闭,“仅路由"打开,其余默认。
高级配置
保持默认,点 创建。
第五步:添加客户端
新版 3X-UI 把客户端单独拎出来了,入站建好之后还要再加客户端。
左侧点 客户端 → 添加客户端:
- 基本:邮箱可以自定义,也可以用默认的;备注填个自己认得出的名字。关联入站选刚才建的 Reality 入站。以后建了更多入站,都能关联到同一个客户端,相当于一个用户下有多条线路,跟机场订阅一样。
- 凭据:Flow 选 xtls-rprx-vision。
💡 下拉里还有一个
xtls-rprx-vision-udp443。普通 vision 会拦掉 UDP 443(QUIC)流量,让浏览器退回 TCP;udp443 版本则放行。一般用普通 vision 就好。
点 创建。
第六步:重启 Xray,再导入节点
🕳️ 坑 5:建完客户端千万别马上导入 先重启 Xray,刚才的配置才会加载。跳过这一步,订阅链接要么是空的,要么是旧的。
|
|
重启后确认端口在监听:
|
|
有输出就说明 Xray 已经在这个端口上跑起来了。
拿到节点链接
回面板刷新页面,有两个入口:
- 二维码图标:上面一组是订阅链接,像机场订阅一样包含所有线路;下面一组是单条节点链接,可以单独导入。
- 右侧的圆圈图标:除了同样两组链接,还能看到节点的具体参数。
订阅信息里新增了一个 SUB 链接,点开是一个新页面,里面有 复制全部配置,线路多的时候一键全部复制很方便。
页面最下面还有 Android 和 iOS 两个按钮,点开能看到 V2Box、v2rayNG、sing-box、Shadowrocket、Streisand 等工具,点哪个就生成哪个工具能直接导入的格式,解决了一条链接在不同客户端不兼容的老问题。
想用订阅功能,2096 端口必须两道锁都开,不然客户端里的订阅无法更新,SUB 链接也打不开。
第七步:导进客户端测一测
Windows:v2rayN
- 在面板复制单条节点链接
- 打开 v2rayN → 服务器 → 从剪贴板导入分享链接
- 选中这个节点,右键 测试真连接延迟,出现毫秒数就说明通了
- 设为活动服务器,打开系统代理,浏览器访问 Google 试试
iOS:Shadowrocket
需要外区 Apple ID 才能下载。复制节点链接后打开 Shadowrocket,会自动提示添加,确认后点一下节点测延迟,有数字就是通的。
连不上?按这个顺序查
- 服务器上
sudo ss -lntp | grep ":443"有没有输出?没有 → 重启 Xray - 443 端口两道锁是不是都开了?
- Cloudflare 那条记录是不是灰云?
- 把入站里的最小客户端版本改成
0.0.0试试 - 换一个目标网站
常见报错与解决
安装到证书那步失败了
→ 原因:80 端口没开透,或者域名没解析到这台机器
→ 解决:① 用 dig + curl ifconfig.me 确认两个 IP 一致;② 安全列表和 iptables 都放行 80;③ 确认 iptables 里 80 的规则在 REJECT 上面;④ 排完之后不用重装,跑 x-ui 进菜单里的 SSL 证书管理补申请就行
证书申请成功了,但面板还是 http
→ 原因:安装时最后那个 Would you like to set this certificate for the panel? 选了 n
→ 解决:x-ui → SSL 证书管理 → 把证书路径设置到面板,然后 x-ui restart
面板打不开 → 原因:面板端口只开了一道锁 → 解决:安全列表 + iptables 都加上面板端口
订阅导入后是空的 / 节点还是旧配置
→ 原因:改完配置没重启 Xray
→ 解决:sudo x-ui restart xray,再重新导入
客户端订阅无法更新 → 原因:2096 端口没开 → 解决:两道锁都放行 2096
SSH 突然连不上了
→ 原因:多半是在 x-ui 菜单第 23 项里点了 5. Enable Firewall,ufw 启用后默认拒绝所有入站,把 22 端口也挡了
→ 解决:Oracle 控制台 → 实例 → 控制台连接 → 串行控制台登录,执行 sudo ufw disable。进不去串行控制台的话,只能另开一台实例把硬盘挂过去救,所以这一项真的别点
附:重启服务器
|
|
SSH 会立刻断开,等几十秒再连就行。
| 命令 | 作用 |
|---|---|
sudo reboot |
立即重启,最常用 |
sudo shutdown -r now |
立即重启 |
sudo shutdown -r +5 |
5 分钟后重启 |
sudo systemctl reboot |
用 systemd 重启 |
收个尾
到这里,你的甲骨文机器上已经跑着最新版 3X-UI,有一个自己域名加证书的面板,一个 VLESS + Reality 节点,电脑和手机都能连。回头看,真正卡人的不是步骤多,而是那两道锁、小黄云和重启 Xray 这几个地方,记住它们,以后换台机器重装也就十几分钟的事。
证书的 Cloudflare API 申请方式(不用开 80 端口),想看的评论区告诉我,人多就单独出一期。
系列导航
- 上一篇:Oracle 开实例遇到的问题:Out of Capacity 与 Pay As You Go 升级(即将发布)
- 下一篇:(待定)
- 返回系列目录:Oracle VPS 系列目录(【待补链接】)


