说明:
1.该脚本需在Linux操作系统下运行,并配合crontab定时运行,请确保crond服务处于开启状态,建议1分钟检测一次IP变动,配置如下:
crontab -e
*/1 * * * * cfddns.sh
2.APIKEY和ZONE ID的具体获取方法参照以往发布过的说明:https://www.zavierlab.com/post/52.html
以下为A记录脚本内容(适用于动态IPv4):
#!/bin/sh
CF_API_KEY=
CF_ZONE_ID=
#Your cloudflare E-mail
EMAIL=
#Your network device, e.g.,eth0
ROUTER_NETWORK_DEVICE=
#Your DNS record, e.g.,www.domain.com
DNS_RECORD=
CF_DNS_ID=$(curl -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records?type=A&name=${DNS_RECORD}" -H "X-Auth-Email:${EMAIL}" -H "X-Auth-Key:${CF_API_KEY}" -H "Content-Type: application/json"|sed 's/,/\n/g'|grep -E "result.*id"|awk -F ":" '{print $3}'|sed 's/"//g')
CURRENT_RESOLV=$( curl -k -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_DNS_ID}" \
-H "X-Auth-Email:${EMAIL}" \
-H "X-Auth-Key:${CF_API_KEY}" \
-H "Content-Type: application/json" |awk -F '"' '{print $26}' )
CURRENT_IP=$( ifconfig $ROUTER_NETWORK_DEVICE | awk -F'[ ]+|:' '/inet /{print $4}' )
if [ $CURRENT_RESOLV == $CURRENT_IP ];
then
exit 1
else
curl -k -X PUT "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_DNS_ID}" \
-H "X-Auth-Email:${EMAIL}" \
-H "X-Auth-Key:${CF_API_KEY}" \
-H "Content-Type: application/json" \
--data '{"type":"A","name":"'$DNS_RECORD'","content":"'$CURRENT_IP'","ttl":1,"proxied":false}'
fi
以下为AAAA记录DDNS脚本(适用于动态ipv6):
#!/bin/sh
CF_API_KEY=
CF_ZONE_ID=
#Your cloudflare E-mail
EMAIL=
#Your network device, e.g.,eth0
ROUTER_NETWORK_DEVICE=
#Your DNS record, e.g.,www.domain.com
DNS_RECORD=
CF_DNS_ID=$(curl -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records?type=AAAA&name=${DNS_RECORD}" -H "X-Auth-Email:${EMAIL}" -H "X-Auth-Key:${CF_API_KEY}" -H "Content-Type: application/json"|sed 's/,/\n/g'|grep -E "result.*id"|awk -F ":" '{print $3}'|sed 's/"//g')
CURRENT_RESOLV=$( curl -k -X GET "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_DNS_ID}" \
-H "X-Auth-Email:${EMAIL}" \
-H "X-Auth-Key:${CF_API_KEY}" \
-H "Content-Type: application/json" |awk -F '"' '{print $26}' )
CURRENT_IP=$( ifconfig $ROUTER_NETWORK_DEVICE |grep "prefixlen 128"|awk '{print $2}' )
if [ $CURRENT_RESOLV == $CURRENT_IP ];
then
exit 1
else
curl -k -X PUT "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_DNS_ID}" \
-H "X-Auth-Email:${EMAIL}" \
-H "X-Auth-Key:${CF_API_KEY}" \
-H "Content-Type: application/json" \
--data '{"type":"AAAA","name":"'$DNS_RECORD'","content":"'$CURRENT_IP'","ttl":1,"proxied":false}'
fi
评论 (0)