国内动态IP自动更新到Cloudflare DNStitle: 国内动态IP自动更新到Cloudflare DNS

分类
教程
标签
教程经验分享DNS

Cloudflare为我们提供了非常丰富的API,我们可以通过API实现对DNS记录的增删改查。这里我们使用Cloudflare的API来实现动态IP的更新。
首先,我们需要一个Cloudflare的账号,并且在Cloudflare上添加一个域名。
访问 https://dash.cloudflare.com/profile/api-tokens 获取你的API Key,注意给予该API Key适当的权限(区域资源)。
然后,我们需要一个脚本来实现动态IP的更新。这里我们使用bash脚本来实现,脚本如下:
1#!/usr/bin/env bash 2set -o errexit 3set -o nounset 4set -o pipefail 5# 配置 6CFKEY=<请修改为你的CFKEY> 7CFUSER=<请修改为你的CFUSER> 8CFZONE_NAME=<请修改为你的CFZONE_NAME 如cunoe.com> 9CFRECORD_NAME=<请修改为你的CFRECORD_NAME 如blog.cunoe.com> 10CFRECORD_TYPE=<根据你的DNS类型修改 A or AAAA> 11CFTTL=120 12# 通过该网站获取WAN IP 13WANIPSITE="<http://ipv4.icanhazip.com>" 14if [ "$CFRECORD_TYPE" = "A" ]; then 15 : 16elif [ "$CFRECORD_TYPE" = "AAAA" ]; then 17 WANIPSITE="<http://ipv6.icanhazip.com>" 18else 19 echo "$CFRECORD_TYPE DNS类型无效(只支持 A or AAAA)" 20 exit 2 21fi 22# 检查是否有必要的配置 23if [ "$CFKEY" = "" ]; then 24 echo "ApiKey无效,请查看: <https://dash.cloudflare.com/profile/api-tokens>" 25 exit 2 26fi 27if [ "$CFUSER" = "" ]; then 28 echo "用户名无效" 29 exit 2 30fi 31if [ "$CFRECORD_NAME" = "" ]; then 32 echo "记录名无效" 33 exit 2 34fi 35# 域名不合法 36if [ "$CFRECORD_NAME" != "$CFZONE_NAME" ] && ! [ -z "${CFRECORD_NAME##*$CFZONE_NAME}" ]; then 37 CFRECORD_NAME="$CFRECORD_NAME.$CFZONE_NAME" 38 echo " => 域名不合法 $CFRECORD_NAME" 39fi 40# 获取WAN IP 41WAN_IP=`curl -s ${WANIPSITE}` 42# 获取 Cloudflare 的 zone_identifier & record_identifier 43CFZONE_ID=$(curl -s -X GET "<https://api.cloudflare.com/client/v4/zones?name=$CFZONE_NAME>" -H "X-Auth-Email: $CFUSER" -H "X-Auth-Key: $CFKEY" -H "Content-Type: application/json" | jq -r ".result[0].id" ) 44CFRECORD_ID=$(curl -s -X GET "<https://api.cloudflare.com/client/v4/zones/$CFZONE_ID/dns_records?name=$CFRECORD_NAME>" -H "X-Auth-Email: $CFUSER" -H "X-Auth-Key: $CFKEY" -H "Content-Type: application/json" | jq -r ".result[0].id" ) 45echo "CFZONE_ID=$CFZONE_ID" 46echo "CFRECORD_ID=$CFRECORD_ID" 47 48echo "Updating DNS to $WAN_IP" 49RESPONSE=$(curl -s -X PUT "<https://api.cloudflare.com/client/v4/zones/$CFZONE_ID/dns_records/$CFRECORD_ID>" \\ 50 -H "X-Auth-Email: $CFUSER" \\ 51 -H "X-Auth-Key: $CFKEY" \\ 52 -H "Content-Type: application/json" \\ 53 --data "{\\"id\\":\\"$CFZONE_ID\\",\\"type\\":\\"$CFRECORD_TYPE\\",\\"name\\":\\"$CFRECORD_NAME\\",\\"content\\":\\"$WAN_IP\\", \\"ttl\\":$CFTTL}") 54if [ "$RESPONSE" != "${RESPONSE%success*}" ] && [ "$(echo $RESPONSE | grep "\\"success\\":true")" != "" ]; then 55 echo "成功更新" 56 exit 57else 58 echo '响应错误' 59 echo "Response: $RESPONSE" 60 exit 1 61fi 62
你可能需要安装jq来解析JSON数据。
1sudo apt install jq 2
填入相关信息,保存为cf-ddns.sh,并添加执行权限。
1chmod +x cf-ddns.sh 2./cf-ddns.sh 3
这样,你的DNS记录就会自动更新到你的动态IP了。
通过 crontab 定时执行该脚本,实现动态IP的自动更新。
1crontab -e 2
添加一行:
10 4 * * * /path/to/cf-ddns.sh 2
这样,每天凌晨4点,你的DNS记录就会自动更新到你的动态IP了。