Skip to content

feat: 新增独立 DDNS 客户端 cq_ddns_client - #21

Merged
mcoder2014 merged 1 commit into
masterfrom
feat/cq/ddns_client
Sep 13, 2026
Merged

mcoder2014 merged 1 commit into
masterfrom
feat/cq/ddns_client

Conversation

@mcoder2014

@mcoder2014 mcoder2014 commented Sep 13, 2026 •

Copy link
Copy Markdown
Owner

将原 home_server/client 的 Cloudflare DDNS 能力迁入 life_tools,命令名为 cq_ddns_client。客户端直接查询公网 IP 和 Cloudflare,不再依赖 home_server 源码或服务。

主要行为

  • 默认读取 /etc/life_tools/cq_ddns_client.json,保留旧 YAML 配置和 -conf 参数;接入根安装/构建脚本、四平台发布包、示例配置及 systemd 模板。
  • 保留启动即刷新、每 120 秒刷新、IPv4/IPv6 与 SOCKS5 支持。新增 -once 和只读 -dry-run,便于迁移检查。
  • 按域名和记录类型匹配 DNS;更新保留 TTL、Proxied,创建沿用 TTL 300、Proxied false。无效 IP 不写入 DNS,单域失败继续处理其他域名。
  • 不再记录 Token、完整配置或 SDK 认证头;保留固定 Cloudflare SDK 传输错误的恢复边界,避免网络故障导致进程崩溃。

验证

在 SSH 别名 pi 的测试目录验证(Ubuntu 24.04.4,Linux amd64,Go 1.21.12,systemd 255):

  • go test -mod=readonly ./...、go test -race -mod=readonly ./cli/cq_ddns_client、./build.sh 通过。
  • Linux/macOS 的 amd64、arm64 共 4 个目标构建通过;仅 Linux amd64 进行实机运行。
  • 隔离安装两次,配置权限为 0600,已有配置不覆盖。
  • 旧 YAML 预检、等价 JSON 单次刷新成功;最终 systemd 模板完成两轮刷新,间隔 120 秒,无重启,停止退出码为 0,日志未包含 Token。
  • 创建、更新、类型区分、属性保留、IP 查询兜底、HTTP/传输错误和请求取消由 loopback 集成用例覆盖。

真实 DNS 地址未变化,实机验证未执行实际 DNS 修改,因此不宣称已验证 Cloudflare 写权限。原 home_client 服务保持运行,测试服务和密钥副本已清理。

迁移顺序

先合入本 PR,再合入 home_server 的旧客户端移除 PR:mcoder2014/home_server#20 。常驻服务切换独立执行,旧二进制、YAML 和 unit 在验证完成前保留。使用、切换和回滚步骤见 docs/cli/cq_ddns_client.md。

@mcoder2014
mcoder2014 merged commit 9222707 into master Sep 13, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant