使用CloudFlare做DDNS解析(API Token)

文章目录
[隐藏]

之前的那篇 使用CloudFlare做DDNS解析(Global API)操作起来很方便,但是使用 Global API KEY 始终让我感觉很危险,所以这里我们使用 API Token(API 令牌)来实现,更加安全。

通过10几个小时的研究,参考了几篇文章,我发现原来的脚本只要稍作修改就能以 API Token 的方式实现 DDNS。

所以整体流程为:

  1. 设置DNS解析到Cloudflare;
  2. 申请 API Token;
  3. 下载我修改好的脚本,填入对应的参数;
  4. 设置定时运行脚本。

DNS解析到Cloudflare这个就不再说了,可见前一篇DDNS文章。

申请API Token

Cloudflare 页面点击右上角 我的个人资料——API 令牌(或直接访问 https://dash.cloudflare.com/profile/api-tokens),开始申请:

Cloudflare

Cloudflare

Cloudflare

Cloudflare

Cloudflare

下载修改的DDNS 脚本

wget -N --no-check-certificate http://pikachu.im/script/cf-v4-ddns-API-Token.sh && chmod +x cf-v4-ddns-API-Token.sh

这里我们把脚本下载到 root 目录

编辑 DDNS 脚本,填写相关参数

vi cf-v4-ddns-API-Token.sh

# 这里填写刚才获取的API Token
CFKEY=

# 填写登陆CF的邮箱
CFUSER=

#这里填写解析用来DDNS解析的根域名 eg: example.com,比如我的域名是123.com,那么此处填写123.com
CFZONE_NAME=

#这里填写解析用来DDNS解析的子域名 eg: a.example.com
CFRECORD_NAME=

如图填写:

Cloudflare

 

保存退出后执行:

./cf-v4-ddns-API-Token.sh

如果有 success 等字样就是成功了。

这个脚本会记录每次的数据,如果执行后发现 IP 没有变化,不会更新。

脚本我进行了小小的修改,取消了对 Global API KEY 的依赖。因个人水平,可能脚本存在问题,请谨慎使用。

原作者的地址为:https://raw.githubusercontent.com/yulewang/cloudflare-api-v4-ddns/master/cf-v4-ddns.sh

 

设置定时任务

上一篇里面已经有了这个内容,这里还是再展示一下:

输入 crontab -e ,在文件里面添加一行:

*/2 * * * * /root/cf-v4-ddns-API-Token.sh >/dev/null 2>&1

如果需要日志文件,上述代码请替换成下面代码

*/2 * * * * /root/cf-v4-ddns-API-Token.sh >> /var/log/cf-ddns.log 2>&1


另一个精简脚本

后来还发现了简单型的脚本:

#!/bin/sh
NEW_IP=`curl -s http://ipv4.icanhazip.com`
CURRENT_IP=`cat ~/tmp/current_ip.txt`
CURRENT_TIME=$(date +"%F %T")
DDNS="ddns.huanyichuang.com"
ZONE_ID=""
API_TOKEN=""
RECORD_ID=""
if [ "$NEW_IP" = "$CURRENT_IP" ]
then
        echo "[$CURRENT_TIME] No Change in IP Adddress" >> ~/tmp/crontab_log.txt
else
curl -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
     -H "Authorization: Bearer $API_TOKEN" \
     -H "Content-Type: application/json" \
     --data '{"type":"A","name":"'$DDNS'","content":"'$NEW_IP'","ttl":1,"proxied":false}' > /dev/null
echo $NEW_IP > ~/tmp/current_ip.txt
echo "[$CURRENT_TIME] IP changed to $NEW_IP" >> ~/tmp/crontab_log.txt
fi

作者:https://huanyichuang.com/blog/create-ddns-with-cloudflare-api-v4/

这个脚本特别简单(代码少),也是会进行简单的本地数据记录,执行时会进行对比,有更改就会执行更新,没有更改就提示后退出。这个脚本可作为参考。

只是其中的几个参数需要自己获取。可见后面的附录。


附录

cloudflare另外2个关键的KEY:Zone ID、Record ID 的获取方法。

Zone ID

点击我们用来做DDNS解析的域名,进入域名的概述页面,右下角就能查看到 Zone ID(区域 ID)。

Cloudflare

Record ID

Record ID 代表一个记录,利用子域名生成可与子域名绑定。(之前我以为 Record ID是全局的、类似 Zone ID的参数,可以反复在各个子域名使用,结果导致各个子域名的解析互相覆盖。。。困惑了我很久。现在明白了,利用下面的方式可生成与你子域名绑定的 Record ID

用 Zone ID + 子域名 + API Token 可以获取 Record ID

在终端输入下面的命令即可获取 Record ID:

curl -X GET "https://api.cloudflare.com/client/v4/zones/$CFZONE_ID/dns_records?name=$CFRECORD_NAME" \
-H "Authorization: Bearer $CFKEY" \
-H "content-type: application/json"

如下图:

Cloudflare

打赏
欢迎转载,请注明出处:轻时代 » 使用CloudFlare做DDNS解析(API Token)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    感谢 原来是放在header字段里使用自定义令牌

    过客3年前 (2022-02-11)回复

打赏一下作者,鼓励他发表更多的精彩文章

支付宝扫一扫打赏

微信扫一扫打赏