一个基于Cloudflare API的DDNS脚本

现在可以使用的DDNS工具和软件有很多,但有时候我们只需要一个简单的shell脚本就能完成任务。 1、在Cloudflare上建立一个二级域名 首先,前往Cloudflare上,建立用来作为DDNS用的A记录和AAAA记录。假设是: A记录: ddns.example.com 1.1.1.1 AAAA记录: ddns.example.com 2606:4700:4700::1111 IP地址先可以随便填。 2、取得所需的ZONE_ID、API_Token和RECORD_ID ZONE_ID就在域名概述页的右下侧,名字为区域ID。 接着,在同一页的下方点击获取API 令牌。 点击创建令牌,使用“编辑区域DNS”的模板,选择相应的域名,点击显示摘要,并创建令牌。 把生成的API_Token保存好。 接着打开一个Linux终端,执行以下代码: 1 2 3 4 5 ZONE_ID="你的 Zone ID" API_TOKEN="你的API Token" curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=ddns.example.com" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" 注意替换代码中的ZONE_ID,API_Token,二级域名。 在返回的结果中,找到“name”与相应二级域名相符的RECORD_ID。 3、建立Shell脚本 在你喜欢的位置比如root目录建立一个脚本文件: 1 mkdir cfddns && cd cfddns 1 touch ddns.sh 然后用编辑器打开: 1 vim ddns.sh 复制以下代码,并保存退出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #!/bin/sh # 简单的使用Clodflare API来实现DDNS的脚本 NEW_IPv4=$(curl -s http://ipv4.icanhazip.com) NEW_IPv6=$(curl -s http://ipv6.icanhazip.com) CURRENT_IPv4=$(cat $(dirname "$0")/current_ipv4.txt) CURRENT_IPv6=$(cat $(dirname "$0")/current_ipv6.txt) CURRENT_TIME=$(date +"%F %T") # 填入DDNS域名 DDNS="ddns.example.com" # ZONE_ID在Clouflare域名页面上获取 ZONE_ID="1234567890abcdef1234567890abcdef" # API_TOKEN在Clouflare个人资料页面上创建 API_TOKEN="1234567890abcdef1234567890abcdef" # RECORD_ID获取应执行以下代码: # ZONE_ID="你的 Zone ID" # API_TOKEN="你的API Token" # curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=example.com" \ # -H "Authorization: Bearer $API_TOKEN" \ # -H "Content-Type: application/json" RECORD_ID="1234567890abcdef1234567890abcdef" if [ -z "$NEW_IPv4" ] && [ -z "$NEW_IPv6" ]; then echo "[$CURRENT_TIME] Failed to get IP address" >> $(dirname "$0")/crontab_log.txt exit 1 elif [ "$NEW_IPv4" = "$CURRENT_IPv4" ] && [ "$NEW_IPv6" = "$CURRENT_IPv6" ]; then echo "[$CURRENT_TIME] No change in IP address" >> $(dirname "$0")/crontab_log.txt else if [ -n "$NEW_IPv4" ] && [ "$NEW_IPv4" != "$CURRENT_IPv4" ]; then curl -k -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_IPv4'","ttl":1,"proxied":false}' > /dev/null echo "$NEW_IPv4" > $(dirname "$0")/current_ipv4.txt echo "[$CURRENT_TIME] IPv4 address changed to $NEW_IPv4" >> $(dirname "$0")/crontab_log.txt fi if [ -n "$NEW_IPv6" ] && [ "$NEW_IPv6" != "$CURRENT_IPv6" ]; then curl -k -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":"AAAA","name":"'$DDNS'","content":"'$NEW_IPv6'","ttl":1,"proxied":false}' > /dev/null echo "$NEW_IPv6" > $(dirname "$0")/current_ipv6.txt echo "[$CURRENT_TIME] IPv6 address changed to $NEW_IPv6" >> $(dirname "$0")/crontab_log.txt fi fi 下方是一个更简单的仅有IPV4 DDNS的脚本,有需要的自取。 ...

March 31, 2023 · 2 min · stayyoung