使用 Cloudflare DDNS
步骤1:获取 API 令牌
登录到您的 Cloudflare 账户。
点击右上角的头像,然后选择 “My Profile” 或 “我的个人资料”。
在左侧导航栏中,选择 “API Tokens” 或 “API 令牌”。
点击 “Create Token” 或 “创建令牌”。
选择 Edit Zone DNS 模板,并确保勾选以下权限:
Zone:Read(区域读取)
DNS:Edit(DNS 编辑)
点击 “Continue to summary” 或 “继续”。
在下一步中,点击 “Create Token” 生成令牌,并妥善保存此令牌。
步骤2:配置 DDNS 脚本
在您的服务器上创建一个脚本文件,例如 cloudflare_ddns.sh。例:root目录下创建cloudflare_ddns.sh,文件路径为/root/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
步骤3:配置 DDNS 脚本
导航到您保存脚本文件的目录。例:文件在/root/cloudflare_ddns.sh
cd /root
运行脚本:bash cloudflare_ddns.sh
步骤4:配置 DDNS 定时运行
输入:crontab -e
按键盘方向键下或者滑动滚轮到文本末尾最后一行
/50 * bash /root/cloudflare_ddns.sh
以上文本意思是每50分钟运行一次
如果你需要每天的 0 点执行,格式就是这样:
0 0 * 命令
如果你需要每隔 10 分钟执行就是这样:
/10 * 命令
然后 按ctrl+x 然后输入y 回车即可保存
如何输出日志:在任意文档新建一个txt文档,文档权限记得赋予写入权限,更换代码为
/50 * bash /root/cloudflare_ddns.sh >> /root/ddnslog.txt 2>&1
/root/ddnslog.txt 2>&1 其中/root/ddnslog.txt 为你文档路径和名字
2>&1 是把标准错误重定向到标准输出,忽略即可
然后查看当前用户的 cron 任务可以使用:
crontab -l
如果在末尾最后一行看到你添加的代码那么已经成功
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。