0 前言
本文记录了我近期折腾 VPS 与 3x-ui 的全套笔记。由于涵盖了从基础到进阶的大量内容,篇幅较长,大家善用目录跳转:
- 新手/刚需用户:建议重点阅读「第 1 至 4 节」。跟着完成 VPS 选购、SSH 连接、3x-ui 部署及节点配置后,你就能拥有一条稳定可用的节点,足以满足日常需求。
- 折腾/进阶用户:后续章节涵盖了面板防扫隐藏、CF CDN/WARP 容灾拯救、Realm 中转、AI 精细分流、Komari 探针监控、Sub-Store 订阅聚合以及服务器安全加固等进阶玩法,遇到对应需求时查阅即可。
有不懂的,可以尝试问 AI,搭梯子并不是什么很复杂的事,AI 的数据库基本都有解决方法。本文的大部分内容也是在哈基米的协助下完成。
1 前期准备
1.1 vps(虚拟服务器)——必须
不作具体推荐,仅从配置上进行初步分析。
一台vps的核心配置如下:
-
cpu:1核足够
-
内存:对于搭建3x-ui面板,512MB就够了,256MB的话,建议寻找其他方式,比如问 AI 怎么教你搭建裸核
-
储存:不做要求
-
系统:debian11/12系统更为精简,系统占用小,推荐512MB内存的安装,ubuntu22.04/24.04的系统占用相对大一些,但最适合新手,社区教程丰富,1G及以上内存可选择。两者的命令基本是通用的,按需选择。
-
带宽:按需选择,我觉得自用的话200Mbps都能用了。带宽除以8为实际的下载速度。
-
流量:按需选择,有的厂商流量是按双向计算,有的是按单向。在网络代理的场景下,你可以大致理解为,双向流量除以2等于你实际可用的流量。
-
线路:简单来说,网络线路就是你的数据从本地电脑到远程服务器所经过的”道路”。一条好的线路能极大提升体验。我只简单提及最常见的三个精品路线:
- 电信:CN2GIA
- 联通:9929
- 移动:CMIN2
对应运营商走自己的网络路线一般是最好的,也可以跨网,但跨网会增加延迟,晚高峰可能被限速丢包(点名表扬移动)。 商家一般会在宣传页提及以下关键词:
- 三网优化:三网指的是上面的三大运营商,有可能是三网各自优化,走对应的顶级路线,体验最好。也可能是三个都走一个路线,比如电信、联通、移动都走9929。
- 单网优化:只对一个运营商进行优化,其他运营商走国际线路,买这类产品时,一定要确保自己的宽带/手机卡的运营商是和优化线路对应的。
- 无中国大陆优化:顾名思义,不做线路优化。若商家没有在详情页提及网络优化,则一般无优化。晚高峰时容易丢包,优点是价格便宜,很多10刀一年的机子都没有线路优化。也有例外,比如移动走 lumen 很快乐。但一般来说,认准上面的三条精品线路即可。
线路的水其实很深,就算是同一条线路,不同上游的表现也可能完全不一样。因此,更建议大家加入一些可信的vps论坛或频道,查看心仪机型的评测。会给出诸如下图的评测报告,可以查看在各个地区各个运营商走的线路和延迟。有一个大致的心理预期。

-
IP质量:线路机的 ip 质量基本都很一般,要么是广播 ip,好一点会给原生的机房 ip。厂商的产品线一般是,有优化线路的,不会给顶级的ip;ip质量好的,不会做中国大陆的线路优化。解决办法是我都要,用一台有优化线路的机子作为中转,把 ip 质量好的机子作为落地,访问 ai 或者流媒体服务。本文有涉及。(题外话:日常使用,干净的机房 ip 完全够用了,没有 ai 或其他相关需求的,完全没必要买昂贵的家宽。顺便再避个雷,不要看到住宅 IP 就以为是家宽!真家宽最低也要一个月100块左右,低于这个价一律虚假宣传!)
1.2 域名
本文搭建的节点类型为 vless+reality,reality 的核心思想是偷大厂或其他网站的域名进行伪装,因此,在实际的网络代理过程中,用不到自己的域名。
但是,3x-ui 的面板以及订阅链接需要绑定域名,建立安全的https连接,以访问面板和拉取节点。
本文提供了第二种思路,使用 ssh 隧道或 tailscale 连接 vps 上本地的端口,不刚需域名,但仍建议购买一个六位数字 .xyz 域名,一年也就几块钱,为面板绑定一个域名,可以省不少事。
如果实在不愿意购买,这里有两个可以领取免费二级域名的网址,可以托管到 cloudflare 上。
把域名托管到 cloudflare 上。为其添加一条 A 记录,指向你服务器的公网 ip。建议采用子域名的形式,后面有多台vps,仍可取不同的子域名,复用这个域名。
大致的流程如下:

输入你的域名

选择免费计划

继续前往激活

复制这两个cloudflare提供的域名服务器

回到你购买域名的那个平台的管理页面,替换掉域名服务器
等待DNS传播完全以后,这个域名就托管到cf上了
进入cf的域名管理页面

准备添加一条记录,指向你vps的ip
先关闭cdn代理,原因后面会解释
2 VPS 连接
拿到服务器的公网 IP、用户名(通常是 root)和密码后,我们要如何控制它呢?
2.1 使用系统自带的终端(快速临时连接)
Windows: 按下 Win + R 键,输入 cmd 打开命令提示符。
Mac / Linux: 直接打开系统自带的「终端 (Terminal)」。
连接命令: 输入 ssh root@你的公网ip 并回车。
首次连接如果弹出一串英文问你是否继续,输入 yes 回车即可。
接下来会提示输入密码。在输入密码时,屏幕上不会显示任何字符,光标也不会动,正常输入即可。
缺点:每次连接都要手打命令和密码,不推荐。
2.2 使用专业的 SSH 客户端
SSH客户端可以帮你记住密码、保存多台服务器、上传文件到服务器,很方便。
FinalShell: 国产免费,不仅能连接命令行,还能直接拖拽上传/下载文件,非常适合新手,网上的教程很多也用的是这个。
使用方法: 打开客户端,新建一个连接(Host),填入你的 IP,端口保持默认的 22,认证方式选择密码,填入 root 和你的密码保存。以后就能一键连接了。
Termius(作者自用): 界面美观,支持 Windows和 Android 多端同步,我自己很喜欢,但是付费,有 github 学生包的可以免费用。本文教程使用termius演示,但市面上SSH客户端的功能基本都很完善了,你用其他的也没有区别。

再贴一个开源项目,界面模仿的 termius,喜欢花里胡哨的可以试试这个:
https://github.com/binaricat/Netcatty
3 安装3x-ui面板
在vps上输入安装命令:
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)根据指引流程完成安装,以下是需要交互的部分:
═══════════════════════════════════════════
Database Selection
═══════════════════════════════════════════
1) SQLite (default — recommended for < 500 clients)
2) PostgreSQL (recommended for high client counts / many nodes)
Choose [1]:
选择数据库,输入1
Would you like to customize the Panel Port settings? (If not, a random port will be applied) [y/n]:
是否需要自定义面板的端口,选择y
Please set up the panel port:
设置面板端口,建议输入10000到40000之间的端口,如35781
Choose SSL certificate setup method:
1. Let’s Encrypt for Domain (90-day validity, auto-renews)
2. Let’s Encrypt for IP Address (6-day validity, auto-renews)
3. Custom SSL Certificate (Path to existing files)
4. Skip SSL (advanced — behind reverse proxy / SSH tunnel only)
Note: Options 1 & 2 require port 80 open. Option 3 requires manual paths.
Note: Option 4 serves the panel over plain HTTP — only safe behind >nginx/Caddy or an SSH tunnel.
Choose an option (default 2 for IP):
选择为域名申请证书的方式,建议有域名的选择1,没有域名的选择4。本节介绍方法一,没有域名的跳转到 6.1 或者 6.2 节,介绍了两种不需要域名的方案,但比较折腾,如果实在不愿意折腾,也可以选择2,使用 IP 证书。
输入1,继续完成安装流程
Please enter your domain name:
输入你在cloudflare上托管的域名
Please choose which port to use (default is 80):
输入申请证书时使用的端口,默认使用80端口即可
Would you like to modify —reloadcmd for ACME? (y/n):
是否修改 ACME 申请证书成功后的重载命令吗?我也不太清楚是什么意思,输入n即可
Would you like to set this certificate for the panel? (y/n):
是否为面板设置申请的证书?输入y
然后,不出意外的话,3x-ui面板的安装已经成功了,会在命令行输入以下内容:
═══════════════════════════════════════════
Panel Installation Complete!
═══════════════════════════════════════════
Username: J3Fp0oQqjo
Password: olnSUYUjFa
Port: 35781
WebBasePath: AKWpfi8YoVv8V1BHg4
Database: SQLite (/etc/x-ui/x-ui.db)
Access URL: https://你的域名:35781/AKWpfi8YoVv8V1BHg4
API Token: HyBisdO9XatEXvMHNvEd348GciYMaiKBPsuLW5J11FDeWvwV
═══════════════════════════════════════════
这里有你访问3x-ui面板的url地址,登录用的用户名和密码。在浏览器上访问即可。
需要注意的是,如果你的域名是托管在cloudflare上的,务必关闭cdn代理(小黄云),切换到仅dns,因为cf的免费版只支持对几个特定的端口进行代理(如443,2053等),这些端口常用且容易泄露,所以我们使用了高位端口,但不受cf的cdn支持,如果希望隐藏 3x-ui 面板,提升服务器安全性,可以查看第 6 节,提供了几种方案。
4 配置节点
本节介绍两种主流协议,大家自由选择,可以只选择一种
- vless+tcp+vision+reality: 极致的伪装与稳定性,不需要你自己准备证书,只要你的线路不是特别差,优先选择这个协议
- hysteria2:极致的速度与抗丢包能力,使用udp协议提速,高强度使用可能被运营商qos降速
首先登录3x-ui面板
这里可以看到系统状况,我们点击侧边栏的入站,开始配置节点
4.1 vless+tcp+vision+reality 协议搭建
备注随便填,分享地址改成你服务器的公网ip,建议把端口改成443,其他保持默认即可

安全部分,选择reality,点击查找目标,选择用于伪装的域名

这里列出了常用的大厂域名,选择延迟低的即可,不要选微软和 Cloudflare

