655 lines
15 KiB
Markdown
655 lines
15 KiB
Markdown
# Cloudflare 隧道当前功能说明
|
||||
|
|
|
|||
|
|
> 日期:2026-10-01
|
|||
|
|
> 状态:v1.9.0 实测功能基线。本文描述**当前代码实际实现的能力**,不是早期规划稿。
|
|||
|
|
> 相关文档:
|
|||
|
|
> - `cloudflared-integration-plan.md`:早期融合方案
|
|||
|
|
> - `cloudflared-feature-plan.md`:官方与参考项目功能全集,用于查漏
|
|||
|
|
> - `cloudflared-havline-fit-plan.md`:Havline 适配版阶段计划
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、模块定位
|
|||
|
|
|
|||
|
|
Cloudflare 隧道在 Havline 中不是独立的 cloudflared 管理面板,而是公网访问的第二条出口:
|
|||
|
|
|
|||
|
|
- 本机 Nginx:适合有公网 IP 或已有端口映射的场景。
|
|||
|
|
- FRP:适合需要 TCP/UDP、自控 VPS 或大流量的场景。
|
|||
|
|
- Cloudflare 隧道:适合没有公网 IP、主要发布 HTTP/HTTPS Web 服务的场景。
|
|||
|
|
|
|||
|
|
当前模块已经融入 Havline 的规则、监控、通知、状态页、日志、备份、诊断和升级体系。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、已实现的入口与页面
|
|||
|
|
|
|||
|
|
### 2.1 Cloudflare 隧道列表页
|
|||
|
|
|
|||
|
|
页面:`web/src/views/CloudflareView.vue`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 隧道列表显示:
|
|||
|
|
- 隧道名称
|
|||
|
|
- 状态
|
|||
|
|
- 副本 / cloudflared HA 连接数
|
|||
|
|
- cloudflared 版本
|
|||
|
|
- 路由数量
|
|||
|
|
- 指标端口
|
|||
|
|
- 全局托管开关:
|
|||
|
|
- 关闭:停止全部隧道。
|
|||
|
|
- 开启:立即启动全部隧道。
|
|||
|
|
- 应用重启:全局托管开启时自动恢复全部隧道。
|
|||
|
|
- 新建隧道弹窗:
|
|||
|
|
- 自动托管模式。
|
|||
|
|
- 手工隧道模式。
|
|||
|
|
- 手工隧道暴露规则:
|
|||
|
|
- 子域名输入。
|
|||
|
|
- 域从 Cloudflare Zone 列表选择。
|
|||
|
|
- HTTP / HTTPS / TCP / SSH 服务类型。
|
|||
|
|
- `://` 与 URL 分离显示。
|
|||
|
|
- 实时显示完整主机名。
|
|||
|
|
- 隧道操作:
|
|||
|
|
- 详情。
|
|||
|
|
- 配置页。
|
|||
|
|
- 启动 / 停止 / 重启。
|
|||
|
|
- 删除。
|
|||
|
|
- 应用配置:
|
|||
|
|
- Account ID。
|
|||
|
|
- API Token。
|
|||
|
|
- Token 验证。
|
|||
|
|
- cloudflared 下载镜像。
|
|||
|
|
- 默认网络参数。
|
|||
|
|
|
|||
|
|
### 2.2 隧道配置页
|
|||
|
|
|
|||
|
|
页面:`web/src/views/CloudflareTunnelConfigView.vue`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 独立路由页面,不再使用编辑弹窗:
|
|||
|
|
- `/cloudflare/:id/config`
|
|||
|
|
- 指标卡:
|
|||
|
|
- 活动副本
|
|||
|
|
- 路由数
|
|||
|
|
- 状态
|
|||
|
|
- 运行时间
|
|||
|
|
- 基础配置:
|
|||
|
|
- 页面只显示“编辑基础配置”按钮。
|
|||
|
|
- 点击后弹窗编辑名称、子域名、Zone、服务类型、URL、自动启动。
|
|||
|
|
- 路由列表:
|
|||
|
|
- 顺序。
|
|||
|
|
- 目标域名。
|
|||
|
|
- 路径。
|
|||
|
|
- 服务。
|
|||
|
|
- 来源。
|
|||
|
|
- 操作。
|
|||
|
|
- 拓扑图:
|
|||
|
|
- 域名节点。
|
|||
|
|
- Cloudflare 出口节点。
|
|||
|
|
- 隧道节点。
|
|||
|
|
- 服务节点。
|
|||
|
|
- 点阵画布和曲线连接。
|
|||
|
|
- 路由操作:
|
|||
|
|
- 添加路由。
|
|||
|
|
- 编辑路由。
|
|||
|
|
- 删除路由。
|
|||
|
|
- 上移 / 下移。
|
|||
|
|
- 复制路由。
|
|||
|
|
- 测试源服务 TCP 连通性。
|
|||
|
|
- 路由弹窗:
|
|||
|
|
- 子域名 + Zone 下拉。
|
|||
|
|
- HTTP / HTTPS / TCP / SSH + URL。
|
|||
|
|
- 完整主机名实时预览。
|
|||
|
|
- 全部捕获规则:
|
|||
|
|
- 默认显示 `http_status:404`。
|
|||
|
|
- 运行控制:
|
|||
|
|
- 启动、停止、重启。
|
|||
|
|
|
|||
|
|
自动托管隧道的路由只读,来源显示为“反向代理规则”,并提示到“反向代理”页维护。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、Cloudflare 账号与二进制
|
|||
|
|
|
|||
|
|
### 3.1 账号配置
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/cloudflare_api.go`
|
|||
|
|
- `internal/cloudflared/service.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 保存 Account ID + API Token。
|
|||
|
|
- API Token 加密存储。
|
|||
|
|
- Token 掩码回显。
|
|||
|
|
- 调用账号级 `tokens/verify` 验证 Token。
|
|||
|
|
- 查询当前 Token 可访问的 Zone。
|
|||
|
|
- 根据域名向上查找所属 Zone。
|
|||
|
|
- 创建、读取、删除 Cloudflare 隧道。
|
|||
|
|
- 获取隧道 Token。
|
|||
|
|
- 读取和覆盖远端 ingress。
|
|||
|
|
- 创建、更新、删除 DNS CNAME。
|
|||
|
|
- 只读检测 Cloudflare Access。
|
|||
|
|
|
|||
|
|
### 3.2 cloudflared 二进制
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/binary.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 内置多种下载镜像。
|
|||
|
|
- 下载并原子替换本机 cloudflared。
|
|||
|
|
- 校验文件大小和可执行性。
|
|||
|
|
- 显示当前版本。
|
|||
|
|
- 查询 GitHub 最新版本。
|
|||
|
|
- 下载指定版本。
|
|||
|
|
- 保留上一版并支持回滚。
|
|||
|
|
|
|||
|
|
版本显示统一为语义版本,例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
2026.9.3
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、隧道生命周期
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/service.go`
|
|||
|
|
- `internal/cloudflared/manager.go`
|
|||
|
|
- `internal/cloudflared/store.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 通过 Cloudflare API 创建命名隧道。
|
|||
|
|
- 生成本地凭据:
|
|||
|
|
- `creds.json`
|
|||
|
|
- `config.yml`
|
|||
|
|
- `cloudflared.log`
|
|||
|
|
- 支持隧道模式模型:
|
|||
|
|
- `account-local`
|
|||
|
|
- `token-local`
|
|||
|
|
- `token-remote`
|
|||
|
|
- 进程托管:
|
|||
|
|
- 启动。
|
|||
|
|
- 停止。
|
|||
|
|
- 重启。
|
|||
|
|
- 崩溃后读取日志尾部便于诊断。
|
|||
|
|
- 开机启动:
|
|||
|
|
- 全局托管开启时,应用启动会恢复全部隧道。
|
|||
|
|
- “随 Havline 自动启动”开关保留为隧道级选项。
|
|||
|
|
- 全局总开关:
|
|||
|
|
- 开启时启动全部隧道。
|
|||
|
|
- 关闭时停止全部隧道。
|
|||
|
|
- 凭据刷新:
|
|||
|
|
- 重新获取隧道 Token。
|
|||
|
|
- 更新本地 `creds.json`。
|
|||
|
|
- 运行中时自动重启。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、出口抽象与反向代理规则
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/proxy/proxy.go`
|
|||
|
|
- `internal/service/proxy.go`
|
|||
|
|
- `internal/cloudflared/service.go`
|
|||
|
|
|
|||
|
|
迁移:
|
|||
|
|
|
|||
|
|
- `migrations/035_proxy_exits.sql`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 反向代理规则增加出口字段:
|
|||
|
|
- `local`
|
|||
|
|
- `cloudflare`
|
|||
|
|
- 支持同时选择:
|
|||
|
|
- 本机 Nginx + Cloudflare。
|
|||
|
|
- Cloudflare 出口增加目标隧道:
|
|||
|
|
- `cf_tunnel_id`
|
|||
|
|
- 规则变化自动同步:
|
|||
|
|
- 新增规则。
|
|||
|
|
- 修改规则。
|
|||
|
|
- 删除规则。
|
|||
|
|
- 启停规则。
|
|||
|
|
- 托管隧道 ingress 从规则派生:
|
|||
|
|
- 每条域名使用自己的回源地址。
|
|||
|
|
- 仅同步启用的 Cloudflare 出口规则。
|
|||
|
|
- 仅 Cloudflare 出口的规则不生成无用的本机 Nginx server。
|
|||
|
|
- 规则保存成功但 Cloudflare 同步失败时:
|
|||
|
|
- 本地规则仍保存。
|
|||
|
|
- 返回 `sync_warning`。
|
|||
|
|
- 前端显示警告而不是把整次保存判为失败。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、路由与 ingress
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/routes.go`
|
|||
|
|
- `internal/cloudflared/config.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 手工隧道路由来自本地 `config.yml`。
|
|||
|
|
- 托管隧道路由来自反向代理规则。
|
|||
|
|
- 路由列表支持:
|
|||
|
|
- 添加。
|
|||
|
|
- 编辑。
|
|||
|
|
- 删除。
|
|||
|
|
- 上移 / 下移。
|
|||
|
|
- 复制。
|
|||
|
|
- 源服务连通性测试。
|
|||
|
|
- 保存路由时:
|
|||
|
|
- 重新生成本地 `config.yml`。
|
|||
|
|
- 覆盖 Cloudflare 云端 ingress。
|
|||
|
|
- 同步 DNS。
|
|||
|
|
- 运行中时重启 cloudflared。
|
|||
|
|
- 末条 catch-all 固定为:
|
|||
|
|
```text
|
|||
|
|
http_status:404
|
|||
|
|
```
|
|||
|
|
- 通配路径处理:
|
|||
|
|
- UI 显示 `*`。
|
|||
|
|
- 发送到 Cloudflare 时省略 `path`。
|
|||
|
|
- 避免 `*` 被当作非法正则。
|
|||
|
|
- 支持正则 path 的后端字段,但当前页面主要使用通配路径。
|
|||
|
|
|
|||
|
|
### P0:接入与调和
|
|||
|
|
|
|||
|
|
- Cloudflare 页面新增“接入向导”。
|
|||
|
|
- 接入预检检查:
|
|||
|
|
- cloudflared 二进制。
|
|||
|
|
- Account ID。
|
|||
|
|
- API Token。
|
|||
|
|
- Zone 权限。
|
|||
|
|
- 隧道列表新增“调和”列:
|
|||
|
|
- 已同步。
|
|||
|
|
- 有漂移。
|
|||
|
|
- 手工隧道。
|
|||
|
|
- 有漂移时可一键修复:
|
|||
|
|
- 以本地规则覆盖 Cloudflare 云端配置。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 七、DNS 管理
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/cloudflare_api.go`
|
|||
|
|
- `internal/cloudflared/service.go`
|
|||
|
|
- `internal/cloudflared/store.go`
|
|||
|
|
|
|||
|
|
迁移:
|
|||
|
|
|
|||
|
|
- `migrations/035_proxy_exits.sql`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 自动创建 CNAME:
|
|||
|
|
```text
|
|||
|
|
<hostname> -> <tunnel-id>.cfargotunnel.com
|
|||
|
|
```
|
|||
|
|
- 开启 Cloudflare 代理(橙云)。
|
|||
|
|
- 记录 Havline 创建或接管的 DNS 记录:
|
|||
|
|
- `cf_dns_records`
|
|||
|
|
- 删除域名或移除出口时:
|
|||
|
|
- 只删除 Havline 自己接管的记录。
|
|||
|
|
- 不覆盖指向其他目标的用户 DNS 记录。
|
|||
|
|
- 域名从一条隧道迁移到另一条隧道时支持接管迁移。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 八、状态、指标与日志
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/manager.go`
|
|||
|
|
- `internal/cloudflared/health.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 从 cloudflared metrics 端口读取:
|
|||
|
|
- HA 连接数。
|
|||
|
|
- 延迟。
|
|||
|
|
- 上下行速率。
|
|||
|
|
- 传输协议。
|
|||
|
|
- 隧道列表实时状态。
|
|||
|
|
- 配置页指标卡。
|
|||
|
|
- 日志中心新增“Cloudflare 隧道”页签:
|
|||
|
|
- 选择隧道。
|
|||
|
|
- 查看 200 / 500 / 2000 行日志。
|
|||
|
|
- 关键词筛选。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 九、健康巡检、通知与状态页
|
|||
|
|
|
|||
|
|
迁移:
|
|||
|
|
|
|||
|
|
- `migrations/036_cf_health.sql`
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/health.go`
|
|||
|
|
- `internal/monitor/monitor.go`
|
|||
|
|
- `internal/app/monitor_source.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 记录 Cloudflare 域名健康状态变化:
|
|||
|
|
- `up`
|
|||
|
|
- `down`
|
|||
|
|
- `unknown`
|
|||
|
|
- 24 小时可用率。
|
|||
|
|
- 不可用区间。
|
|||
|
|
- 巡检复用现有:
|
|||
|
|
- 路由健康开关。
|
|||
|
|
- 隧道断开通知开关。
|
|||
|
|
- 连续失败阈值。
|
|||
|
|
- 连续不通和恢复复用通知事件 `tunnel_down`。
|
|||
|
|
- 公开状态页合并:
|
|||
|
|
- FRP 路由。
|
|||
|
|
- Cloudflare 路由。
|
|||
|
|
- 状态页展示每条路由的不可用区间:
|
|||
|
|
- 开始时间。
|
|||
|
|
- 持续分钟数。
|
|||
|
|
- 原因。
|
|||
|
|
- 状态页只显示域名、来源、状态和可用率,不泄露隧道 ID 与内网地址。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十、仪表盘
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/api/status_handler.go`
|
|||
|
|
- `web/src/views/DashboardView.vue`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- `/api/status` 增加:
|
|||
|
|
- Cloudflare 隧道总数。
|
|||
|
|
- 在线数。
|
|||
|
|
- 状态。
|
|||
|
|
- 摘要消息。
|
|||
|
|
- 仪表盘健康列表增加“Cloudflare 隧道”条目。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十一、备份与恢复
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/backup/service.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 备份内容包含:
|
|||
|
|
- `havline.db`
|
|||
|
|
- `certs`
|
|||
|
|
- `nginx`
|
|||
|
|
- `cloudflared/tunnels`
|
|||
|
|
- `cloudflared/tunnels` 包含:
|
|||
|
|
- `config.yml`
|
|||
|
|
- `creds.json`
|
|||
|
|
- 数据库中的 `cf_tunnels`、`cf_settings`、`cf_dns_records` 随 `havline.db` 恢复。
|
|||
|
|
- 恢复后仍建议重启 Havline,由启动流程恢复全部隧道。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十二、漂移检测与诊断
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/cloudflared/operations.go`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
### 12.1 漂移检测
|
|||
|
|
|
|||
|
|
- 比较本地规则派生 ingress 与 Cloudflare 云端 ingress。
|
|||
|
|
- 检出:
|
|||
|
|
- 本地有、云端缺失。
|
|||
|
|
- 云端有、本地已移除。
|
|||
|
|
- 回源地址不一致。
|
|||
|
|
- 支持“以本地覆盖”:
|
|||
|
|
```text
|
|||
|
|
POST /api/cloudflare/tunnels/{id}/sync
|
|||
|
|
```
|
|||
|
|
- 当前未实现“以云端为准拉取”。
|
|||
|
|
|
|||
|
|
### 12.2 一键诊断
|
|||
|
|
|
|||
|
|
检查项:
|
|||
|
|
|
|||
|
|
- cloudflared 二进制。
|
|||
|
|
- 本地 `config.yml`。
|
|||
|
|
- 隧道进程状态。
|
|||
|
|
- Cloudflare API 与云端配置可访问性。
|
|||
|
|
- Havline 接管的 DNS 记录。
|
|||
|
|
- Cloudflare edge region1。
|
|||
|
|
- Cloudflare edge region2。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十三、NAS 场景能力
|
|||
|
|
|
|||
|
|
实现文件:
|
|||
|
|
|
|||
|
|
- `internal/discovery/service.go`
|
|||
|
|
- `web/src/views/ProxyView.vue`
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- 服务发现目录包含:
|
|||
|
|
- 飞牛 fnOS
|
|||
|
|
- AList
|
|||
|
|
- Jellyfin
|
|||
|
|
- PhotoPrism
|
|||
|
|
- qBittorrent
|
|||
|
|
- Portainer
|
|||
|
|
- Home Assistant
|
|||
|
|
- Immich
|
|||
|
|
- AdGuard Home
|
|||
|
|
- Synology DSM
|
|||
|
|
- 反向代理页“扫描服务”打开发现列表。
|
|||
|
|
- 点击“发布”会:
|
|||
|
|
- 预填服务名称。
|
|||
|
|
- 预填内网 upstream。
|
|||
|
|
- 若已有托管隧道,自动选择 Cloudflare 出口。
|
|||
|
|
- 打开规则编辑表单等待填写域名。
|
|||
|
|
|
|||
|
|
当前不是完全一键创建,仍需要用户填写域名并确认保存。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十四、安全与保护提示
|
|||
|
|
|
|||
|
|
已实现:
|
|||
|
|
|
|||
|
|
- Cloudflare Tunnel 条款提示:
|
|||
|
|
- 不适合持续大文件/视频分发。
|
|||
|
|
- 仅 Cloudflare 出口时:
|
|||
|
|
- 提示无需申请本机 HTTPS 证书。
|
|||
|
|
- Access 只读检测:
|
|||
|
|
- 检测域名是否已有 Access 应用。
|
|||
|
|
- 不代配 Access 策略。
|
|||
|
|
- API Token 权限提示:
|
|||
|
|
- `Account: Cloudflare Tunnel: Edit`
|
|||
|
|
- `Zone: Zone: Read`
|
|||
|
|
- `Zone: DNS: Edit`
|
|||
|
|
- Zone Resources 必须包含待发布根域名。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十五、当前 API
|
|||
|
|
|
|||
|
|
### 隧道
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
GET /api/cloudflare/tunnels
|
|||
|
|
POST /api/cloudflare/tunnels
|
|||
|
|
GET /api/cloudflare/tunnels/{id}
|
|||
|
|
PUT /api/cloudflare/tunnels/{id}
|
|||
|
|
DELETE /api/cloudflare/tunnels/{id}
|
|||
|
|
POST /api/cloudflare/tunnels/{id}/start
|
|||
|
|
POST /api/cloudflare/tunnels/{id}/stop
|
|||
|
|
POST /api/cloudflare/tunnels/{id}/restart
|
|||
|
|
POST /api/cloudflare/tunnels/{id}/credentials/refresh
|
|||
|
|
GET /api/cloudflare/tunnels/{id}/status
|
|||
|
|
GET /api/cloudflare/tunnels/{id}/logs
|
|||
|
|
GET /api/cloudflare/tunnels/{id}/config
|
|||
|
|
GET /api/cloudflare/tunnels/{id}/routes
|
|||
|
|
PUT /api/cloudflare/tunnels/{id}/routes
|
|||
|
|
POST /api/cloudflare/routes/test
|
|||
|
|
GET /api/cloudflare/tunnels/{id}/drift
|
|||
|
|
POST /api/cloudflare/tunnels/{id}/sync
|
|||
|
|
GET /api/cloudflare/tunnels/{id}/diagnostics
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 二进制与配置
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
GET /api/cloudflare/binary
|
|||
|
|
POST /api/cloudflare/binary/download
|
|||
|
|
GET /api/cloudflare/binary/latest
|
|||
|
|
POST /api/cloudflare/binary/rollback
|
|||
|
|
GET /api/cloudflare/settings
|
|||
|
|
PUT /api/cloudflare/settings
|
|||
|
|
POST /api/cloudflare/settings/test
|
|||
|
|
POST /api/cloudflare/enabled
|
|||
|
|
GET /api/cloudflare/preflight
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Zone、候选与 Access
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
GET /api/cloudflare/ingress-candidates
|
|||
|
|
GET /api/cloudflare/zones
|
|||
|
|
GET /api/cloudflare/access-status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十六、数据表
|
|||
|
|
|
|||
|
|
### `cf_tunnels`
|
|||
|
|
|
|||
|
|
保存隧道基础信息:
|
|||
|
|
|
|||
|
|
- 名称。
|
|||
|
|
- 模式。
|
|||
|
|
- Tunnel ID。
|
|||
|
|
- Account Tag。
|
|||
|
|
- 加密后的凭据。
|
|||
|
|
- 配置、凭据、日志路径。
|
|||
|
|
- 网络设置。
|
|||
|
|
- 运行状态。
|
|||
|
|
- metrics 端口。
|
|||
|
|
- 自动启动选项。
|
|||
|
|
- 是否自动托管。
|
|||
|
|
|
|||
|
|
### `cf_settings`
|
|||
|
|
|
|||
|
|
保存应用级配置:
|
|||
|
|
|
|||
|
|
- Account ID。
|
|||
|
|
- 加密后的默认 Token。
|
|||
|
|
- 加密后的 API Token。
|
|||
|
|
- 下载镜像。
|
|||
|
|
- 默认网络设置。
|
|||
|
|
- 全局托管开关。
|
|||
|
|
|
|||
|
|
### `cf_dns_records`
|
|||
|
|
|
|||
|
|
保存 Havline 接管的 DNS 记录:
|
|||
|
|
|
|||
|
|
- 本地隧道 ID。
|
|||
|
|
- Zone ID。
|
|||
|
|
- DNS Record ID。
|
|||
|
|
- Hostname。
|
|||
|
|
|
|||
|
|
### `cf_health_events`
|
|||
|
|
|
|||
|
|
保存 Cloudflare 域名健康状态变化:
|
|||
|
|
|
|||
|
|
- 隧道 ID。
|
|||
|
|
- 域名。
|
|||
|
|
- 状态。
|
|||
|
|
- 原因。
|
|||
|
|
- 详情。
|
|||
|
|
- 时间。
|
|||
|
|
|
|||
|
|
### `proxy_rules` 扩展
|
|||
|
|
|
|||
|
|
- `exits_json`
|
|||
|
|
- `cf_tunnel_id`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十七、当前未完成或仅部分实现
|
|||
|
|
|
|||
|
|
以下能力尚未完成,不能按“已实现”宣传:
|
|||
|
|
|
|||
|
|
1. 完整审计日志
|
|||
|
|
- 尚未记录“谁在何时修改了规则、出口、凭据和设置”。
|
|||
|
|
|
|||
|
|
2. 云端配置拉取
|
|||
|
|
- 漂移检测支持“本地覆盖云端”。
|
|||
|
|
- 尚不支持“云端覆盖本地”。
|
|||
|
|
|
|||
|
|
3. 完整无感令牌轮换
|
|||
|
|
- 当前是“刷新/重新获取隧道凭据”。
|
|||
|
|
- 尚未实现创建新隧道后无缝迁移全部规则。
|
|||
|
|
|
|||
|
|
4. Access 策略管理
|
|||
|
|
- 只做只读检测。
|
|||
|
|
- 不创建、不修改 Access 应用。
|
|||
|
|
|
|||
|
|
5. 完全一键服务发布
|
|||
|
|
- 当前是扫描、预填、打开表单。
|
|||
|
|
- 仍需要用户填写域名并确认保存。
|
|||
|
|
|
|||
|
|
6. 正则路径 UI
|
|||
|
|
- 后端路由模型支持 `path`。
|
|||
|
|
- 当前页面主要使用通配路径,尚未提供独立的 path 高级编辑控件。
|
|||
|
|
|
|||
|
|
7. 多 Cloudflare 账号
|
|||
|
|
- 当前应用配置只支持一个 Account ID + API Token。
|
|||
|
|
- `cert.pem` / 多账号模式尚未实现。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十八、验证基线
|
|||
|
|
|
|||
|
|
当前实现覆盖以下验证:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
go test ./... -count=1
|
|||
|
|
go vet ./...
|
|||
|
|
cd web && npm run typecheck
|
|||
|
|
cd web && npm test -- --run
|
|||
|
|
cd web && npm run build
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
新增或重点测试:
|
|||
|
|
|
|||
|
|
- 出口默认值、持久化与过滤。
|
|||
|
|
- Cloudflare 按规则生成 ingress。
|
|||
|
|
- Cloudflare 健康状态与可用率计算。
|
|||
|
|
- 手工 config 路由解析。
|
|||
|
|
- 通配 path 不发送非法正则。
|
|||
|
|
- DNS 记录归属。
|
|||
|
|
- 备份包含 cloudflared 隧道配置。
|
|||
|
|
- 漂移比较。
|