Featured image of post 2026.9 最新版 3X-UI 安装教程:Oracle ARM 实例 + Reality 节点,避开 5 个大坑

2026.9 最新版 3X-UI 安装教程:Oracle ARM 实例 + Reality 节点,避开 5 个大坑

在 Oracle ARM 实例上安装最新版 3X-UI,配置 VLESS + Reality 节点。详解 Oracle 安全列表与 iptables 两道锁、Cloudflare 灰云解析、证书申请和订阅设置,附 5 个常见坑的解决办法。

安全列表里 80 端口开了,域名也解析好了,一点申请证书——失败。再试一次,还是失败。

如果你用的是 Oracle,问题多半不在你操作错了,而是 Oracle 有两道锁,大部分教程只告诉你开一道。更麻烦的是,3X-UI 经过几轮大更新,面板布局、入站和客户端的设置方式都变了,老教程基本对不上号。

这篇从头装一遍最新版 3X-UI,在甲骨文实例上建好一个 VLESS + Reality 节点,导进 v2rayN 和 Shadowrocket 能用。路上我踩过的 5 个坑都会标出来,其中一个能把你直接锁在自己服务器外面。本来想在 ARM 实例上演示的,但第二台 ARM 实例没开出来,整个安装过程就移到了 Micro 实例上了,操作步骤是一样的。这里提醒一下刚刚拿下甲骨文账户的小伙伴,抓紧在免费试用期内申请 ARM 实例,成功几率会高很多。

🕳️ 本篇 5 个坑速览

  1. Cloudflare 小黄云没关 → Reality 连不上
  2. 只开了安全列表、没开 iptables → 证书申请失败
  3. iptables 规则加在 REJECT 后面 → 加了等于没加
  4. 用 3X-UI 自带的防火墙菜单(ufw)→ 被锁在服务器外面
  5. 建完客户端不重启 Xray → 订阅是空的

开工前准备好这三样

  1. 一台 Oracle 实例:本文演示改用 Micro 实例、Ubuntu 系统。ARM 实例申请过程看系列前几篇:创建第一个 ARM Ampere A1 实例、新实例开机第一件事。抢不到 ARM 的话,可以先开一天普通的 Micro 机器,也可以先用 Vultr 的按小时计费实例过渡,流程基本一样(防火墙那部分更简单)。
  2. 一个 Cloudflare 账户
  3. 一个已经托管到 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 登录服务器,跑下面两条命令,缺一条说明不了问题:

1
2
dig +short 3xui.你的域名.com    # 域名解析到了哪个 IP
curl -s ifconfig.me              # 这台机器的公网 IP 是多少

ifconfig.me 卡住没反应就换一个:

1
curl -s https://api.ipify.org

两个输出完全一样,解析就成功了。 如果 dig 返回的是一个陌生 IP(常见的是 104.x 或 172.x 开头),那就是小黄云还开着,回去关掉。不一致就别急着往下走,改好、等生效了再继续,这样证书能一次过。


第二步:打开端口——Oracle 的两道锁

先说清楚为什么 Oracle 比别家麻烦。谷歌云、亚马逊这些,开端口只需要在控制台操作一次。而甲骨文有两道锁:

  1. 网页控制台里的安全列表
  2. 实例系统里自带的 iptables 规则

关键是它们是串联的:数据包先过安全列表,再过 iptables,两关都过了才能到你的程序。只开一道,等于没开。

🕳️ 坑 2:只开了安全列表 这就是开头那个"80 端口明明开了,证书还是失败"的原因——你开的是第一道锁,第二道还锁着。

第一道锁:安全列表

最快的路径:控制台顶部搜索框输入 VCN → 点进你的 VCN → 安全列表 → 点默认安全列表 → 安全规则 → 入站规则 → 添加入站规则。

(也可以走:左上角三条杠 → 实例 → 点你的实例 → 网络 → 子网 → 安全 → 安全列表)。

这里注意,免费账户可以创建多个 VCN,如果你创建过其他的 VCN,要看清不要选错。

每条规则这样填:

  • 源 CIDR:0.0.0.0/0
  • IP 协议:TCP
  • 目的地端口范围:80(443、2096 同样各加一条,或者写成 80,443,2096)

第二道锁:iptables

先看看现在有哪些规则:

1
sudo iptables -L INPUT -n --line-numbers

你会在靠后的位置看到一条 REJECT,它负责把前面没匹配上的包全部挡掉。

🕳️ 坑 3:规则要加在 REJECT 前面 iptables 从上往下匹配,撞上 REJECT 就不往下看了。规则加在它后面,等于没加。

最省心的办法是用 -I,它会把规则插到第一行,自然在 REJECT 前面:

1
2
3
4
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 2096 -j ACCEPT
sudo netfilter-persistent save

最后一行是把规则存下来,不然重启就没了。

再跑一次查看命令,确认这几条出现在 REJECT 上面:

1
sudo iptables -L INPUT -n -v --line-numbers
另一种方法:直接改规则文件(进阶,可跳过)
1
sudo nano /etc/iptables/rules.v4

找到 SSH 那行:

1
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

在它下面照葫芦画瓢加上要开的端口,一定要在 -A INPUT -j REJECT ... 那行上面:

1
2
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

Ctrl+O 回车保存,Ctrl+X 退出,然后让规则生效:

1
sudo iptables-restore < /etc/iptables/rules.v4

开错了怎么删

1
2
3
4
sudo iptables -L INPUT -n -v --line-numbers          # 查看所有规则和行号
sudo iptables -L INPUT -n -v --line-numbers | grep 80  # 只看 80 端口在第几行
sudo iptables -D INPUT 5                              # 删除第 5 行(换成你查到的行号)
sudo netfilter-persistent save                        # 保存

第三步:一行命令装好 3X-UI

装最新版:

1
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

装指定版本:

1
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v3.7.0

末尾的 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,刚才的配置才会加载。跳过这一步,订阅链接要么是空的,要么是旧的。

1
sudo x-ui restart xray

重启后确认端口在监听:

1
2
sudo ss -lntp | grep ":443"                        # 看一个端口
sudo ss -lntp | grep -E ':(443|2096)\b'             # 同时看多个端口

有输出就说明 Xray 已经在这个端口上跑起来了。

拿到节点链接

回面板刷新页面,有两个入口:

  • 二维码图标:上面一组是订阅链接,像机场订阅一样包含所有线路;下面一组是单条节点链接,可以单独导入。
  • 右侧的圆圈图标:除了同样两组链接,还能看到节点的具体参数。

订阅信息里新增了一个 SUB 链接,点开是一个新页面,里面有 复制全部配置,线路多的时候一键全部复制很方便。

页面最下面还有 Android 和 iOS 两个按钮,点开能看到 V2Box、v2rayNG、sing-box、Shadowrocket、Streisand 等工具,点哪个就生成哪个工具能直接导入的格式,解决了一条链接在不同客户端不兼容的老问题。

想用订阅功能,2096 端口必须两道锁都开,不然客户端里的订阅无法更新,SUB 链接也打不开。


第七步:导进客户端测一测

Windows:v2rayN

  1. 在面板复制单条节点链接
  2. 打开 v2rayN → 服务器 → 从剪贴板导入分享链接
  3. 选中这个节点,右键 测试真连接延迟,出现毫秒数就说明通了
  4. 设为活动服务器,打开系统代理,浏览器访问 Google 试试

iOS:Shadowrocket

需要外区 Apple ID 才能下载。复制节点链接后打开 Shadowrocket,会自动提示添加,确认后点一下节点测延迟,有数字就是通的。

连不上?按这个顺序查

  1. 服务器上 sudo ss -lntp | grep ":443" 有没有输出?没有 → 重启 Xray
  2. 443 端口两道锁是不是都开了?
  3. Cloudflare 那条记录是不是灰云?
  4. 把入站里的最小客户端版本改成 0.0.0 试试
  5. 换一个目标网站

常见报错与解决

安装到证书那步失败了 → 原因: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。进不去串行控制台的话,只能另开一台实例把硬盘挂过去救,所以这一项真的别点


附:重启服务器

1
sudo reboot

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 系列目录(【待补链接】)
使用 Hugo 构建
主题 Stack 由 Jimmy 设计