会自动补全sni,拉到最底下点击创建即可
另外,如果你使用的是 clash 系或者小火箭之类的客户端,务必把最小客户端版本改成 1.0.0!v2ray 系客户端请无视。
这样,我们就得到了一个vless-tcp-reality的节点

点击侧边栏的客户端进行添加,关联入站勾选我们刚刚创建的节点,备注随便填,如果你要给朋友用的话,可以多建几个客户端,起不同的备注区分

流控选择vision,这样,我们就得到了一个vless+tcp+vision+reality的节点,是目前最稳的直连方案。

4.2 导入订阅链接到客户端
代理客户端选择方面,windows推荐v2rayN、clash verge;安卓推荐v2rayNG、flclash,在github下载。
如果你的代理客户端是用的clash,需要在订阅设置里勾选clash订阅,保存后重启面板

需要注意的是,新版 xray 内核(v26.7.11)限制了最小客户端版本,如果你使用的是 v2ray 系客户端,请更新到最新版。如果你使用的是 clash/singbox 系客户端且需要使用 reality 协议,请手动限制最小客户端:

回到客户端,点击客户端详情即可查看订阅链接

直接复制订阅链接,导入到你的代理客户端即可。
clash 系使用的 mihomo 内核在分流方面更强大些,可以做到很精细的分流。v2ray 系的系统占有小,最适配 reality 协议。
把节点导入客户端以后,你已经可以使用自己搭建的梯子了,其它内容偏进阶,感兴趣的可以看下去。
4.3 hysteria2 协议搭建
如果你已经搭好了 reality 协议,并且能用,就不要管 hysteria2 了!这个协议是给线路很差的机子准备的。如果你 reality 用着很卡,可以考虑试试这个协议。
4.3.1 配置 hysteria2 节点
创建一个新节点,备注随意,协议选择 hysteria,自定义分享地址可以使用面板域名。需要注意的是,hysteria2 用的是 udp 协议,cf 的 CDN 不支持 udp,需要关闭 CDN 代理。

安全部分,sni可以填你的面板域名,ALPN 全选,从面板设置证书,一个 hysteria2 节点就创建好了

同样,我们需要在客户端添加它

4.3.2 配置端口跳跃(选做)
上文提到,高强度使用 hysteria2,可能会被运营商限速,一般是针对你使用的端口进行限速。hysteria2 原生支持端口跳跃,可以在传输过程中随机切换端口,分散流量,减少被限速的风险。
回到 3x-ui 面板,打开节点的传输部分,配置一下端口跳跃

回到 VPS,我们需要配置 NAT 转发规则
允许目标端口范围的 UDP 流量进入
iptables -I INPUT -p udp --dport 45000:48000 -j ACCEPT将端口范围的 UDP 流量重定向到 3x-ui 监听的 28033 端口
iptables -t nat -A PREROUTING -p udp --dport 45000:48000 -j REDIRECT --to-ports 28033这两条命令没有持久化,如果 vps 关机或者重启,需要重新输入。
5 使用 cloudflare API token 申请泛域名证书
上文使用 3x-ui 自带脚本申请的是单域名证书(例如仅对 lax.example.com 生效)。如果后续新增子域名,就必须重复申请。
为什么推荐泛域名证书?
在后续配置中,节点如果开启 CDN 代理,域名就必须与 3x-ui 面板域名区分开(面板本身不能套 CDN)。使用泛域名证书(*.example.com),一个证书即可覆盖面板、直连节点及 CDN 节点等所有子域名,后续随开随用,省去反复签发的麻烦。
如果你只需要单节点且不打算配置 CDN,可直接跳过本节。
5.1 创建 cloudflare API token
首先,我们需要在你托管域名的 cf 账号上申请一个 API token

新建一个令牌

编辑区域 DNS

直接创建就可以了。按照最小化权限的思想,也可以让它只能编辑你使用到的域名

这个就是令牌了,只会显示一次,记得复制,不然要再创建一遍

5.2 申请泛域名证书
回到 VPS, 输入
x-ui会弹出一推菜单,输入21,开始申请泛域名证书
Do you confirm the information and wish to proceed? [y/n] [Default y]:
跟你讲了一下大致的流程,输入y
Input your domain here:
输入你的域名,注意,这里要输入的是根域名!假设我们上文输入的是lax.114514.xyz,这里要输入114514.xyz,才能申请这个根域名下的子域名。
Are you using a Cloudflare API Token or Global API Key? (t/g) [Default t]:
输入t
Input your token here:
输入我们刚刚创建的API token,回车后,它就会为这个根域名和所有的子域名申请域名证书了
Would you like to modify —reloadcmd for ACME? (y/n):
输入n
Would you like to set this certificate for the panel? (y/n):
输入y,把我们的面板域名证书替换为泛域名证书
[INF] Panel paths set for domain: 2019501.xyz
[INF] - Certificate File: /root/cert/114514.xyz/fullchain.pem
[INF] - Private Key File: /root/cert/114514.xyz/privkey.pem
Access URL: https://114514.xyz:36941/0GY2InB8AuEBpZ3KG0/
[INF] x-ui and xray Restarted successfully
申请成功,这里返回了域名证书的路径和面板的url地址。注意!这个url地址是无效的。因为我们并没有在cloudflare上为根域名添加解析,我也不建议大家这么做。继续用之前创建好的子域名访问面板即可。
6 隐藏 3x-ui 面板
本文的教程基于 3x-ui 面板搭建,它为我们带来了便利,通过可视化的方式快捷配置节点,但同时,你把域名暴露在公网上,也增加了服务器的暴露面。如果有人扫到了你的面板,那一眼就能看出来你在服务器上搭了梯子。我在扫邻居的域名的时候,真的扫出来了 3x-ui 面板,引以为戒。
本节介绍四种方式隐藏 3x-ui 面板,注意,它们是互斥的,选择一种即可。前两种方案不需要域名,后两种方案需要域名。
- SSH 隧道:这是一种极简且不依赖任何第三方服务的方案,只需将面板绑定在 127.0.0.1,利用现有的 SSH 通道将 VPS 端口映射到本地电脑访问,不需要域名。它的安全性极高,因为服务器除常规 SSH 端口外不需要开放任何端口。但缺点在于“防失联”能力薄弱,一旦服务器 IP 被墙导致 SSH 无法直连,面板也会随之无法直接打开,另外,每次访问面板都要建立 SSH 隧道,很麻烦。
- Tailscale 虚拟组网:这是一种基于 WireGuard 的纯内网访问方案,和 SSH 隧道类似,能让面板彻底关闭公网端口,实现近乎完美的隐形和防探测。即使 IP 被墙,也能走 Tailscale 官方的中继服务器,但是会比较卡,至少不会失联。也不需要域名,安全又便捷。
- Cloudflare Tunnel 内网穿透:该方案通过服务器主动向外部建立加密隧道来提供访问,同样无需开放任何公网端口,且能有效转移针对服务器的探测风险。它不仅安全性出色,还能利用出站连接无视入站封锁的特性,在 IP 被墙时完美“复活”面板,是兼顾防扫描与防失联的最优解。
- Cloudflare CDN 代理(回源规则):这是最传统的隐藏方式,通过 CDN 节点作为跳板来隐藏真实 IP,也能在服务器被墙时恢复网络访问。但它的致命缺陷在于服务器仍需向公网开放特定端口供 CDN 回源,极易沦为全网无差别扫描和主动探测的活靶子,安全性最差。
完成这一节具有如下的好处:
- 隐藏服务器IP与真实端口:前三种方法会关闭你的面板在公网上的连接,即使是第四种方法,也可以通过 cloudflare CDN 进行隐藏。
- 提升面板的抗封锁(防失联):后三种方案,即便你的 VPS 真实 IP 不幸被墙,由于访问面板和拉取订阅的流量经由 Cloudflare 或者 Tailscale 官方的中继服务器中转,你依然能够登录控制面板,添加基于使用 CDN 的备用节点进行“自救”,确保不至于彻底失联。第 7 节会讲述配置方式。
我个人比较喜欢第三个方案。方案三和方案四很相似,都经过了 cf 的中转节点,但方案三减少了暴露面,而且配置起来简单一点。方案一每次访问面板都要打 SSH 指令,最不方便。方案二则需要在本地设备上建立 wireguard 连接。电脑还好,能同时建立多条 VPN 连接,在手机上,安卓底层只允许一条 VPN 连接,会和你的梯子冲突,又没那么方便,自行抉择。
6.1 SSH 隧道
6.1.1 3x-ui 面板安装
回到这步来:
Choose SSL certificate setup method:
1. Let’s Encrypt for Domain (90-day validity, auto-renews)
2. Let’s Encrypt for IP Address (6-day validity, auto-renews)
3. Custom SSL Certificate (Path to existing files)
4. Skip SSL (advanced — behind reverse proxy / SSH tunnel only)
Note: Options 1 & 2 require port 80 open. Option 3 requires manual paths.
Note: Option 4 serves the panel over plain HTTP — only safe behind nginx/Caddy or an SSH tunnel.
Choose an option (default 2 for IP):
这次我们选择4,跳过域名绑定和证书申请
⚠ Panel will be installed WITHOUT SSL/TLS.
Login credentials and cookies will travel as plain HTTP.
Only safe when:
• A reverse proxy (nginx, Caddy, Traefik) terminates TLS for you, or
• You access the panel exclusively via SSH tunnel
Bind the panel to 127.0.0.1 only? (recommended — forces SSH tunnel / reverse-proxy access) [y/N]:
大意是,不申请证书,只能使用 http 协议,http 协议是明文传输,不安全,可能会泄露你的节点信息。3x-ui 建议我们在 vps 与本地机建立一条 ssh 隧道,数据只在隧道里传输,虽然依旧是使用 http 协议,但不会有泄露的风险。
我们采纳它的建议,使用 ssh 隧道,只监听本地地址。输入y
完成安装后,依旧会输入以下内容,可以看到它的 url 地址变成了本地地址,本来只能在 vps 上访问
═══════════════════════════════════════════
Panel Installation Complete!
═══════════════════════════════════════════
Username: KtxV5lfsGl
Password: tsM55DVL2q
Port: 36941
WebBasePath: 0GY2InB8AuEBpZ3KG0
Database: SQLite (/etc/x-ui/x-ui.db)
Access URL: http://127.0.0.1:36941/0GY2InB8AuEBpZ3KG0
API Token: a7DMH0LEq8sXBK0Ud5BdZLxqbMVJDrY1cAPlTHzS256A9sL2
═══════════════════════════════════════════
我们需要在本地机上建立一条 ssh 隧道,连接 vps,windows 可使用 cmd,手机可使用 termux
6.1.2 建立 SSH 隧道
-
使用密码建立 ssh 隧道
ssh -p 22 -L 36941:127.0.0.1:36941 user@server_ip参数分析:22是你登录 vps 用到的 ssh 端口,没有修改过的话,默认为 22;36941 是你设置的3x-ui 面板端口,user 是你的 vps 用户,一般为 root 用户,server_ip 是你 vps 的公网 ip
更具体的形式如下:ssh -p 22 -L 36941:127.0.0.1:36941 root@46.125.97.33请替换为你自己的vps的公网ip,回车输入密码即可
-
使用密钥建立 ssh 隧道
如果你已经禁用了ssh 的密码登录,并为 vps 配置了密钥,则使用以下格式的指令建立 ssh 隧道,同样,替换对应的参数,-i后面的路径参数为你存放私钥的文件路径
ssh -p 22 -i /path/to/your/private_key -L 36941:127.0.0.1:36941 user@server_ip
建立 ssh 隧道后,在浏览器访问即可。
6.1.3 导入订阅链接
同样,订阅链接也只能在本地上访问,这里提供两种方式,推荐方法一
- 方法一 直接复制节点信息
直接复制节点信息,导入到代理客户端,v2ray 支持对单节点的导入

