变更记录

倒序排列。每一条都对应模块仓库里的一个 annotated tag(v0.x.y-1)。

0.14.0-1 — 控制台给的 token 可以直接用 ​

问题:Zero Trust 控制台「添加隧道 → 安装连接器」只给一串 eyJhIjoi… 的 token, cloudflared service install <token> 也只是把它写进 /etc/cloudflared/token 再让 systemd 用 --token-file 读。模块此前只认 credentials JSON 文件,于是「照控制台配」走不通。

做法:

  • 新增扁平指令 cfd_tunnel_token / cfd_tunnel_token_file,块内 token / token_file ⇒ 指令总数 38 → 42(扁平 29 + 块 1 + 块内 12)。
  • 解析器自带严格的标准 base64 解码 + 够用的 JSON 走查(不引第三方库),口径逐条对齐 cloudflared 的 ParseToken():内联不 trim、token_file 先 TrimSpace、只忽略 \r\n、 必须有 = 填充、未知字符串键忽略、a/t/s 缺失不算错、s:null 允许、重复键后者胜。
  • 三种来源 credentials / token / token_file 互斥,配置期 EMERG;与快速隧道也互斥。
  • token 在 worker 启动期校验(fail-soft,只跳过那一条隧道),日志只说错因、不说秘密。
  • 两处有意偏离(用真 cloudflared 二进制证明「它确实接受」):带 e 直接报错;JSON 里未知键的 值是嵌套对象/数字时报错。

验证:token-creds.sh 38 项(含与真 cloudflared 逐 token 交叉核对)、token-tunnel.sh 29 项; 18 支回归全绿;重编 .so 逐字节相同;包内 .so 配官方 nginx 复验 60/60。

0.13.0-1 — 注入连接的来源地址可配 ​

转来的意见:注入的虚拟连接把对端地址写死 127.0.0.1,源站只能写 set_real_ip_from 127.0.0.1; ⇒ 等于信任整个回环。

  • 新增 cfd_tunnel_inject_source_addr / 块内 inject_source_addr(共 38 条)。
  • 默认值刻意保持 127.0.0.1 —— 那正是真 cloudflared 直面本机源站时的样子(对齐的那一侧); 新指令只是给出选择,不改默认行为。
  • 只写 c->sockaddr / c->socklen / c->addr_text 三个自由字段,c->local_sockaddr 不动 ⇒ $server_addr / $server_port 仍是真实监听地址。
  • 边界写清楚:收窄的是「本机任何用户都能冒充实访客 IP」,不是「本机已被攻破也安全」。

验证:inject-source-addr.sh 36 项;16 支回归全绿;15 支旧套件一条断言都没改。

0.12.2-1 — 纯文档版本 ​

把「非 HTTP 服务在传输层丢弃 vs HTTP 类不受支持服务在配置层处置」的边界写进文档。 模块 .so 与 0.12.1-1 逐字节相同,版本进位只因随包文档变了。

0.12.1-1 — 混合模式定案 ​

  • cfd_remote_pick() 的分支顺序改成 http_status:NNN 先于本地端口判断。
  • 结论:本地 inject_listen 替代的是源站,替代不了「不进源站」 —— 命中 http_status:403 / catch-all 404 时仍然直接应答、不进 nginx。
  • remote-config.sh 从 42 项增到 54 项。

0.12.0-1 — 远程配置下发与 Host 覆盖 ​

  • 新增 cfd_tunnel_remote_config / cfd_tunnel_host_override 与块内同名指令。
  • 规则表是运行期 malloc 对象,换代为原子替换;应答 {"lastAppliedVersion":N,"err":null} 逐字节对齐。
  • 默认不收远程配置,features 里也不宣告 allow_remote_config。
  • 只支持 http(s)/ws(s) 端口与 http_status:NNN,其余 service 接受但标记不支持。
  • 新增 cfd_rcfg(规则表)与 cfd_json(自带 JSON 解析器)。

0.11.0-1 — 多隧道 ​

  • cfd_tunnel {} 块:一条隧道一个注入目标端口;扁平写法仍可用,两者不能混用。
  • 失败隔离:一条坏掉不拖累其他;多对一(两条隧道指同一端口)允许。
  • 日志加 [名字] 前缀,扁平那条不带(旧断言一条不改)。

0.10.0-1 — 快速隧道 ​

  • cfd_tunnel_quick_tunnel on:启动时向 api.trycloudflare.com 申请临时隧道(零凭据)。
  • 自带 TCP+TLS 客户端(cfd_tls_client)与环境代理支持(cfd_proxy,项目扩展)。
  • 只走 HTTP/2:provisioning 与服务端必须协商 ALPN=h2,不回落。
  • cfd_tunnel_edge 默认值改成 region1.v2.argotunnel.com:7844;SNI 固定 h2.cftunnel.com。
  • 新增 /usr/bin/cfd-quick-url。

0.9.x 系列 — 加固与背压 ​

版本要点
0.9.5背压夹具调优(拒绝线 35%,预算 512k);打包流程改为「随包文档不自指」
0.9.4停滞判据第 4 层预算淘汰;ASan 口径固定为 29 项
0.9.3构建工具与模板生成器进仓库;干净克隆自洽构建
0.9.2协议层 26 个文件并入模块仓库
0.9.1第 3 层停滞判据收窄为「整窗口零接收」
0.9.0接收侧背压五层 + 连接级窗口早还(默认 on,off 退回严格对齐)

更早的 0.4–0.8 是阶段式落地:协议理解(0.1–0.4)→ 注入 nginx(0.5)→ WebSocket 与流式(0.6)→ 加固与性能(0.7–0.8)。

模块文档 · 对齐依据是 cloudflared 的源码与实测行为