变更记录
倒序排列。每一条都对应模块仓库里的一个 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-all404时仍然直接应答、不进 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)。