- 方法二 建立ssh隧道
和访问3x-ui面板相似,访问订阅链接前,重新建立一条ssh隧道,命令格式如下,替换相应的参数,订阅端口默认用的是2096:ssh -p 22 -L 2096:127.0.0.1:2096 root@46.125.97.33
6.2 Tailscale 虚拟组网
这个方案其实类似于使用 SSH 隧道,不过要更加方便一点,它建立的是 WireGuard 连接。和 SSH 隧道一样,也不需要域名,对于没有域名的人来说,如果你觉得每次访问面板都要打一长串的 SSH 指令很麻烦,可以使用这个方案。就算你有域名,也可以考虑使用这个方案,它可以彻底关闭公网暴露。
6.2.1 Tailscale 安装
首先,我们需要在 tailscale 官网 https://tailscale.com/ 注册一个账号,免费账号有 100 台设备限制,完全够用。
然后,我们要在 VPS 上安装 tailscale
curl -fsSL https://tailscale.com/install.sh | sh安装完成后,启动 tailscale 服务
tailscale up它会弹出一个认证链接,你需要在浏览器打开,登录你的 tailscale 账号,把这个设备绑定到你的账号上。
完成后,VPS上会返回
Success.
在 VPS 上输入以下指令就可以查看分配给这台设备的内网 IP 了
tailscale ip -4服务器上已经配置好了,我们需要在本地上安装 tailscale 客户端,连接上这个虚拟内网。下载地址:https://tailscale.com/download
安装好后登录账号,把你的本地设备也加入到这个内网来。
可以 ping 一下试试,可以 ping 通就说明成功了。

6.2.2 3x-ui 面板安装
如果你已经安装了 3x-ui 面板,请无视此小节,使用你原来的方式登录面板,跳转到 6.2.3 节完成 3x-ui 面板的配置。
如果你还没有安装面板,继续完成安装
回到这步来:
Choose SSL certificate setup method:
1. Let’s Encrypt for Domain (90-day validity, auto-renews)
2. Let’s Encrypt for IP Address (6-day validity, auto-renews)
3. Custom SSL Certificate (Path to existing files)
4. Skip SSL (advanced — behind reverse proxy / SSH tunnel only)
Note: Options 1 & 2 require port 80 open. Option 3 requires manual paths.
Note: Option 4 serves the panel over plain HTTP — only safe behind nginx/Caddy or an SSH tunnel.
Choose an option (default 2 for IP):
输入4,跳过证书申请
⚠ Panel will be installed WITHOUT SSL/TLS.
Login credentials and cookies will travel as plain HTTP.
Only safe when:
• A reverse proxy (nginx, Caddy, Traefik) terminates TLS for you, or
• You access the panel exclusively via SSH tunnel
Bind the panel to 127.0.0.1 only? (recommended — forces SSH tunnel / reverse-proxy access) [y/N]:
这里输入 N,不能让它只监听 127.0.0.1,我们需要通过 tailscale 的内网 IP 访问面板。tailscale 建立的 WireGuard 连接和 SSH 隧道一样,只有你能访问,是绝对安全的。
安装完成后,会返回配置信息
═══════════════════════════════════════════
Panel Installation Complete!
═══════════════════════════════════════════
Username: KtxV5lfsGl
Password: tsM55DVL2q
Port: 36941
WebBasePath: 0GY2InB8AuEBpZ3KG0
Database: SQLite (/etc/x-ui/x-ui.db)
Access URL: http://你的公网ip:36941/0GY2InB8AuEBpZ3KG0
API Token: a7DMH0LEq8sXBK0Ud5BdZLxqbMVJDrY1cAPlTHzS256A9sL2
═══════════════════════════════════════════
6.2.3 3x-ui 面板配置
登录上 3x-ui 面板后,把面板监听 IP 改成你的内网 IP,这样就只能通过内网访问你的面板了。
同样,把订阅链接的监听 IP 也改一下。

重启后,确保你本地建立了 WireGuard 连接,使用 http://你的内网IP:面板端口/面板路径/ 形式的链接登录面板。
同样,你在 3x-ui 面板复制的订阅链接也会失效,把订阅链接里的域名或者 ip 的部分改成你的内网 IP
另外,你可以通过以下指令查看内网里其它设备的连接情况:
tailscale status
需要注意的是,如果这里写的是direct,说明两台设备走的是直连,速度很快。如果是derp,则是走的中继服务器,很卡。
有两种情况会走 derp :
- 服务器 IP 被墙了,直连不可用
- 你的防火墙没有放行 tailscale 的连接端口,请在 VPS 输入:
ufw allow 41641/udp
这个方案在电脑上很无感,强烈建议没有域名的使用这个方案,比打 ssh 命令方便多了。
6.3 Cloudflare Tunnel 内网穿透
这个方案需要在服务器上运行 cloudflared 守护进程,VPS 从内网向 Cloudflare 节点发起出站连接建立加密隧道。3x-ui 依然监听 127.0.0.1,外部流量通过 Cloudflare 分配的域名进入隧道到达你的面板。可以看到,你的面板没有暴露到公网,只有 Cloudflare 在和你的源站连接。
6.3.1 前置准备
如果你已经为面板绑定了域名证书,需要先移除,否则会证书不匹配。
输入 x-ui,打开菜单
x-ui输入20,进入证书管理
1. Get SSL (Domain)2. Revoke & Remove3. Force Renew4. Show Existing Domains5. Set Cert paths for the panel6. Get SSL for IP Address (6-day cert, auto-renews)0. Back to Main MenuChoose an option:
这里输入1可以重新申请证书,当然你也可以通过第5节的方式申请。我们现在要移除证书,输入2
Please enter a domain from the list to revoke and remove the certificate:
输入你要移除的证书的域名即可
如果你后续需要证书配置节点,可以再重新申请一遍证书,但是,在最后一步,它问你要不要为面板绑定这个证书,输入n,配置节点的时候我们手动输入证书路径即可。
正式开始配置,你还需要一个托管在 Cloudflare 上的域名。不需要 DNS 记录。如果你原来已经配置了一条 A 记录指向服务器公网 IP,把它删了,减少服务器暴露面。
6.3.2 建立隧道
新建一条隧道,名称随意

这里 cloudflare 官方给出了安装指令,按顺序粘贴到 VPS 终端上执行即可。注意,第一个复制框里面其实有很多条指令,你需要一条条执行。

第一个复制框里的指令:
导入安全密钥
sudo mkdir -p --mode=0755 /usr/share/keyringscurl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null添加官方软件源
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list安装 cloudflared
sudo apt-get update && sudo apt-get install cloudflared第二个复制框里的指令,绑定隧道并注册为后台服务:
sudo cloudflared service install 你的token不确定这些指令后续会不会变动,以你的为准。
安装成功后,点继续

添加一条路由

选择已发布的应用程序

选择一个托管在cf上的域名,填写子域。服务url填写 http://localhost:面板端口

添加路由后,你就可以通过 https://子域.域名/面板路径/ 的形式访问你的面板了。可以看到,使用这个方案可以隐藏面板的端口号,形式上比较美观。
6.3.3 3x-ui 面板配置
登录面板后,把面板监听端口改为本地,不暴露到公网上。

把订阅监听端口也改到本地

需要注意的是,从 3x-ui 面板复制的订阅链接是不可用的,我们要为订阅连接也新建一条路由,起不同的子域名,同样的,url填写 http://localhost:订阅端口

假设我们从 3x-ui 面板复制的订阅链接是:
我们需要将其改造为
6.4 使用 Cloudflare 的回源规则进行高位端口 CDN 代理
之前提到过,面板使用了高位端口,我们就不能享受cloudflare的CDN代理带来的安全性。本小节介绍了如何使用cf的回源规则,使用https://你的域名/AKWpfi8YoVv8V1BHg4 这种标准形式的链接,访问3x-ui面板以及订阅链接。
原理大致为,在开启cf的CDN代理的情况下,我们会以443端口访问cf的边缘服务器,由cf的回源规则,通过路径匹配,转发到实际的高位端口上,访问你的服务器。
其实方案三和方案四虽然底层原理不同,但大致思路是一样的,都是先访问 cf 服务器,由cf 中转。但是方案四还是会把面板端口暴露在公网上,更推荐方案三。
不过,方案二需要在本地设备和 vps 上都安装 tailscale 客户端,方案三需要在 vps 上安装 cloudflare 守护进程,多少会增加系统占用。也许,方案四的唯一优势就是不会增加额外的系统开销吧。
首先,你的域名要托管在cf上,并通过A记录指向你的服务器ip,1.2节已介绍过,不做赘述。不一样的是,这次,我们需要打开CDN代理,回源规则需要在CDN下才能生效。

加密模式改为完全(严格)

