使用Cloudflare的API服务更新动态IP地址

By | 2019-09-16

Cloudflare是一家CDN服务商,而且提供给一般用户的服务全部都是免费的,非常推荐使用!

        近日使用的DDNS服务停止服务了,国内的DDNS服务商都要实名了,所以找了一下相关资料,可以利用CF的API进行模拟原来的DDNS,免费而且安全,更新速度更快。

准备以下:

1)申请一个域名。(收费或免费)
2)注册CF帐号,并把域名的DNS托管到CF。(这里不介绍了,自行百度吧)

一、登录CF建立一条A记录,并定义动态域名的名称

注: IPV4 address 可以随意填写,因为API会自行更新你实时的IP地址,所以这里填8.8.8.8

二、下面几张图都是CF的界面,把几个API相关的key找到并记录下来

Zone ID 、 Global API Key 、 Record ID (需要使用前两者来获取)

登录到CF,在托管的域名首页(Overview)右下角找到 Zone ID 记录下来

Get your API key 点击进入以下界面

通过验证身份后就会看到以下API KEY了,复制记录下来

要通过代码取得 Record ID

找一台Linux的机子命令行状态上执行以下指令,注意{}中的参数按你自己的实际情况填写,然后把{}去除。

curl -X GET "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records" \
-H "x-auth-email:{[email protected]}" \
-H "x-auth-key:{YOUR_GLOBAL_API_KEY}" \
-H "content-type: application/json"

注:每条DNS记录对应的Record ID不同,所以更换域名后需要重新获取该ID。

三、编写脚本重新CF的DNS记录

以下是脚本内容,存放路径随意,这里脚本命名为cf_flashdns.sh,可以使用cron定时执行该脚本。

【按实际情况修改红字的参数即可】

#!/bin/sh
# 將{ }替換為自己的資料
# GET Recore ID
#curl -x get "https://api.cloudflare.com/client/v4/zones/{YOUR_ZONE_ID}/dns_records" \
#-h "x-auth-email:{[email protected]}" \
#-h "x-auth-key:{YOUR_GLOBAL_API_KEY}" \
#-h "content-type: application/json"

NEW_IP=`curl -s http://ipv4.icanhazip.com`
CURRENT_IP=`cat /tmp/current_ip.txt`

if [ "$NEW_IP" = "$CURRENT_IP" ]
then
        echo "No Change in IP Adddress"
else
curl -X PUT "https://api.cloudflare.com/client/v4/zones/{YOUR_ZONE_ID}/dns_records/{YOUR_RECORD_ID}" \
     -H "X-Auth-Email: {[email protected]}" \
     -H "X-Auth-Key: {YOUR_GLOBAL_API_KEY}" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"{YOUR-DDNS.exampel.com}","content":"'$NEW_IP'","ttl":120,"proxied":false}' > /dev/null
echo $NEW_IP > /tmp/current_ip.txt
fi

最后 chmod +x cf_flashdns.sh 

加入到cron定时任务 [每5分钟]

crontab -e

0 */5 * * * /path/./cf_flashdns.sh

登录到CF后台看看吧,现时刚才建立的A记录ddns的IP地址已经更新为你实时的公网IP地址了。

 

發佈回覆