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了。