这套文档怎么读
这份文档面向三类人,按需取用:
| 你是 | 从哪开始 | 不要错过 |
|---|---|---|
| 运维 / 使用者 | 安装 → 快速上手 | 运维与排障 里的日志字典 |
| 配置作者 | 凭据、多隧道、真实客户端 IP | 指令总览 与 限制 |
| 改代码 / 评审 | 架构总览、不变量 | 测试套件 与 交付物与指纹 |
文档的分区
- 指南(本区):按「装 → 配 → 跑 → 排障」的顺序讲怎么用,每一步都给可直接粘的配置。
- 参考:42 条指令的完整表格、日志消息字典、常量与上限、以及与 cloudflared 的逐条差异。
- 架构:协议层、注入层、不变量与安全边界 —— 解释「为什么这样」而不是「怎么配」。
- 验证:18 支测试套件各钉住什么、交付物指纹怎么复核。
三条贯穿全站的约定
- 对齐 cloudflared 是硬要求,不是口号。 任何「看起来不一样也没问题」的改动都不接受; 真有意偏离的地方,本文档逐条写明偏离点、理由,以及 cloudflared 侧的行为证据。
- 不猜。 说不支持就是不支持(例如 token 里的
e区域、unix:service),宁可配置期报错 或传输层丢弃,也不静默改路由。 - 没跑过的不写成跑过。 本文档里所有数字(断言条数、体积、指纹)都来自可复现的脚本, 出处见 交付物与指纹。
名词表
| 名词 | 含义 |
|---|---|
| 边缘 / edge | Cloudflare 的隧道接入点,默认 region1.v2.argotunnel.com:7844(TLS SNI 恒为 h2.cftunnel.com) |
| 控制流 | h2 上那条跑 Cap’n Proto RPC 的流(注册、心跳、远程配置、注入回流都在它上面) |
| 注入 / inject | 把边缘送来的一条 h2 流变成 nginx 的一条虚拟连接 + 一个原生 HTTP 请求 |
| 虚拟连接 | 用 ngx_get_connection() 真连接槽 + socketpair 真 fd 搭起来的 ngx_connection_t:本地地址借自监听器,数据由模块经 c->recv/c->send 喂,fd 只作身份载体 |
| 注入目标 | 这条隧道的请求送进哪个 listen(inject_listen,ip:port 或只写端口) |
| 快速隧道 | 启动时向 api.trycloudflare.com 申请一条临时隧道(随机域名,重启即变) |
| 裸 TCP 隧道流 | 流头带 Cf-Cloudflared-Proxy-Src 的流:ssh / rdp / tcp 这类非 HTTP 服务,模块直接丢弃 |