存档一下自己搭建代理并配置Clash配置(Mihomo内核)的过程。仅做参考,并不是特别完善的教程。
大致思路:先在一台机子上启动Sub-Store,前端开启CF Zero Trust。然后在每台代理机子装上3x-ui,设置只监听本地,同时启用Cloudflare Tunnel连接为每个3x-ui服务添加CNAME设置域名部署至公网,在每个域名(3x-ui面板)添加Zero Trust拦截非法服务。在每台生成vless + reality链接,端口设置为443,关闭订阅设置,把链接用单个订阅绑定到Sub-Store,创建组合订阅。在文件管理中实现分流规则,生成https链接,链接接入CF WAF,设置verify密钥,保护订阅文件安全。
Tunnel 仅用于面板 Web 访问;节点的 reality 入站仍是直连 VPS(DNS 记录需按 reality 的要求处理)。
Sub-Store 部署
安装Sub-Store(请先安装Docker)
curl -sSL https://sub-store-org.github.io/resource/ssm/install.sh | bash
启动前端和后端
# 后端,默认监听本机端口,不要添加 --private=false
ssm new -n ssm-backend -p 3000
# 前端
ssm new -i -n ssm-frontend -p 8080
# 查看 hash 前缀(这个要加到后端,即https://sub.example.com/<HASH>/)
ssm ls
然后反代绑定域名,将前端的域名加到CF Access Zero Trust中,设置策略,我设置的是两个邮箱发送一次性验证码。
代理机 3x-ui 部署
apt update && apt install -y curl
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
面板设置 - 面板监听域名 - 127.0.0.1 (面板监听限制在本机)
订阅设置 - 关闭订阅服务 - 保存 - 重启面板
可以看到现在公网已经连不上了
代理机 CF Tunnel + Zero Trust 构建
打开 Cloudflare One (Access),网络 - 连接器 - 创建隧道 - 选择 Cloudflared,先在上面选你的系统环境(Debian or Ubuntu),然后复制上面一大块代码到你的 VPS 上,然后再复制左下角的,让机子每次启动时都能自动运行。
| 选项名称 | 填写内容 | 说明 |
|---|---|---|
| 子域 | 前缀 | |
| 域 (Domain) | 选择你的域名 | 在下拉菜单里选你绑定的主域名 |
| 路径 (Path) | 留空 | 不填 |
| 服务 - 类型 (Type) | HTTP |
必须选 HTTP |
| 服务 - URL | 127.0.0.1:xxx |
填你刚才设置的内网 IP 和端口 |
其他应用程序设置 - HTTP 设置 - HTTP 主机头 - 127.0.0.1(不填这个可能导致无法访问,后端可能按 Host/Header 做校验)。
Zero Trust 设置策略绑定刚刚配置的域名即可。
WAF 配置
添加这个配置是为了:假设你的订阅链接被无意或有意地泄露了,所有人都会看到你链接背后每台机子的 IP 和 UUID,为了稍微解决一下这个问题,可以在订阅链接后加个“暗号”,只有订阅链接后面带个 Token 的才可以允许访问,可以为不同朋友给不同token防止泄露。(虽然可能这个操作意义不大,安全性增加有限)
创建 WAF 自定义规则
- 登录 Cloudflare 主面板。
- 选择域名。
- 在左侧菜单,找到 安全性 - 安全规则 - 创建规则 - 自定义规则。
- 填写规则内容:
-
If…:
- 字段: URI 路径
- 运算符: 选择
contains - 值: 填
/xxxx/api/file/xxxx
-
And
- 字段: URI 查询字符串
- 运算符: 不包含
- 值: 自己设定的暗号,例如
verify=iloveidc
-
And(防止规则在前端写入的时候被拦截):
- 字段: 请求方法
- 运算符: 等于
- 值: GET
-
选择操作: 阻止
-
按实际的情况调整为更严格的匹配,避免误判
Clash 分流
参考 [教程 2.0] 草履虫也能学会的 Clash 配置:无DNS泄露、精确分流、链式代理
最简单的方案是把上面的配置文件下载下来让 AI 改写
猫猫的 Vless 订阅转换网站:订阅链接转换工具