docker buildx bake版本:
latest,main,<TAG>
| Registry | Image |
|---|---|
| Docker Hub | idevsig/cfdns |
| GitHub Container Registry | ghcr.io/idevsig/cfdns |
| Tencent Cloud Container Registry(SG) | sgccr.ccs.tencentyun.com/idevsig/cfdns |
| Aliyun Container Registry(GZ) | registry.cn-guangzhou.aliyuncs.com/idevsig/cfdns |
拉取镜像:
docker pull idevsig/cfdns:latest
# 或者
docker pull ghcr.io/idevsig/cfdns:latest运行命令:
docker run --rm idevsig/cfdns:latest cfspeedtest.sh -t api_token -d example.com -p cf -s 5 -n -o
# gcore
docker run --rm idevsig/cfdns:latest cfspeedtest.sh -t api_token -d example.com -p cf -s 5 -n -o -i gc -u https://hk2-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=1000docker-compose.yml
services:
cfdns:
image: idevsig/cfdns:latest
container_name: cfdns
restart: unless-stopped
environment:
- CLOUDFLARE_API_TOKEN=api_token
- TZ=Asia/Shanghai
command: ["daemon"]运行:
docker compose up -d- 设置定时计划:
# 添加定时计划
docker exec cfdns sh -c "echo '15 4 * * * cd /app; cfspeedtest.sh -d example.com -p cf -r -n' | crontab -"
# 启用
docker exec -d cfdns crond -b -l 8
# 停止计划任务
docker exec cfdns pkill crond
# 强制停止计划任务
docker exec cfdns killall crond
# 重启计划任务
docker exec cfdns pkill -HUP crond
# 或者
docker exec cfdns pkill crond && cronde.g.:
export CLOUDFLARE_API_TOKEN="api_token"
./cfspeedtest.sh -d example.com -p cf -s 2 -n -o或
export CLOUDFLARE_API_TOKEN="api_token"
cd $(mktemp -d) && curl -L https://fastfile.asfd.cn/https://raw.githubusercontent.com/idevsig/cfdns/refs/heads/dev/scripts/cfspeedtest.sh -O && chmod +x cfspeedtest.sh
DEBUG=1 ./cfspeedtest.sh -d 222029.xyz -p xf -n -r -i cf用法: ./cfspeedtest.sh [ 选项 ]
-h, --help 显示帮助信息
-m, --man 显示完整手册
-t, --token <token> Cloudflare API Token
-d, --domain <domain> 域名
-p, --prefix <prefix> 域名前缀
-y, --zone-type <type> 记录类型
-s, --min-speed <speed> 最低下载速度,单位 M(默认: 2)
-q, --quantity <quantity> 记录至 DNS 的条数
-n, --update-dns 更新 DNS 解析记录
-o, --only 只刷新一条主机前缀记录
-i, --ip-url <ip_url> IP 数据源 (cf,gc,ct,aws 或 URL)
-u, --speed-url <url> 测速 URL
-P, --port <port> 测速端口
-c, --cdn <cdn> CDN URL(更新脚本时免代理)
-e, --extend <string> 传递给 cfst 的扩展参数
-r, --refresh 强制刷新 result.csv
e.g.:
export CLOUDFLARE_API_TOKEN="api_token"
./cfspeedtest.sh -d example.com -p cf -s 2 -n -o # 单条记录
./cfspeedtest.sh -d example.com -p cf -s 4 -n -q 3 -r # 多条记录 + 强制刷新
more: ./cfspeedtest.sh -m / --man
-h/--help: 帮助信息
-m/--man: 完整手册(含全部测速 URL 与使用示例)
-t/--token: Cloudflare API Token
-d/--domain: 域名
-p/--prefix: 域名前缀
-y/--zone-type: 域名主机名类型
-s/--min-speed: 下载速度下限,单位M,低于此速度则不记录(默认为2)
-q/--quantity: 记录至 Cloudflare 解析记录的条数
-n/--update-dns: 更新 DNS 解析记录
-o/--only: 只刷新一条主机前缀记录
-i/--ip-url:IP 数据源(支持cf,gc,ct,aws或自定义 URL,数据源详见GCore,CloudFront,AWS)
-u/--speed-url: 速度测试 URL(完整列表见下方章节)
-P/--port: 速度测试端口
-c/--cdn: CDN URL,更新脚本时不需再扶梯
-e/--extend: 扩展参数字符串
-r/--refresh: 强制刷新 result.csv
token, CLOUDFLARE_API_TOKEN 为 Cloudflare API 令牌
-
更新 DNS 记录:参数
-n存在时,结果将更新到域名解析记录中。 -
过滤下载速度:若不带
-o参数,从result.csv中筛选下载速度大于-s指定的速度并更新 DNS。 例如:# result.csv IP 地址,已发送,已接收,丢包率,平均延迟,下载速度 (MB/s) 104.18.31.111,4,4,0.00,169.69,6.36 103.21.244.82,4,4,0.00,182.95,4.63 104.19.84.89,4,4,0.00,184.91,3.82export CLOUDFLARE_API_TOKEN="api_token" ./cfspeedtest.sh -d example.com -p cf -s 4 -n # 将 104.18.31.111 A 记录到 cf1.example.com # 将 103.21.244.82 A 记录到 cf2.example.com ./cfspeedtest.sh -d example.com -p cf -s 4 -n -o # 仅将 104.18.31.111 A 记录到 cf.example.com
-
扩展参数:CloudflareSpeedTest 支持通过
-e参数传递额外的设置。 -
IP 数据源格式:每行一个数据,如:
173.245.48.0/20
cfdns.sh 是 Cloudflare DNS 管理工具,支持记录的查询、创建、更新、删除等操作。
- 依赖:
bash、curl、jq - 需要 Cloudflare API Token,权限至少包含目标域名的
Zone > DNS > Edit
仅支持 API Token(不支持 Global API Key + Email 方式):
# 方式一:环境变量(推荐)
export CLOUDFLARE_API_TOKEN="api_token"
# 方式二:命令行参数
./cfdns.sh -t api_token -ac zonesusage: ./cfdns.sh [ options ]
-h, --help print help
-t, --token <token> set API token
-zi, --zone_id <zone_id> set zone ID
-ri, --record_id <record_id> set record ID
-zy, --zone_type <zone_type> set zone type
-ct, --content <content> set content
-rn, --record_name <record_name> set record name
-pr, --proxied enable proxied
-ac, --action <action> set action| 参数 | 说明 |
|---|---|
-h / --help |
帮助信息 |
-t / --token |
Cloudflare API Token,未指定时读取环境变量 CLOUDFLARE_API_TOKEN |
-zi / --zone_id |
域名(Zone)ID |
-ri / --record_id |
解析记录 ID |
-zy / --zone_type |
记录类型(如 A、AAAA、CNAME、TXT) |
-ct / --content |
记录内容(如 IP 地址、目标域名) |
-rn / --record_name |
记录主机名(如 cf 表示 cf.example.com) |
-pr / --proxied |
启用 Cloudflare 代理(橙色云朵),仅创建记录时有效 |
-ac / --action |
执行的动作(见下表) |
| 动作 | 说明 | 必需参数 |
|---|---|---|
user_token_verify |
验证 Token 有效性 | 无 |
accounts |
列出账户 | 无 |
zones |
列出域名(返回 zone_id zone_name) |
无 |
zones_records |
列出域名下的解析记录 | -zi,可选 -zy 过滤类型 |
get_record |
获取单条记录详情 | -zi、-ri |
export_record |
导出全部记录(BIND 格式) | -zi |
create_record |
创建记录 | -zi、-zy、-rn、-ct,可选 -pr |
update_record |
更新记录内容 | -zi、-ri、-ct |
delete_record |
删除记录 | -zi、-ri |
upsert_record |
记录存在则更新,不存在则创建 | -zi、-zy、-rn、-ct |
set_record |
通过域名/主机名智能设置记录(自动查 Zone ID 与记录 ID) | -zn、-zy、-rn、-ct |
# 验证 Token
./cfdns.sh -ac user_token_verify
# 列出所有域名
./cfdns.sh -ac zones
# 列出某域名下的所有 A 记录
./cfdns.sh -zi <zone_id> -zy A -ac zones_records
# 获取单条记录
./cfdns.sh -zi <zone_id> -ri <record_id> -ac get_record
# 创建 A 记录(开启代理)
./cfdns.sh -zi <zone_id> -zy A -rn cf -ct 104.18.31.111 -pr -ac create_record
# 更新记录内容
./cfdns.sh -zi <zone_id> -ri <record_id> -ct 104.18.31.111 -ac update_record
# 删除记录
./cfdns.sh -zi <zone_id> -ri <record_id> -ac delete_record
# 存在则更新,不存在则创建
./cfdns.sh -zi <zone_id> -zy A -rn cf -ct 104.18.31.111 -ac upsert_record
# 通过域名/主机名智能设置(无需手动查 zone_id / record_id)
./cfdns.sh -zn example.com -zy A -rn cf -ct 104.18.31.111 -ac set_recorddocker run --rm -e CLOUDFLARE_API_TOKEN=api_token idevsig/cfdns:latest \
cfdns -zn example.com -zy A -rn cf -ct 104.18.31.111 -ac set_record设置 DEBUG=1 输出每次请求的方法与 URL(不输出 Token),错误信息一律输出到 stderr:
DEBUG=1 ./cfdns.sh -ac zonesCloudFlare(cfst 已默认。若无下载速度,可使用此)
https://speed.cloudflare.com/__down?bytes=25000000GCore
- 香港:
https://hk2-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=1000- 日本:
https://cc1-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=1000- 新加坡:
https://sg1-speedtest.tools.gcore.com/speedtest-backend/garbage.php?ckSize=1000
ckSize为文件大小,可以自行修改。
CacheFly
https://cachefly.cachefly.net/100mb.testAWS S3(CloudFront / AWS IP 数据源)
CloudFront 无公开通用测速节点,可使用 S3 官方文件:
https://s3.amazonaws.com/aws-cli/awscli-bundle.zip