6.4.1 配置 3x-ui 面板
接下来,我们需要进行3x-ui面板的配置,因为已经开启的CDN代理,没办法通过域名连接上,我们使用SSH隧道的方式访问,或者,你也可以先把CDN代理关了,配置完再打开。
ssh -p 22 -L 36941:127.0.0.1:36941 root@46.125.97.33这里需要记下我们面板的端口号和URL路径
这里可以把面板监听域名填上你的域名,这样子,3x-ui 面板就无法通过 IP 访问了,可以防止 IP 盲扫。但是,包括本地的 127.0.0.1 都不能访问你的面板!配置出错以后,你甚至不能通过 SSH 隧道排查问题,只能重装面板。所以,一定要保证你可以通过域名访问面板,再把它填上。
订阅设置部分,同样建议修改为高位端口和复杂路径

如果你需要使用clash订阅链接,也可以把clash的订阅路径改一下

面板端口 36941
面板路径 /0GY2InB8AuEBpZ3KG0/
订阅端口 35691
订阅路径 /aiqdDvyfwqefeFoi2r2/
clash订阅路径 /quiDQwyfv1aw4/
记一下我们上面设置的端口和路径,回到cloudflare的网页进行回源规则的设置。
6.4.2 配置回源规则
我们先设置面板的回源规则,规则名随便填

再设置订阅链接的回源规则

在开启了CDN代理和正确配置了回源规则以后,我们已经可以通过https://你的域名/0GY2InB8AuEBpZ3KG0/ 访问3x-ui面板了。如果访问失败,依旧可以通过SSH隧道建立的连接查看哪里配置有问题。注意,末尾的斜杠不可省略。

