好文集ChatGPT Plus¥119

白嫖甲骨文服务器+AI Agent,10分钟搭好备用节点(附开源Skill)

文章目录

上一篇,我们注册了甲骨文账号,开出了一台永久免费的ARM实例。这篇接着往下做:在这台机器上搭一个自己用的VLESS + REALITY节点。

注册与实例开通流程可以看这篇:

嵌入推文(联网查看)

先说一下我的用法。我日常用的主力节点在一台DMIT的VPS上,甲骨文这台是备用节点。主力机器维护、线路抽风或者被临时封端口的时候,手机上切一下就能继续用。备用节点不需要多快,但要稳、要省心,免费的甲骨文正好合适。

方案本身并不复杂:在服务器上装3x-ui面板,用它创建一个VLESS + REALITY节点。3x-ui是一个网页管理面板,建节点、加用户、看流量都能在网页上点;REALITY是目前比较主流的协议,别人探测你的服务器时,看到的是一个正常网站,不容易被识别。另外,订阅和后台通过Cloudflare Tunnel访问,服务器不用多开端口。

这次的做法和常见教程不太一样:全程在自己电脑上,用AI Agent加一个Skill来完成,基本不需要自己敲代码。

  • Agent是在你电脑上运行的AI助手,比如Claude Code或Codex。它能通过SSH连上服务器,替你执行命令。

  • Skill是我整理好的一份"搭节点操作手册",装给Agent以后,它会按固定的流程来做:先检查,再给方案,确认后才动手,最后验收。

你要做的,主要是用中文把需求告诉Agent,在它给出方案时看一眼、回一句"可以"。文中每一步要发给Agent的话都写好了,复制过去就行。需要你自己动手的只有两类:在甲骨文和Cloudflare的网页后台点几下,以及文末管理3x-ui时输入一个菜单命令。

服务器上实际操作的时间大约10分钟,Cloudflare后台另外点了几分钟。

文中的对话截图是根据这次实际运行的输出整理排版的,IP等信息做了遮挡;3x-ui面板的截图是真实截图。

花费

文章配图

服务器和Cloudflare都用免费额度,唯一的花费是域名。如果你的主力节点已经在用某个域名,直接给备用节点加两个子域名就行,不用另外买。

搭完是什么样

文章配图

  • 翻墙流量直接连服务器的443端口,不经过Cloudflare

  • 手机更新订阅走Cloudflare Tunnel

  • 3x-ui后台也走Tunnel,并且前面加了一层Cloudflare Access邮箱验证

  • 服务器对公网只开放22和443两个端口,面板和订阅端口从外面访问不到

不是甲骨文,也能照着做

这篇虽然用甲骨文演示,但整套方案并不绑定甲骨文。我的主力节点在DMIT,用的也是同样的结构:节点直连443,后台走Cloudflare Tunnel加Access。

只要你的服务器满足下面几条,就可以照着做:

  • 能用SSH登录

  • 系统是常见的Linux:Debian、Ubuntu,或者Rocky、AlmaLinux这类RHEL系

  • 处理器是x86_64或ARM64都可以,Agent会自己识别,下载对应的版本

  • 有独立的公网IPv4;如果是NAT小鸡,需要服务商给了明确的TCP端口映射

  • 能在云厂商后台改防火墙(安全组)

换成别家服务器,提示词基本不用改,把SSH别名换成你自己的就行。会不一样的主要是这几处:

  • 云防火墙的位置不同:甲骨文叫Security List,AWS叫安全组,Google Cloud叫VPC防火墙规则,Azure叫NSG,DMIT、Vultr这类普通VPS一般在控制台的防火墙页面,有的干脆没有。第四步按你家的来。

  • 系统防火墙不一定有坑:第二步提到的"只放行22"是甲骨文Ubuntu镜像特有的,别家镜像通常没有。有没有、要怎么改,Agent在只读检查时会告诉你。

  • 443被占用:如果服务器上已经跑着网站,Agent不会停掉它,而是换一个端口,或者先给你共存方案。

  • NAT小鸡:公网端口通常不是443,客户端要连服务商分配给你的外部端口。Agent会把外部端口写进订阅。

另外有几种情况,Skill会直接停下来,不会硬装:Windows服务器、Alpine或OpenWrt这类精简系统、只有IPv6的机器、不支持systemd的系统。遇到这些,要另外找专门的方案。

