欢迎来到 AkileCloud Wiki 的 Cloudflare 动态 DNS(DDNS)教程!Cloudflare 的 DDNS 功能允许您通过 API 更新您的域名解析记录,使其适用于动态 IP 地址。当检测到 IP 变化或记录不存在时,脚本会自动创建或更新 DNS 记录。
如果您还没有 Cloudflare 账户,请访问 Cloudflare 官方网站 并进行注册。
注意:API 令牌生成后将不再显示,因此请确保妥善记录。
在您的服务器上创建一个脚本文件,例如 cloudflare_ddns.sh。
使用您喜欢的文本编辑器打开该文件。
将以下脚本内容粘贴到文件中,并用您的信息替换 your_api_token、your_zone_id、your_record_name.example.com。
#!/bin/bash
# 配置 Cloudflare 信息
auth_token="your_api_token" # Cloudflare API Token
zone_identifier="your_zone_id" # Cloudflare 区域 ID
record_name="your_record_name.example.com" # 要同步的记录名称
# 开始脚本
echo "正在检查 IP 更新..."
# 获取当前外网 IP
ip=$(curl -s4 https://icanhazip.com/)
if [[ -z "$ip" ]]; then
echo "错误: 无法获取外部网络 IP。" >&2
exit 1
fi
echo "当前外部 IP: $ip"
# 设置认证头
auth_header=(-H "Authorization: Bearer $auth_token")
# 获取当前 DNS 记录
record=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name&type=A" \
"${auth_header[@]}" -H "Content-Type: application/json")
# 检查记录是否存在
if [[ -z "$record" ]] || [[ "$record" == *'"count":0'* ]]; then
echo "DNS 记录不存在,正在创建新记录..."
# 创建新的 DNS 记录
create=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records" \
"${auth_header[@]}" -H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$ip\",\"ttl\":120,\"proxied\":false}")
# 检查创建结果
if echo "$create" | grep -q '"success":true'; then
echo "DNS 记录创建成功。IP: $ip"
else
echo "错误: DNS 记录创建失败。响应: $create" >&2
exit 1
fi
exit 0
fi
# 提取记录 ID 和当前的 IP 地址
record_identifier=$(echo "$record" | sed 's/.*"id":"\([^"]*\)".*/\1/')
old_ip=$(echo "$record" | sed 's/.*"content":"\([^"]*\)".*/\1/')
echo "当前 DNS IP: $old_ip"
# 如果 IP 没有变化,则退出
if [[ "$ip" == "$old_ip" ]]; then
echo "IP 地址未更改,更新已取消。"
exit 0
fi
# 更新 DNS 记录
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" \
"${auth_header[@]}" -H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$ip\",\"ttl\":120,\"proxied\":false}")
# 检查更新结果
if echo "$update" | grep -q '"success":true'; then
echo "更新成功。旧 IP: $old_ip, 新 IP: $ip"
else
echo "错误: 更新失败。响应: $update" >&2
exit 1
fi
保存并退出编辑器。
bash cloudflare_ddns.sh您可以使用定时任务来定期运行 DDNS 脚本,以便在 IP 地址变化时自动更新域名解析记录。以下是一个 cron 示例,将 DDNS 脚本每小时运行一次。
打开终端或命令行界面。
输入 crontab -e 并按 Enter 键。
在 crontab 编辑器中添加以下行,然后保存并关闭编辑器:
1/* * * * * /bin/bash /path/to/cloudflare_ddns.sh
将 /path/to/cloudflare_ddns.sh 替换为实际脚本文件的路径。
注意:这是一个基本教程,实际操作可能会有所不同。根据您的实际情况和需求,进行适当的调整。如需更多详细信息,请查阅 Cloudflare 官方文档或联系其支持团队。