还有需要注意的是,你在3x-ui面板复制的订阅链接依旧是带端口号的,因为它不满足我们设置的回源规则,会无法访问,请手动删去端口号。
6.5 小结
至此,3x-ui 面板的安装部分已经结束了。为了写这篇教程,我安装了很多次 3x-ui 面板,尝试过很多方式。个人感觉,最安全的安装流程是:不使用域名安装 3x-ui,让它只监听127.0.0.1 -> 配置 cloudflare tunnel -> 登录 3x-ui 面板配置 reality 直连节点 -> 使用 cloudflare API token 申请泛域名证书(不要绑定面板,放在vps上就可以了)。
这样子,全程面板都没有暴露在公网上,先用着直连节点,就算 IP 被墙了,反正 VPS 上有域名证书,再去 cloudflare 添加一条 A 记录,配置使用 CDN 的节点也不迟。
7 使用 Cloudflare CDN 拯救被墙的 IP
在配置得当下,VLESS+Reality 的节点具有极强的抗封锁能力。但在敏感时期,依旧有被墙的可能。这时,一个使用 CDN 的备用节点可以保证你不失联。源服务器会将所有请求的来源视为 Cloudflare 的 IP 地址,而不是最终用户的 IP 地址,以绕过封禁。
有两种情况,你需要使用 CDN 搭建节点:
- VPS IP被墙,直连不可用
- VPS 线路很差,需要 CDN 提速
CF的CDN在vps线路已经很好的情况下,就是个减速器,还是建议使用直连。我都买线路机了,套 CDN 不是白买了吗(
7.1 节点配置
和上文一样,需要一个托管在 CF上的域名,添加一个A记录,起一个不同的子域名,开启 CDN 代理,和面板区分开。
为什么需要两个不同的子域名?
- 面板域名(直连): 由于 3x-ui 面板默认使用高位端口,Cloudflare 等 CDN 不支持代理,因此必须保持直连(灰云/DNS Only)。
- 节点域名(走 CDN): 用于代理流量,需开启 CDN 代理(橙云/Proxied),并搭配支持 CDN 的标准端口(如 443、8443 等)。
SSL 证书如何解决?单域名证书无法跨子域名使用,解决办法有两个:
- 方案 A(推荐): 按照第 5 节直接申请泛域名证书,面板与节点域名共用一张证书。
- 方案 B(独立申请): 专门为节点域名再申请一张单域名证书:
- 终端执行 x-ui 进入管理菜单;
- 依次选择:20 (证书管理) -> 1 (新增证书);
注意: 申请完成后,询问是否设为面板证书时输入 n,并记录生成的证书路径,后续填入节点配置即可。
回到3-ui面板,添加一个新节点,自定义分享地址选择开启了 CDN 代理的子域名,因为使用了 CDN 代理,这里必须使用CF免费计划支持的端口

以下是CF支持的端口,从HTTPS端口里面选一个即可。注意,两个节点不可以使用同一个端口
如果你有看过上文的使用回源规则代理高位端口,这里也可以以此类推,把 443 端口回源到节点的高位端口上,请自行探索,不作演示。但感觉也不是很有必要?都用 CDN 了,也没必要执着于用 443 端口伪装了。
传输协议选择xhttp,主机选择开启了 CDN 代理的子域名,路径随便写个复杂一点的

安全选择TLS,SNI 选择开启了 CDN 代理的子域名,ALPN 一定要包含 h2。如果你申请了泛域名证书,且CDN 代理的子域名和面板的子域名属于同一个域名,直接获取面板的证书即可。

节点配置完成,记得添加到客户端的出站

导入到客户端进行测试,效果还行,但延迟不是很稳定,有比较大的波动。

7.2 使用优选 IP 加速 CDN 节点
如上文所言,套了 CDN 后,我们会先访问 CF 的 IP,这个 IP 是自动分配的,不一定是最优的。我们可以提取 Cloudflare 官方公布的所有 IP,在本地测试,选出延迟和下载速度优秀的“优选 IP”。
优选 IP 有两种获得方式,一是直接用别人整理好的,二是自己用脚本测试。在使用 CF 搭建梯子的教程里,已经有很多整理好的优选 IP 了,本文介绍第二种,手动测试。
我们需要使用 CloudflareSpeedTest,访问https://github.com/XIU2/CloudflareSpeedTest/releases 下载和你系统对应的版本。这个脚本需要放在本地,用本地网络环境测试,过程中请关闭网络代理。
下载完后解压,双击运行这个.exe文件,即可开始测试。

测试完成以后会输出这样一个表格,这些IP地址就是优选IP,按延迟升序排序,我们选择前十个即可

这是上文创建的套了CDN的节点,我们把它复制十份
![]()
修改节点信息

我们就得到了十个套了优选 IP 的节点
可以看到有几个节点的速度还是不错的,没有减速太多。如果以后我的VPS IP被墙了,我就可以使用这几个套了 CDN 的节点。
另外,如果使用的是 clash 客户端,可以直接改 3x-ui 里的自定义分享地址,把它换成优选 IP,效果和在 v2ray 里改是一样的。缺点是只有一个节点。也许也可以改 clash 配置文件?但那就比较复杂了。

8 使用 Cloudflare Warp 拯救 “送中” 的 IP
8.1 使用 warp 落地,路由规则分流
首先,什么是送中呢?如果你在代理过程中,不小心上传了真实的物理信息,这个 IP 就会被标记为实际位置在中国。对谷歌系的应用影响比较大,比如,你会用不了 gemini,唯一的好处是,youtube 可以正常使用,甚至没有广告,相当于白嫖 youtube premium (
并不推荐大家主动送中,弊大于利,而且会影响你的邻居,我的一个 IP 就是因为邻居而送中了。
后文会介绍使用线路机中转,使用 IP 质量较好的落地机解锁 AI 和流媒体的方案。但是,如果只是因为 IP 送中就专门买一台落地机,也不是很有必要。对大多数人来说,IP 送中唯一的影响就是用不了 gemini。本文介绍使用免费的 cloudflare warp 作为落地,通过域名分流解锁 gemini。
使用 3x-ui 可以快速创建一个 warp 账号
这样就可以了,你可以测试一下看看,cloudflare 会给你提供和你 vps 地理位置相近的 IP,我们使用它作为落地

创建一条路由规则,出站标签选 warp,域名填写你需要分流到 warp 上的域名。这里我填写的是 geosite:google-gemini,意思是所有与 gemini 相关的域名。如果你希望所有 google 的域名都走分流,也可以填写 geosite:google,但是 youtube 要看广告了(
同样,如果你有其它需要分流的域名,以逗号分隔。
保存以后,配置已经生效了,所有符合路由规则的域名都会走 warp。
又或者,你觉得你的 VPS 的 IP 实在是太烂了,连 cf 的都不如。你可以把所有的出站都改到 warp 上

8.2 番外篇 —— 把 youtube 分流到送中的 ip
人类的物种总是多样的,如果你的邻居就是想用脚本把整段 ip 送中,也没什么办法。事已至此,除了等好心人把 ip 拉回来以外,我们也可以把 youtube 分流到送中的 ip 上,体验无广。
本节仅适用于拥有 IPv4 + IPv6 双栈 的 VPS。核心原理是:当你的 VPS 其中一个协议栈(如 IPv6)被判定“送中”,而另一个协议栈(如 IPv4)依然正常时,我们可以利用分流机制,精准让 YouTube 走送中栈实现免广告,其余流量走正常栈解锁 AI 等受限服务
大致流程的上面是类似的,创建一个使用 ipv4/v6 的出站,再通过路由规则分流 youtube
可以先跑一个 nq,看看是 ipv4 还是 ipv6 送中了。
只用测 ip 质量
bash <(curl -sL https://run.NodeQuality.com)如图,我这个就是 v6 送中了,v4 没送

添加一个出站,如果是 v4 送中了,策略就选 UseIPv4;v6 送中了,策略就选 UseIPv6

添加一个路由规则,域名填 geosite:youtube,分流 youtube 相关的域名,记得保存生效

结束,如果分流正确,你的 youtube 就没有广告了
9 Reality 偷取“邻居”的域名证书
本文配置的协议是 vless+reality,它不需要你配置自己的域名和证书,而是直接“借用”其他真实存在的网站(即你偷的域名)。基本上,我们直接使用大厂的域名已经具有很高的抗封锁能力。但是,大家都在使用大厂的域名,反而使得这成为了一个代理特征,因此,偷“邻居”,即和你处在同一网段或物理距离较近的域名,一定程度上可以减少被封锁的风险。
私以为,就算直接使用大厂的域名,封锁的概率也很低,大家都是这么做的,不必追求完美。因此,这一小节更适合给喜欢折腾的人看。
本小节使用了两个脚本:
- RealiTLScanner:安装在本地电脑上,用于扫描域名,即你的vps周围有哪些可用的域名
- Reality Checker:安装在vps上,用于对你扫出来的域名进行检测的打分,筛选出最适合用于伪装的域名。
9.1 使用 RealiTLScanner 盲扫域名
首先我们开始安装RealiTLScanner,新版本的RealiTLScanner不适配Reality Checker,我们选择旧版本的。打开这个网址:https://github.com/XTLS/RealiTLScanner/releases/tag/v0.2.1
下载这个.exe文件,放到一个文件夹内。可在路径输入cmd回车快速打开命令行界面

在命令行窗口输入以下指令,开始扫域名
RealiTLScanner-windows-64.exe -addr server_ip -port 443 -thread 100 -timeout 5 -out file.csv请把server_ip替换为你vps的ip,file.csv为输出的表格名称,多次运行需要重命名,否则会覆盖原表格。
需要注意的是,这个脚本的本质是从你提供的IP段开始,进行盲扫,看看这个IP下有没有域名,有就写入csv表格,没有就跳过,继续扫。因此,你可能看到命令行窗口很长时间都没有动,不一定是卡住了,而是它扫了很多ip都没有结果,脚本没有设置终止条件,请适时输入ctrl+c停止脚本。
我们结束脚本的运行后,得到一个csv文件,里面记录了扫出来的域名,需要把它上传到vps,进行检测。
9.2 使用 Reality Checker 筛选域名
一个适合reality伪装的域名需要具有以下特征:
- 支持 TLS1.3
- 支持 X25519
- 支持HTTP/2 (H2)
- 域名和 SNI 匹配
- 最好没有CDN代理
- 延迟低
一个个手动筛选显然不现实,需要Reality Checker进行批量检测
脚本作者提供了两种架构的版本,打开你的vps的终端,输入以下指令查看系统架构
uname -m如果输出的是x86_64,请执行以下安装指令:
wget https://github.com/V2RaySSR/RealityChecker/releases/latest/download/reality-checker-linux-amd64.zip如果输出的是ARM64,则执行以下安装指令:
wget https://github.com/V2RaySSR/RealityChecker/releases/latest/download/reality-checker-linux-arm64.zip下载完成后,得到压缩包文件,需要解压(如果是ARM64请自行替换后缀):
unzip reality-checker-linux-amd64.zip添加执行权限
chmod +x reality-checker需要把csv文件和脚本放到同一个目录下
执行以下命令开始检测:
./reality-checker csv file.csv会输出类似这样的检测报告:
建议拉到最下面选推荐度高的,打开看看,手动筛选一下。至少不要选带博彩或者小广告的emm
按理说,选择云盘或者视频网页会比较合适?毕竟代理的流量会比较大。
选择好域名以后,我们可以检测一下目标域名是否和我们的 VPS 属于同一个ASN(自治系统编号)
输入一下指令,获得 VPS 的 ASN
curl ipinfo.io/你的VPS IP我们以 CF 的服务器为例,会得到以下结果
{
“ip”: “1.1.1.1”,
“hostname”: “one.one.one.one”,
“city”: “Brisbane”,
“region”: “Queensland”,
“country”: “AU”,
“loc”: “-27.4679,153.0281”,
“org”: “AS13335 Cloudflare, Inc.”,
“postal”: “9010”,
“timezone”: “Australia/Brisbane”,
“readme”: “https://ipinfo.io/missingauth”,
“anycast”: true
}
org 后面的内容就是这个 IP 的 ASN
ping一下目标域名,得到域名背后的 IP
ping 目标域名同样,获得目标 IP 的 ASN, 对比是否和你的 ASN 一致,如果 ASN 出现了 Cloudflare,千万不要用。
curl ipinfo.io/目标 IP一般来说是一致的,因为 RealiTLScanner 是从你的 IP 段开始盲扫。
回到3x-ui面板,重新配置节点的目标域名
这次我们手动输入筛选出来的域名,可以看到符合条件,延迟也很优秀。
保存更改。
9.3 CDN 自动检测脚本
上文提到过,我们的目标域名最好没有 CDN 代理,这里主要指的是 CF CDN。本节介绍为什么不能使用套了 CF CDN 的域名,以及如何防范它。
折腾过 CF 优选的可能知道,除了官方提供的优选 IP 外,还有一种叫做反代 IP,它并不是 CF 官方的 IP,而是其他人搭建的、且配置存在疏漏的服务器,被用作了你和 CF 之间的中转服务器,如果服务器有优化线路,那就可以起到提速的作用。
有以下情况,会让你的服务器沦为反代 IP:
- 在服务器上安装了 Nginx、Caddy 等反向代理服务,让这台机器将收到的请求转发给 Cloudflare,并且没有正确检验域名,导致任意域名请求,都被服务器无条件转发给了 Cloudflare。
- reality 偷取了使用 CF CDN 的域名。当扫描器探测你的 IP 时,reality 的回落机制会将这些非法探测流量原封不动地送进 Cloudflare 的网络,导致你的带宽被白嫖。
本节我们主要防范的是第二种情况,也是最有可能发生的情况。
我们使用邻居的域名,虽然带来了很强的伪装性,但也存在以下问题:
- 邻居域名或服务器可能到期
- 邻居可能一时兴起,给域名套上了 CF CDN
如果是第一种,最多只是你的梯子突然用不了,去 3x-ui 面板换个目标域名就行了。如果是第二种,就很恐怖了,你的服务器会在不知不觉间沦为反代服务器,被很多人白嫖带宽和流量。
虽然我们在 9.2 节,我们对域名进行了详细的检查,但也只能保证,在扫描的时候,域名没有套上 CDN,以后会怎么样,只有你的邻居知道。
因此,这一节提供了一个脚本,没隔一小时自动执行一次,检测域名有没有套 CF CDN。如果你偷的是大厂域名,大厂一般会使用自己的 CDN,不会用 CF 的,可以无视此节。
首先。创建一个脚本
nano /root/check_reality.sh把以下内容复制进去:
#!/bin/bash
# 使用 Bash 数组定义多个目标域名 (用空格或换行隔开即可)TARGET_DOMAINS=( "neighbor-a.com" "neighbor-b.net" "neighbor-c.org")
DANGER_DOMAINS="" # 用于收集触发警报的域名
# 1. 遍历所有域名for domain in "${TARGET_DOMAINS[@]}"; do # 使用系统自带的 getent 命令将域名解析为 IP RESOLVED_IP=$(getent hosts "$domain" | awk '{print $1}' | head -n 1)
if [ -z "$RESOLVED_IP" ]; then echo "$(date "+%Y-%m-%d %H:%M:%S") - [$domain] 无法解析到 IP,跳过本次检查" continue fi
# 请求 ipinfo.io 获取该 IP 的 ASN 和组织信息 ORG_INFO=$(curl -sL "https://ipinfo.io/$RESOLVED_IP/org")
if [ -z "$ORG_INFO" ]; then echo "$(date "+%Y-%m-%d %H:%M:%S") - [$domain] API 查询失败 ($RESOLVED_IP),跳过" continue fi
# 防止网络断开或接口限制导致查询失败 if [ -z "$ORG_INFO" ]; then echo "$(date "+%Y-%m-%d %H:%M:%S") - [$domain] 查询失败,跳过本次检查" continue fi
# 2. 匹配 Cloudflare 特征 (忽略大小写匹配 AS13335 或 Cloudflare) if echo "$ORG_INFO" | grep -iqE "AS13335|Cloudflare"; then echo "$(date "+%Y-%m-%d %H:%M:%S") - [$domain] ⚠️ 触发警告!归属: $ORG_INFO" # 记录危险域名,%0A 用于在 Telegram API 中安全换行 DANGER_DOMAINS="$DANGER_DOMAINS%0A- $domain ($ORG_INFO)" else echo "$(date "+%Y-%m-%d %H:%M:%S") - [$domain] 检测正常。归属: $ORG_INFO" fidone
# 3. 判断是否需要熔断并发送通知if [ -n "$DANGER_DOMAINS" ]; then
# 停机止损,立即切断流量 x-ui stop
# 构造本地日志内容 (将变量里的 %0A 替换为空格,保持本地日志单行整洁) CLEAN_DOMAINS="${DANGER_DOMAINS//%0A/ }" echo "$(date "+%Y-%m-%d %H:%M:%S") - ⚠️ 严重警告:检测到目标域名套用 CDN!受影响名单:$CLEAN_DOMAINS" echo "$(date "+%Y-%m-%d %H:%M:%S") - 发现异常,已自动执行 x-ui stop 停止服务。"
# ==================================================================== # ▼▼▼ Telegram 推送模块 (如果需要 TG 通知,请将以下代码取消注释,并填入你自己的机器人TOKEN和群组ID) ▼▼▼ # ====================================================================
# TG_BOT_TOKEN="你的机器人TOKEN"# TG_CHAT_ID="你的频道或群组ID"
# TG_MESSAGE="⚠️ 严重警告:检测到 REALITY 目标域名已套用 Cloudflare CDN!#受影响名单:$DANGER_DOMAINS
#系统已自动执行 x-ui stop,3x-ui 面板及 Xray 核心均已停止运行以防止流量滥用。请通过 SSH 登录服务器执行 x-ui start 恢复服务,更换 dest 域名!"
# curl -s -X POST "https://api.telegram.org/bot$TG_BOT_TOKEN/sendMessage" \ -d "chat_id=$TG_CHAT_ID" \ -d "text=$TG_MESSAGE"
# ==================================================================== # ▲▲▲ Telegram 推送模块结束 ▲▲▲ # ====================================================================
else echo "$(date "+%Y-%m-%d %H:%M:%S") - 所有域名检测完毕,均未发现 Cloudflare CDN。"fi输入 ctrl + o 保存,回车,ctrl + x 退出
脚本讲解:
- 需要自行修改的地方为TARGET_DOMAINS,替换成你自己选择的目标域名。
- 支持多域名,如果你有多台 VPS,偷了不同的目标域名,可以集中在一个脚本检测。但是!如果检测出其中一个域名使用了 CDN,只会停止运行脚本的 VPS 上的 3x-ui。你需要再看看日志,锁定是哪个域名出了问题,及时更换。
- 检测出 CDN 后,会停止 VPS 上的 3x-ui,你需要先登录上服务器,运行 x-ui start 恢复服务,更换目标域名。
- 有 tg 消息推送模块,默认是注释起来关闭的。如有需要,去申请一个 tg 机器人,获取机器人token,拉到你的消息推送频道,获取频道 ID,tg 消息推送还挺好用的,效果预览:

脚本写好了,我们需要给它可执行权限:
chmod +x /root/check_reality.sh可以先手动执行一下,看看有没有问题:
/root/check_reality.sh设置定时任务:
crontab -e如果是第一次运行,会问你需要使用的编辑器模式
Select an editor. To change later, run ‘select-editor’.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]:
输入 1 即可
把以下表达式粘贴进去
0 * * * * /root/check_reality.sh >> /var/log/check_reality.log 2>&1保存后退出
这个 cron 表达式会每一小时执行一次,日志存放在/var/log/check_reality.log
如果以后有域名套了 CDN,你可以输入以下指令排查日志,看看具体是哪个域名:
cat /var/log/check_reality.log题外话:这一节其实是后面补上的,因为最近“优选小鸡”太猖狂了。我个人并不喜欢这种损人利己的事,所以这篇教程也不会教你们怎么去找反代 IP。不过,就算你用我也不会说什么,毕竟是机主自己没有配置好导致的。所以我也希望大家不要让自己的服务器被白嫖,保护好自己的服务器。
10 中转
如果我们有两台vps,一台线路较好的,我们用来作为中转机,另一台ip质量较好,作为落地机。我们希望流量先经过中转机,再由中转机转发到落地机。有两种实现方式:
- 端口转发:流量经过你的中转机后,直接转发到落地机。你需要在中转机上安装端口转发工具,在落地机上配置代理节点。优点是性能强,延迟损耗最低。而且,如果你以后有多台中转机,你只用配置端口转发即可,统一转发到落地机进行代理,不需要重复安装 3x-ui,比较方便。
- 链式代理:流量经过代理协议进入你的中转机,再经过另一个代理协议代理到你的落地机,最后由落地机代理你真正的网络请求。可以看到,它多套了一层代理,性能上有损耗。而且需要你的中转机和落地机都配置代理节点。好处是分流方便,可以在链式的过程中进行分流。而且比较解耦,代理节点和落地节点可以两两组合。
因作者没有分流的需求,本小节介绍第一种,使用realm进行端口转发。关于链式代理,提供一个简单的思路,中转机上安装 3x-ui,配置 reality 节点,落地机上可以安装 3x-ui,也可以选择其它轻量一点的内核,配置 shadowsocks 节点,使用代理客户端,比如 clash verge,进行链式代理。
需要注意的是,无论是端口转发还是链式代理,都是由你的中转机过墙,被墙的风险都集中在你的中转机上。
10.1 在中转机上安装 Realm
这里我没有使用原始的realm,而是使用一个带有可视化界面的脚本,方便上手。
输入以下指令:
wget -qO- https://raw.githubusercontent.com/zywe03/realm-xwPF/main/xwPF.sh | sudo bash -s install安装完成后,输入pf即可进入交互界面
请选择操作:
1. 一键导出/导入配置
2. 添加新配置
3. 编辑现有规则
4. 删除配置
5. 启用/禁用中转规则
6. 负载均衡管理
7. 开启/关闭 MPTCP
8. 开启/关闭 Proxy Protocol
0. 返回主菜单
输入2,添加一个端口转发配置
=== 添加新转发配置 ===
请选择新配置的角色:
[1] 中转服务器
[2] 服务端服务器 (解密并转发)
解密并转发用于一方发送一方接收的场景如:隧道,MPTCP,Proxy Protocol等
输入1
=== 中转服务器配置(不了解入口出口一般回车默认即可) ===
全部回车即可
多端口使用,逗号分隔(回车随机端口)
请输入本地监听端口 (客户端连接的端口,nat机需使用分配的端口):
监听端口设置为: 23122
这是你在中转机上用于转发的端口,会用到,请记下它。如果你在中转机上配置了防火墙或者安全组,记得放行这个端口。
=== 出口服务器信息配置 ===
出口服务器的IP地址或域名:
输入你落地机的ip地址
出口服务器的监听端口(多端口使用,逗号分隔):
输入你在落地机上配置的节点的端口号,以这个节点为例,端口号是443

请选择传输模式:
[1] 默认传输 (不加密,理论最快)
[2] WebSocket (ws)
[3] TLS (自签证书,自动生成)
[4] TLS (CA签发证书)
[5] TLS+WebSocket (自签证书) [6] TLS+WebSocket (CA证书)
请输入选择(回车默认1) [1-6]:
默认即可,我们的数据已经是经过落地机上的协议加密的,没必要再套一层
中转机上的配置已经完成。都折腾中转了,相信你已经在落地机上配置好了节点,或者知道怎么配置。如果不清楚怎么做,可以回到文章开头的节点配置部分看看。
10.2 在代理客户端上完成中转配置
接下的操作我以v2rayN作为演示,手机可以使用v2rayNG,操作大致相似
这是落地机上配置的直连节点,我们左键点击它,克隆一份
现在我们得到了两个完全一样的节点,我们保留最上面节点不动,作为直连节点,修改下面节点的信息,让它通过中转机进行流量转发。
假设46.125.97.33是我们落地机的ip,104.111.86.211是中转机的ip,修改后的节点配置如下:
我换成真实的节点测试了一下,亚太转美西还行,德国转美西就有点爆炸了。

11 分流
我有一个低延迟的香港节点,但是它用不了AI。和一个ip质量较好的美西节点,但延迟偏高。我希望日常使用香港节点,访问AI时自动切换到美西节点,我们可以通过分流实现。
本人只有使用AI分流的需求,借助v2ray的路由设置即可简单实现,更复杂的分流规则本文不涉及。
这里提供一个AI域名的合集:
ai.azure.com,ai.google.dev,alkalimakersuite-pa.clients6.google.com,api.githubcopilot.com,api.jetbrains.ai,auth.grazie.ai,chat.openai.com.cdn.cloudflare.net,codewhisperer.us-east-1.amazonaws.com,copilot.microsoft.com,gateway.ai.cloudflare.com,generativelanguage.googleapis.com,makersuite.google.com,openai-api.arkoselabs.com,openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net,openaicomproductionae4b.blob.core.windows.net,production-openaicom-storage.azureedge.net,servd-anthropic-website.b-cdn.net,ai.com,ai21.com,ai21labs.com,aiplatform.googleapis.com,ampcode.ai,anthropic.com,artbreeder.com,augment.dev,augmentcode.com,bard.google.com,business.gemini.google,cerebras.ai,character.ai,chatgpt.com,chatgpt.livekit.cloud,civitai.com,claude.ai,claude.com,clipdrop.co,codeium.com,cohere.ai,cohere.com,copy.ai,cursor.com,cursor.sh,deepinfra.com,deepmind.com,deepmind.google,descript.com,diabrowser.ai,dreamstudio.ai,elevenlabs.com,elevenlabs.io,exa.ai,fal.ai,fireflies.ai,fireworks.ai,gemini.google,gemini.google.com,generativeai.google,githubcopilot.com,grammarly.com,grok.com,groq.com,hf.co,huggingface.co,ideogram.ai,inflection.ai,jasper.ai,kaiber.ai,kilo.ai,kilocode.ai,krea.ai,lambda.ai,langchain.com,langsmith.com,leonardo.ai,llamaindex.ai,lovart.ai,luma.ai,manus.ai,manus.im,manuscdn.com,meetgeek.ai,meta.ai,midjourney.com,mistral.ai,murf.ai,oaistatic.com,oaiusercontent.com,openai.azure.com,openai.com,openaiapi-site.azureedge.net,openaicom.imgix.net,opencode.ai,openrouter.ai,opncd.ai,otter.ai,perplexity.ai,perplexity.com,phind.com,pi.ai,pika.art,playgroundai.com,poe.com,pplx.ai,qpoe.com,quillbot.com,reka.ai,replicate.com,replit.com,respeecher.com,runwayml.com,rytr.me,stability.ai,sudowrite.com,suno.ai,supermaven.com,tabnine.com,together.ai,udio.com,voice.ai,watsonx.ai,windsurf.ai,wordtune.com,writesonic.com,x.ai,you.com设置好分流规则后,当我们访问这些域名时,会自动切换到设置好的节点
11.1 Windows使用v2rayN
选择你使用的规则集双击,我喜欢用默认的绕过大陆
为这个规则集添加规则
别名随便填,点击选择配置选择你需要把这些域名分流到哪些节点,Domain填写你需要分流的域名
点击确定

11.2 安卓使用v2rayNG
操作大体相同
添加路由
设置备注和域名
选择出站节点,保存

12 提升服务器安全性
其实,这部分的内容应该放到文章开头,每入手一台新服务器,都应该先进行服务器安全的加固。但想来,本文的重点内容是搭建 3x-ui 面板,更倾向于用可视化的方式快捷搭建网络代理。如果新人一上来看到的是繁杂的服务器配置,难免会有些劝退。于是,我把这部分内容放到最后,供有需要的人查看。
本节按照以下流程,逐步提升服务器的安全性。你可以按照需要,选择性的进行配置。推荐完成前两部分的内容,可以极大提升安全性。
- 修改 SSH 默认端口,配置 SSH 密钥登录,禁用密码登录
- 配置 UFW 防火墙
- 配置 Fail2ban
12.1 修改 SSH 默认端口,配置 SSH 密钥登录,禁用密码登录
注意!在配置这一小节的所有内容时,都不要关闭当前连接!新开一个终端窗口,确保新的登录方式可用,再关闭旧连接,否则你可能被自己锁住
12.1.1 修改修改 SSH 默认端口
默认 22 端口每天都会被恶意扫描,改成随机端口可以降低被破解的风险
打开 SSH 的配置文件
nano /etc/ssh/sshd_config可按 ctrl + w 搜索 #Port ,快速定位。把默认的 #Port 22 改成:
Port 36981即取消注释,换成高位端口。
保存后重启 SSH 服务
systemctl restart sshd12.1.2 配置 SSH 密钥
如果你设置的密码比较简单,容易被破解,而密钥几乎不可能被暴力破解。
我们在windows本地就可以生成一个密钥对,它分为公钥和私钥。公钥相当于是一把锁,安装在服务器上,我们只能以对应的私钥连接服务器。千万不要泄露你的私钥,相当于泄露密码。
首先,我们需要在windows本地生成一个密钥对,打开cmd,输入:
ssh-keygen -t ed25519 -C "your_email@example.com"参数分析:-t 表示加密方式, -C表示备注,你可以替换双引号的内容
Enter file in which to save the key (C:\Users\27311/.ssh/id_ed25519):
它在问你密钥保存在哪个目录,回车使用默认目录即可。你也可以手动输入目录,如C:\Users\27311/.ssh/id_ed25519_myname 为密钥命名,用以区分
后面一路回车即可,会在指定目录创建密钥对。.pub是公钥,不带后缀的是私钥

我们以记事本的方式打开公钥文件,全部复制

回到你的服务器,依次输入:
mkdir -p ~/.sshchmod 700 ~/.sshnano ~/.ssh/authorized_keys把你公钥的内容粘贴进去,按 ctrl + O(字母) 保存,回车,再按 ctrl + x 退出编辑器
输入:
chmod 600 ~/.ssh/authorized_keys打开 SSH 配置文件
nano /etc/ssh/sshd_config搜索 PubkeyAuthentication, 改为 yes
PubkeyAuthentication yes保存后重启 SSH 服务
systemctl restart sshd可在 CMD 上输入以下命令,把参数替换成你实际的密钥路径和服务器 IP 以及端口号,检查能否通过 SSH 密钥登录服务器:
ssh -i C:\Users\27311\.ssh\密钥名称 root@IP -p 端口推荐把 SSH 私钥上传到 SSH 客户端,就能一键登录了。不同客户端的操作方式不太一样,不作演示。
12.1.3 禁用密码登录
如果你的 SSH 密钥登录已经可用,自然没必要继续用风险更高的密码,我们可以修改配置文件,禁用密码登录。
修改之前,务必确保你的 SSH 密钥登录可用,且留有一个连接。
同样,先打开配置文件
nano /etc/ssh/sshd_config依次搜索并修改:
PasswordAuthentication noKbdInteractiveAuthentication no保存后重启 SSH 服务
systemctl restart sshd12.2 配置 UFW 防火墙
防火墙可以只放行需要的端口,阻断其余端口,最小化服务器的暴露面。
首先。我们需要安装防火墙。如果是 Ubuntu ,系统已经安装好了,直接跳到配置部分;如果是 Debian,则需要手动安装。可以先输入以下指令查看系统有没有防火墙服务:
systemctl status ufw如果没有,请手动安装:
apt updateapt install ufw -y先禁用所有入站,放行所有出站
ufw default deny incomingufw default allow outgoing接下来,我们要放行上文用到过的所有端口,需要放行的端口如下:
- SSH 端口 必须放行,默认是22
- 80 端口,用于申请域名证书 如果是用 cf API token 申请的可以不放行
- 3x-ui 面板端口和订阅链接端口 如果使用了 SSH 隧道、tailscale、cf tunnel, 不要放行,减少暴露。
- 41641 端口,用于 tailscale 连接 使用 udp 协议,如果没有使用 tailscale,不要放行
- 节点端口(443或其它) reality 协议用的是 tcp 协议;hysteria2 用的是 udp 协议
- 线路机上的中转端口(如果没有看过中转部分的内容,请忽视)
把端口号改为上文提到的端口,多次执行,如果没有特意提及 udp,放行 tcp 即可: tcp:
ufw allow 端口号/tcpudp:
ufw allow 端口号/udp确保需要的端口被放行后,开启防火墙:
ufw enable可验证防火墙状态
ufw status verbose除此以外,还有以下常用指令: 封锁指定端口
ufw deny 端口号/tcp删除已有规则
ufw delete allow 端口号关闭防火墙
ufw disable12.3 配置 Fail2ban
Fail2ban 可以监控日志文件,自动将多次登录失败的 IP 加入 iptables 封禁列表,能有效防范暴力破解。
3x-ui 会自动安装 Fail2ban,防护 3x-ui 面板登录和 SSH 登录,你不需要进行任何配置和修改,下课(
简单提一句,3x-ui 会写两个配置文件放在 /etc/fail2ban/jail.d/ 目录下,3x-ipl.conf 是 3x-ui 面板封禁规则的配置文件,另一个是 SSH 的配置文件,我的是 defaults-debian.conf,不同系统可能不一样?它直接继承 jail.conf 里的封禁规则,使用系统默认值。如果你需要修改一下封禁时间之类的,可以改一下这两个配置文件,一般来说都保持默认即可。
介绍一些常用功能:
查看整体运行状态
fail2ban-client status查看特定服务的封禁状态
fail2ban-client status sshd解封特定的 IP,如果你的 IP 因为密码输错被封了,换个网络连上服务器执行:
sudo fail2ban-client set sshd unbanip 你的IP13 使用 Komari 探针监控 VPS 状态
Komari 是一款轻量级的服务器探针,可以简单、高效的监听服务器状态,通过 Web 界面查看,可以监测服务器的三网延迟,流量使用情况之类的。以下是效果预览:
本节通过 docker compose 方式部署,通过 cloudflare tunnel 访问 web 面板,好处是减少公网暴露,数据隔离,如果需要换服务器,把 docker 的数据卷打包带走就可以了。坏处是较为繁琐。原作者也提供了其它部署方式,如有需要,请前往 https://komari-document.pages.dev/install/quick-start 查看,使用一键脚本部署会比较简单。其实熟悉了以后,cf tunnel 还挺方便的,不用搞反代,不用配置证书,还自带 CF 的 CDN。
下面是部署流程:
13.1 主控端配置
你只需要一台主 VPS 运行面板程序并接收监控数据,最好选择一台网络稳定、线路好的机器。其它被监控的 VPS 运行一条指令即可。
首先,我们在主控端安装komari
如果你没有安装 docker,需要先安装:
curl -fsSL https://get.docker.com | sudo sh创建一个目录,存放配置文件
mkdir -p /opt/komari && cd /opt/komari编写配置文件
nano docker-compose.yml粘贴一下配置信息,把账号密码改成你自己的
services: komari: image: ghcr.io/komari-monitor/komari:latest container_name: komari restart: unless-stopped ports: # Web 面板端口:严格绑定到宿主机的 127.0.0.1,禁止公网访问 - "127.0.0.1:25774:25774"
# Agent 通信端口:维持默认映射,允许外部 VPS 节点通过公网 IP 上报数据 - "25775:25775" volumes: # 存放配置、节点信息 - ./data:/app/data environment: # 保证面板日志和监控数据的时间戳与北京时间一致 - TZ=Asia/Shanghai # 登录密码 - ADMIN_USERNAME=yourname - ADMIN_PASSWORD=yourpasswordctrl+O 保存,回车,ctrl+X 退出
启动主控端:
docker compose up -d安装完成了,现在只能在本地访问,我们需要建立一条cf tunnel,之前已经讲过了,不再赘述,不知道怎么做的可以去看看 6.3 节。如果你不愿意使用 cf tunnel,也可以去研究一下 nginx 或者 caddy 反代,跟 AI 说我需要反向代理 VPS 上的 25774 端口。本节讲述的是使用 cf tunnel 的方案。
添加一条路由

13.2 Komari 配置
现在,可以通过路由的主机名访问面板了,输入你的密码,进入管理界面

添加一个服务器

复制一键部署指令,部署到你要监控的服务器上

在被控端运行部署指令后,就可以在面板看到信息了

这里可以填写续费信息啥的,方便你续费

这个可以设置一些备注信息

可以在这里配置延迟监测,查看实时的延迟和丢包数据。
类型推荐使用tcp,目标可以选择离自己近的,可以从这里找公开节点:https://tcpquality.ibsgss.uk/getNodes
其它还有很多功能,如修改主题,推送信息,使用github登录,自行探索吧。
推荐的主题:
https://github.com/shanyang242/Komari-Theme-LuminaPlus
https://github.com/sanrokamlan-prog/komari-theme-Glassmorphism
14 常用的 VPS 脚本
在一些测评频道,能看到很详细的服务器测试报告。其实我们拿到服务器以后,自己也可以测试一下,看看符不符合预期。本节介绍几个常用脚本,测试服务器的硬件质量、IP 质量、网络线路质量、回程路由。
14.1 NodeQuality
这是一个很好用的融合脚本,可以一键进行硬件测试、IP质量测试、网络质量测试、三网回程测试。而且它运行在沙盒环境中,测试结束后不会留下多余依赖。
bash <(curl -sL https://run.NodeQuality.com)输入指令后,按照指引选择你想测试的项目即可。需要注意的是,运行过程中会有广告,那是脚本作者放进去,与我无关,本人不对里面的产家背书,也不建议你们购买。毕竟,lisa 是什么成分,懂得都懂,年轻人的第一台 VPS 这一块。
以下是效果一览:
-
硬件信息

-
IP 质量

-
网络质量

-
回程路由
可以看一下服务器到你这里有没有绕路什么的,有些机子虽然有网络优化,但绕了个太平洋,实际体验也不会好。
所有项目运行结束后,会输出一个总的测评报告链接,所以也不用担心错过了,测试结束后随时能看。比如:https://nodequality.com/r/ZbSDLPBW9bOWAsQSQAPQDxa2hF1swpo5
14.2 TcpQuality
这是一个专门用来测试网络线路的脚本,相较于 NodeQuality 融合脚本,这个详细了许多,而且能测速,看看能不能跑满商家标的带宽。
bash <(curl -fsSL https://raw.githubusercontent.com/ibsgss/TcpQuality/main/runTcpQuality.sh)依旧是直接运行,按照指引选择需要测试的项目。
-
回程
这个就和 NQ 的网络质量差不多,但是详细了非常多,每个地区的回程线路都给你标出来了。 -
大包回程
有些商家可能会投机取巧,小包给你走优化路线,优化的特别好,你跑个 NQ 出来特别绿,然后实际一用,一传数据就猛猛丢包,所以测一下大包还是有必要的。 -
国际互联

-
三网单线程速度

同样,测试结束后会给你返回一个总的测试报告:https://tcpquality.ibsgss.uk/r/k8mbgSbCFw
14.3 流媒体解锁
NQ 只给出了常用平台的解锁情况,这个脚本可以一键测试非常多平台的解锁情况
bash <(curl -L -s check.unlock.media)依旧是选择想要测试的项目即可

14.4 ITDOG
这个有点不一样,是在你本地测试的,可以进行全国的 ping 测试。最大的作用是,如果你哪天连不上服务器了,可以测一下,如果一片中国红,那恭喜你的 IP 被墙了 https://www.itdog.cn/ping/

14.5 SpeedTest
TcpQuality 那个是单线程测速,而且会受到优化线路的影响,最贴近日常的使用体验。如果你想测试服务器的极限带宽,可以用这个脚本,它会选择一个离你服务器比较近的一个测速点进行测试
指令比较多,一行行执行
apt update && apt install -y curl gnupg ca-certificatescurl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | bashapt install -y speedtestspeedtest --accept-license --accept-gdpr运行完最后一条指令就会开始测试了,最后会返回一个测试结果链接

14.6 BBR
这不是测试脚本,而是一个网络优化脚本,可以一键开启 BBR 进行拥塞控制。其实安装 3x-ui 的时候已经帮我们打开 BBR 了,不放心的话可以安装看看。
wget http://sh.xdmb.xyz/tcp.sh && bash tcp.sh
如果看到拥塞控制算法是 bbr 当前队列算法是 fq,就不用动了。不然就输入 11 一键开启,再输入 reboot 重启服务器,让配置生效。
14.7 Warp
第 8 节有介绍在 3x-ui 面板里给节点套上 warp 作为落地,但那只能接管 3x-ui 的代理流量,如果你只是希望在使用梯子的时候,走 warp 的 IP,用 3x-ui 的就足够了。但是,如果你的 vps 上有其它项目,你希望用 warp 访问它,我们就需要这个脚本给整机套上 warp:
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh安装完成以后,会弹出菜单:
- 为 原生双栈 添加 WARP IPv4 网络接口 (bash menu.sh 4)
- 为 原生双栈 添加 WARP IPv6 网络接口 (bash menu.sh 6)
- 为 原生双栈 添加 WARP 双栈网络接口 (bash menu.sh d)
- 打开 WARP (warp o)
- 安装 CloudFlare Client 并设置为 Proxy 模式 (bash menu.sh c)
- 更换支持 Netflix 的 IP (warp i)
- 永久关闭 WARP 网络接口,并删除 WARP、 Linux Client 和 WireProxy (warp u)
- 升级内核、安装BBR、DD脚本 (warp b)
- 同步最新版本 (warp v)
- WARP 解锁 Netflix 等流媒体专业一键(支持多平台、多方式和 TG 通知)
- 安装 iptable + dnsmasq + ipset,让 WARP IPv4 only 接管流媒体流量 (不适用于 IPv6 only VPS) (bash menu.sh e)
- 安装 wireproxy,让 WARP 在本地创建一个 socks5 代理 (bash menu.sh w)
- 安装 CloudFlare Client 并设置为 WARP 模式 (bash menu.sh l)
- 退出脚本
这里只介绍两种方式,其它的自行探索。
- 1/2/3:接管你整个 vps 的ipv4/ipv6 流量
- 12:在 vps 上创建一个 socks5 代理,让代理流量走 warp,需要我们手动给要走 warp 的程序配置代理
相当于一个是全局模式,一个是手动代理指定程序。如果需要让 vps 网络恢复原样,输入 7 即可
如果需要再次打开菜单,可直接输入 warp 进入菜单
14.8 Swap
如果你的 vps 内存实在是小,比如只有 256 MB,我们可以为它创建虚拟内存。
wget https://www.moerats.com/usr/shell/swap.sh && bash swap.sh15 Sub-Store 订阅链接聚合器
mjj 都难免会遇到一个困境:我要买个服务器,代替机场 -> 这个在亚太,延迟低,得买 -> 这个好便宜,可以当备用 -> 这个也好便宜,可以当备用的备用……
然后不知不觉,机子多的可以开机场了🤣
那不可避免地会出现一个问题:每个节点都对应一个订阅链接,每次都要导入一个新的订阅分组。虽然 v2ray 支持对单节点的导入,我们可以很方便地把节点聚合到一个订阅分组里,只用操作一次。但一方面,万一要用 clash 呢?另一方面,也不够优雅(
于是作者就在找有没有聚合订阅链接的方法,用网上公共的订阅链接转换器,有泄露订阅链接的风险。既然有服务器,我们完全可以自建订阅链接转换器。一开始,我想用传统的subconverter,但是 tindy2013 版本已经不维护了,都不支持识别 reality 节点。而 metacubex 维护的版本也有些问题,不能转换成 v2ray 格式。于是,最后选择了 Sub-Store,这个项目带有一个精美的 web 前端,可以存储节点和分组信息,拿来聚合订阅链接挺方便的。
本节演示的部署方式依旧是使用 docker compose 部署,使用 cloudflare tunnel 访问。如果你需要其它的部署方式,请自行询问 AI。
15.1 部署 Sub-Store
如果你没有安装 docker,需要先安装:
curl -fsSL https://get.docker.com | sudo sh创建一个目录,存放配置文件
mkdir -p /opt/sub-store && cd /opt/sub-store编写配置文件
nano docker-compose.yml把以下内容粘贴进去,务必把SUB_STORE_FRONTEND_BACKEND_PATH的内容换成你自己的十位以上复杂字符串,sub-store 原生没有任何鉴权功能,你的数据安全全靠这个字符串作为安全路径,相当于你的密码。
services: sub-store: image: xream/sub-store:latest container_name: sub-store restart: always environment: # 【极其重要】请务必将下方替换为你自己的复杂随机字符串(以 / 开头,无特殊字符) - SUB_STORE_FRONTEND_BACKEND_PATH=/MySecretPath_123456 volumes: - ./sub-store-data:/opt/app/data ports: # 仅在本地环回地址监听,避免暴露在公网 - "127.0.0.1:3001:3001"ctrl + o 保存,回车,ctrl + x 退出。
拉起容器
docker compose up -d然后,在 cloudflare 上建立一条 tunnel 隧道,不知道怎么做的去看 6.3 节。如果实在不愿意用 cf tunnel,也可以问问 AI 怎么使用 nginx 或者 caddy 反向代理。

访问sub-store.你的域名,输入你的安全路径

15.2 使用 Sub-Store
初始没有任何订阅,我们需要把你的订阅链接都添加进来,作为单条订阅,最后聚合到组合订阅

名称可以用云服务商+地区的形式命名,便于标识。把订阅链接粘贴进来。

可以把订阅失败处理改成失败通知。因为我们是聚合订阅,避免一条订阅导入失败导致直接终止导入。确认无误后保存。

另外,sub-store 也支持对单节点的导入,如果你已经配置好了经中转的落地节点,可以把它导入进来

有多个单条订阅以后,我们就可以创建组合订阅,把它聚合起来

单击一下订阅名,即可查看它支持转换成哪些格式的订阅链接,复制后导入到你的代理客户端即可

千万不要泄露你的订阅链接!你的订阅链接是带有安全路径,任何人只要知道了你的安全路径和域名,就能登录上你的管理后台。
如果害怕泄露,也可以使用分享功能,生成的分享链接使用 token,是不带有安全路径的。
可以把有效期设长一点
到分享界面复制链接

最后把 sub-store 的聚合链接导入到你的代理客户端使用即可
15.3 使用 Cloudflare Zero Trust 登录验证
上文提到,Sub-Store 原生没有任何鉴权手段,这其实挺危险的,只要知道你的安全路径和域名就能进入你的管理面板进行增删改查。我们使用 cloudflare tunnel 部署,正好可以给它套上 cf 的 Zero Trust ,使用 github 的 OAuth 进行登录认证。需要注意的是,cf Zero Trust 的免费计划不收费,但是需要绑外币卡!如果你没有卡能绑,又想套上登录验证,可以让 AI 教你怎么用 nginx/caddy + oauth2-proxy 在网关层套上登录验证,也很复杂,本节不涉及。
这部分弄起来哈还是比较麻烦的,如果你没有安全方面的需求,可以无视此节。一般来说,把安全路径弄复杂点,也不太会泄露。
进入你的 zero trust 网页,获取团队域

打开你的 github 设置页,创建一个认证应用

填入你的团队域,回调域名就是在团队域后面加上/cdn-cgi/access/callback

复制你的客户端 ID 和密钥,密钥需要新建,只会显示一次

回到 zero trust 网页,在这里添加 github 登录方式

把你的客户端 ID 和密钥粘贴进去

接下来把 sub-store 作为应用程序添加进来,因为已经通过 cf tunnel 发布在公网上了,所以选择公共 DNS

填入你的域名

只允许你自己的 github 邮箱登录,拉到下面保存策略

添加你之前设置的 github 身份验证
设置完以后,拉到最下面创建应用程序
现在访问管理后台就需要登录验证了。如果一直报错不跳转就清理一下网页cookie

但是,现在拉取订阅时也会被登录拦截,而代理客户端并不能帮我们处理登录请求,所以我们需要再新建一个应用程序,分别放行订阅链接和分享链接
订阅链接的格式是 https://sub-store.你的域名/你的安全路径/download/订阅 ,我们放行 /你的安全路径/download/ 路径即可,同样,分享链接的格式是https://sub-store.你的域名/share/col/订阅 ,放行 /share 路径即可
对所有人放行

现在,就可以实现访问管理面板需要登录认证,订阅链接可以直连。我们通过 cloudflare access 为 sub-store 套上了第三方登录。麻烦是麻烦了一点,但是,如果你以后有其它托管到 cf 上的项目,也可以复用这个登录验证,提升你网页的完全性,还是比较有用的。
16 可能遇到的问题
-
节点超时/连不上面板
可能的原因有很多,请先检查防火墙有没有放行对应的端口 -
安装脚本时返回command not found
如果你使用的是debian系统则容易遇到这个问题,它的意思是你的系统上没有安装curl, wget,unzip之类的软件,我们手动安装
首先输入:sudo apt update然后输入:
sudo apt install 软件包名称 -y软件包名称换成你缺失的
-
出口ip是ipv6,我想用ipv4
有些vps有ipv4和ipv6双ip,会默认使用ipv6,但是,厂商可能只对ipv4有线路优化,或者ipv4的ip质量好一点,我们可以在3x-ui面板里指定只使用ipv4。

- 密码/密钥正确,连不上服务器
可能是被 fail2ban 杀了,等 10 分钟或者换个 IP 试试
本文仅作网络技术的交流与学习记录,不提供任何具体服务的推荐与售卖。读者在参考本文进行操作时,请务必严格遵守所在国家或地区的相关法律法规。因参考、使用本文教程而产生的任何法律纠纷、数据丢失或服务器封禁等一切后果,均由使用者自行承担,作者概不负责。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时