准备

  1. 上一篇开好的甲骨文实例(开通教程见文章开头的链接;用别家VPS也可以,见上一节):我的是A1,Ubuntu 24.04,1核2G。在电脑上配好SSH别名会方便很多,比如我敲ssh oracle就能登录。

  2. 一个AI Agent:Claude Code或Codex都可以,需要能在你电脑上执行命令。

  3. 一个托管在Cloudflare的域名:订阅和后台各用一个子域名。不想用Cloudflare的话也可以,见第三步的"怕麻烦的话"。

  4. 手机客户端:iOS可以用Shadowrocket或Stash,安卓可以用v2rayNG或FlClash,电脑可以用Clash Verge Rev或v2rayN。

Agent会拿到服务器的root权限,所以整个过程我都让它先说明要做什么,确认后再动手。

第一步:给Agent安装Skill

我把搭节点的流程、检查项和验收标准整理成了一个开源Skill,Agent装上以后会按这套流程来做,不会自己随便找一键脚本。

发给Agent:

请从 https://github.com/suversal/skills/tree/main/vps-reality 安装vps-reality Skill,保持整个文件夹的目录结构。装好后运行它自带的离线测试,告诉我结果和调用方式。这一步不要连接任何服务器。

文章配图

37项测试,36项通过,1项因为本机没装PyYAML跳过,不影响使用。

第二步:只读检查服务器

发给Agent:

使用vps-reality Skill,在我的服务器oracle上搭一个个人自用节点。先确认连的是哪台机器,然后只做只读检查,不要安装、不要改防火墙、不要重启。

文章配图

mutations=none表示这一步没有改动任何东西。系统是Ubuntu 24.04 ARM64,在Skill的支持范围内,443端口空闲。

检查结果里有一点要特别注意,也就是截图里标黄的那一行:甲骨文的Ubuntu镜像自带一套防火墙规则,只放行22端口,其他连接全部拒绝。所以只在甲骨文控制台开放443是不够的,服务器系统里也要放行。很多人照着教程开了端口还是连不上,就是卡在这里。

第三步:确定方案

发给Agent(域名换成你自己的):

我的方案:

  1. 节点用公网TCP 443,不经过Cloudflare。

  2. 订阅走Cloudflare Tunnel,域名sub.你的域名。

  3. 后台也走Tunnel,域名panel.你的域名,加Cloudflare Access,只允许我的邮箱。

  4. 面板和订阅端口都不对公网开放。

  5. 伪装目标请找3~5个候选并逐项检查,列出证据由我来选。

  6. 只建一个owner用户,每月流量额度按我的套餐设置,每月1日重置。

  7. 不装多余的东西,不改内核。 先给我变更清单和回滚方法,我确认后再执行。

我这台的额度填的是9216GB(3x-ui按1024换算,正好是9TB),给甲骨文每月10TB的免费出站流量留一点余量。

为什么这样配

这套方案的思路是:翻墙流量走最短的路,管理入口全部藏起来。

  • 节点直连443:流量不绕Cloudflare,速度只取决于服务器本身的线路;443又是HTTPS的标准端口,看起来就是普通的网页访问。

  • 订阅走Tunnel:订阅端口不用对公网开放,手机通过HTTPS域名就能自动更新订阅。以后服务器换了参数,手机上点一下更新就行。

  • 后台走Tunnel + Access:后台同样不开放端口,而且陌生人连3x-ui的登录页都看不到,得先通过你邮箱的验证码。

  • 只开两个端口:服务器对外只有SSH和443,被扫描、被爆破的面很小。

  • 改动最少:不换内核、不装额外软件,出了问题容易排查,也容易回滚。

代价是要多做一点Cloudflare的配置,并且需要一个域名。

怕麻烦的话

如果你觉得Cloudflare那部分太麻烦,可以把方案里的第2、3条换成下面这句,让Agent用最简单的方式:

不用Cloudflare,也不用域名。后台和订阅都只监听本机,后台我通过SSH隧道打开;节点配置直接给我一个VLESS链接或二维码,我手动导入手机。

这样可以省掉第七步整个Cloudflare的配置,也不用买域名,是真正的0元。安全性上一点不差,公网照样只开放22和443。

少掉的是两样便利:

  • 手机不能自动更新订阅。服务器参数变了,要重新导入链接。

  • 打开后台要先在电脑上建SSH隧道。在电脑终端运行 ssh -L 8080:127.0.0.1:<面板端口> oracle,然后在浏览器打开 http://127.0.0.1:8080/访问路径/。

对备用节点来说,这两点影响不大:备用节点搭好以后基本不用动,参数一年也改不了几次。先用简单方案跑起来,以后需要再让Agent加上Tunnel也完全可以,Skill支持在保留现有配置的前提下迁移。

伪装目标怎么选

REALITY会把自己伪装成在访问另一个正常网站,这个网站就是伪装目标。别人探测你的服务器时,看到的是这个网站的真实证书和页面。

选伪装目标有几个基本要求:

  • 支持TLS 1.3和HTTP/2,证书正常

  • 不挂在Cloudflare这类共享CDN上,否则别人可能借你的服务器访问CDN上的其他网站,消耗你的流量

  • 是普通的小网站,不是下载站、网盘或代理面板

  • 离你的服务器近

我这次用的是hengwen.ltd。它不是我的网站,是一个第三方小站。之前我的主力节点(DMIT)一开始用的是教程里常见的www.sony.com,后来发现Sony背后是CDN,就在DMIT所在网段做了一轮低速筛选:检查证书、TLS 1.3、HTTP/2,排除CDN和下载站,最后在同一ASN的相邻网段里找到了它。

这次在甲骨文上,我让Agent从这台服务器重新检查了一遍:

文章配图

没有CDN特征,TLS 1.3和h2都支持,证书匹配,延迟约10ms(它在洛杉矶,甲骨文这台在圣何塞)。各项都合格,就继续用它。

不建议照抄这个域名。第三方网站随时可能换CDN、证书过期或者关站,而且对你的服务器来说也不一定近。更稳妥的做法是让Agent在你自己的服务器上挑:

请帮我选REALITY伪装目标:找3~5个候选,在这台服务器上逐项检查DNS、TLS 1.3、h2、证书和是否共享CDN,列一张证据表给我,由我来选。

另外,扫描网段找目标的做法不建议新手照做,主动扫描别人的地址可能违反服务商的使用条款。

第四步:放行443端口

要放行两层。

第一层:甲骨文控制台。路径是Networking → Virtual cloud networks → 你的VCN → 你的子网 → Security Lists → Add Ingress Rules。Source CIDR填0.0.0.0/0,IP Protocol选TCP,Destination Port Range填443。

用别家服务器的话,这一层换成对应的安全组或防火墙页面,规则一样:只放行TCP 443,不开UDP,也不要顺手开放面板和订阅端口。

第二层:服务器系统。这一层由Agent来做。要注意的是,443的放行规则必须插在"全部拒绝"那条规则前面。防火墙规则从上往下匹配,放在后面就不会生效。改完还要保存,重启后才不会丢。

第五步:安装3x-ui和Xray

Agent查到3x-ui当天的最新正式版是v3.8.5。它没有直接运行安装脚本,而是先下载下来读了一遍,发现三个需要处理的默认行为:

  • 非交互安装时,面板默认监听所有网卡

  • 默认会顺手装Fail2ban

  • 如果不指定,可能会去申请证书,临时占用80端口

所以安装时用参数把这些都关掉了,并把面板端口固定下来,方便后面Cloudflare Tunnel对接。安装前后它还核对了官方校验值,并读取程序文件头,确认装的是ARM64版本:

文章配图

装完后,面板被改成只监听本机。随机生成的账号密码只保存在服务器的私密文件里。

第六步:创建节点

发给Agent:

继续创建VLESS + TCP + REALITY + Vision节点。生成全新的密钥和ID。写入前备份数据库,写入后读回核对,敏感信息只比对、不显示。然后做握手测试。

文章配图

读回的每一项都是match,握手测试通过,出口IP也对得上。

有个细节:流量每月重置要在"入站"和"用户"两层都设置。只设一层的话,用户的已用流量会一直累积。

第七步:接上Cloudflare Tunnel

这一步一半在Cloudflare后台操作,一半交给Agent。

1.新建Tunnel。Cloudflare Zero Trust → 网络 → 连接器 → 新建Tunnel。

2.先给后台建Access应用。访问控制 → 应用程序 → 添加自托管应用,填后台域名,策略只允许自己的邮箱。

文章配图

先建Access,再加后台路由。这样后台域名一生效就有这层保护。

3.添加两条路由。订阅域名指向127.0.0.1:2096,后台域名指向127.0.0.1:58405。

文章配图

订阅域名不要加Access。手机在后台自动更新订阅时没办法输入验证码,被拦住的话拿到的是登录页面,而不是节点配置。

4.让Agent安装cloudflared。连接器页面上的Token相当于这条Tunnel的钥匙,不要贴进聊天,让Agent把它存进只有root能读的文件。

文章配图

这个页面上,操作系统选Debian(Ubuntu也选它),架构要按服务器来选:甲骨文A1是ARM,选arm64-bit;普通x86服务器选64-bit。页面给的命令不用自己跑,交给Agent就行。

发给Agent:

