通过Cloudflare的API很容易实现动态更新IP地址到域名里,可以完美的替代花生壳之类的DDNS,不用出一分钱,有一个域名即可操作。需要将你的域名托管在Cloudflare。
以下是一段实现自动更新IP到Cloudflare的bash脚本:
#!/bin/bash
# Cloudflare 相关信息
CF_API_KEY="2vTgV2ZuaGAesvUQ9DQmnWeQK" # 你的 Cloudflare API 全局密钥
CF_EMAIL="[email protected]" # 你的 Cloudflare 邮箱。
CF_ZONE_ID="ZmqyA2i2QP0uMFhF8f8kP6a3Q" # 你的 Cloudflare 域名区域 ID
CF_RECORD_ID="812TJnBhaKPod2K4WdVTuuZ" # 你的 Cloudflare record ID
# 子域名
SUBDOMAIN="a"
# 查询本机 IP 地址
current_ip=$(curl -s http://api.ipify.org)
# 读取上次保存的 IP 地址
if [ -f "last_ip.txt" ]; then
last_ip=$(cat last_ip.txt)
else
last_ip=""
fi
# 比较 IP 地址
if [ "$current_ip" != "$last_ip" ]; then
echo "IP 地址已变更,更新 Cloudflare 域名记录..."
# 更新 Cloudflare 域名记录
update_result=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"'$SUBDOMAIN'.tyleo.one","content":"'$current_ip'","ttl":1,"proxied":false}')
if [[ $update_result == *"\"success\":true"* ]]; then
echo "IP 地址已成功更新为 $current_ip"
# 保存当前 IP 地址
echo "$current_ip" > last_ip.txt
else
echo "更新失败: $update_result"
fi
else
echo "IP 地址未变更"
fi
参数说明
以上参数可以在Cloudflare 后台获取,但要获取Cloudflare record ID,还需要执行一下代码获取,把脚本中的tyleo.one替换成你自己的域名。子域名哪里可以随便填,执行成功的话会自动添加记录到Cloudflare。
通过代码获取到Cloudflare record ID:
代码需要在Linux下执行,注意:把下面中文的地方替换成你自己的实际参数。
确保你已经安装了 jq 工具,它用于解析 JSON 响应。你可以通过以下方式安装 jq:
sudo apt install jq # Ubuntu/Debian
执行代码后看到输出一串长长的代码,在{"result"}:{"id"}:' 'ID冒号后面这一串就是 Record ID了,复制出来即可。
脚本修改好之后,可以保存为 CF_update_ip.sh
然后赋予执行权限:
chmod +x CF_update_ip.sh
然后输入: bash ./CF_update_ip.sh 即可执行,如果成功了就能看到在Cloudflare上添加了一条记录。
添加crontab定时任务
crontab -e
*/5 * * * * /root/CF_update_ip.sh >> /var/log/CF_update_ip.sh.log 2>&1
0 1 * * 7 echo "" > /var/log/CF_update_ip.sh.log
以上是一条5分钟自动执行一次的示例,可以根据具体情况修改为你系统的路径和时间间隔。
sadfsafdsdfa![表情](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)