Cloudflare Tunnel已经建好。请从官方源安装与服务器架构匹配的cloudflared,Token存进只有root能读的文件,通过systemd启动,任何输出里都不要显示Token。

装好后几秒钟,4条隧道连接就建立起来了。回到Cloudflare的隧道列表,状态显示"正常"就说明连上了:

文章配图

第八步:验收

验收要在服务器外部做,我让Agent从另一台服务器上测:

文章配图

  • 公网只开放了22和443

  • Raw、JSON、Clash三种订阅都能拿到、能解析,内容和配置一致

  • 没登录的人打开后台,会被Cloudflare登录页拦住

  • 不带密钥的访问者,只能看到伪装网站的真实页面

最后用手机测一次。在3x-ui后台的"客户端"页面,打开owner的信息,复制订阅地址,或者直接用手机扫对应的二维码:

文章配图

导入手机客户端后,关掉Wi-Fi,用手机流量连接节点,打开查IP的网站,显示的是甲骨文服务器的IP就说明成功了。

文章配图

如果客户端开的是规则模式,国内的IP查询网站会走直连,显示的是你自己宽带的IP,不代表节点没生效。验证节点要用国外的网站。

作为备用节点,建议把它和主力节点放在同一个客户端里,主力出问题时直接切换。

3x-ui日常管理

节点搭好以后,平时最常做的是这几件事。

登录后台

打开 https://后台域名/访问路径/ 先通过Cloudflare的邮箱验证码,再输入3x-ui自己的账号密码。

文章配图

初始的账号、密码和访问路径,在服务器的/etc/x-ui/install-result.env里。

修改账号密码

账号密码不在网页里改,而是在服务器终端里用x-ui的管理菜单:

ssh oracle 
sudo x-ui

文章配图

选7. Reset Username & Password,然后:

  1. 输入y确认

  2. 输入新用户名(直接回车会随机生成)

  3. 输入新密码(直接回车会随机生成)

  4. 询问是否关闭两步验证时,一般输入n

  5. 同意重启面板

文章配图

几点提醒:

  • 输入的密码会以明文显示在终端里,操作时不要共享屏幕或录屏

  • 重启面板会让代理短暂中断几秒

  • 改完以后,install-result.env里的旧账号密码就作废了,以新密码为准,记得存进密码管理器

  • 这里改的是3x-ui的密码,Cloudflare Access的邮箱验证不受影响

修改访问路径

访问路径就是后台地址里域名后面那一段随机字符。如果怀疑它泄露了,在同一个菜单里选8. Reset Web Base Path,输入y确认,会生成一个新的随机路径,然后自动重启面板。或者在 设置-常规-URL路径 中指定路径。

路径变了不影响Cloudflare Tunnel,因为Tunnel只对接端口。之后打开后台要换成新路径。忘了路径的话,选11. View Current Settings可以查看当前设置。

添加用户

备用节点也可以分给家人或朋友用。每个人单独建一个用户,额度和到期时间分开管理,谁的链接泄露了,只停用那一个人就行。

在后台打开"客户端"页面:

文章配图

点添加客户端,常用的几项:

文章配图

  • 邮箱:其实就是用户名,写一个你认得出的标签就行,比如friend-1

  • 流量上限(GB):这个人每个周期能用多少,0表示不限

  • 过期时间:到期后自动停用,不填就是永久

  • 流量重置:选"每月",再填每月重置日

  • 备注:写上是谁,方便以后查找

  • 关联入站:必须选上刚才建的REALITY节点,否则这个用户连不上

填完点"创建"。在列表里点这个用户的二维码或链接按钮,就能拿到他自己的订阅。给别人用的时候,发他自己的订阅,不要发owner的。

另外,我这台面板上的"IP限制"一项是灰的,暂时用不了。只给少数几个熟人用的话,影响不大。

踩过的坑

文章配图

最后

整套流程走下来,比较省心的地方是Agent每一步都会先检查、再动手,改完还会读回核对,出了问题能看出是卡在哪一层。

Skill已经开源:https://github.com/suversal/skills/tree/main/vps-reality

这篇是我2026年9月底的个人实操记录,软件版本和后台界面以后可能会变,仅供参考。也请遵守当地规定和服务商条款

安装中遇到问题,欢迎留言;教程哪里写得不对、有更好的做法,也欢迎指出,我会及时更新。

感谢阅读,这篇文章如果对你有帮助的话欢迎点赞收藏、下篇文章再见。

全文完
查看原文

沿着这个主题继续读

从一篇文章,找到相关的教程、经验和阅读路径。

AI SkillsAI Skills 使用、编写与工作流实践,按开发、表格和知识整理任务选技能。