LovelyWei's 废纸篓

A Noob.

LovelyWei's avatar LovelyWei

利用CloudFlare Api实现DDNS

最近发现学校宿舍移动的宽带有 IPv6 就把吃灰的树莓派翻了出来,然后发现一个问题….IPv6太长了,所以就打算利用CloudFlare Api实现一个DDNS服务

CloudFlare Token

首先,获取你的 Token 博主偷懒直接选择了使用全局 Token(

进入 Overview 界面,可以在右下角找到 Get your API token 的链接

点击 Global API KeyView

输入密码和验证码,即可获得 你的Token

CloudFlare Api

https://api.cloudflare.com/#getting-started-requests

有了 Token 首先先获取下基本信息

curl -X GET "https://api.cloudflare.com/client/v4/zones/$zone_ID" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
     -H "X-Auth-Email:example@example.com"

将其中的

  • X-Auth-Email的值换成登陆的邮箱
  • X-Auth-Key的值更换为Token
  • zone ID 换成查看到的zone ID

zone ID可以在上面 Global API Key 上方看到

执行此段shell脚本,可以看到账户的个人信息

设置DNS

点击DNS,关于绑定 Cloudflare nameservers 就不详细介绍了,在购买域名服务商处将NameServer/域名服务器

博主下面演示的是绑定IPv6地址的脚本和操作,IPv4自行更换几个地方就好

创建一个AAAA记录(这个是IPv6版本的A记录)

  • Name处填入自己想要的二级域名,若填@符号则设置的是根域名
  • address先随便填写一个

最后将Cloudflare的代理 Proxy 关闭 Save

使用API获取DNS记录的ID

使用以下脚本

curl -X GET "https://api.cloudflare.com/client/v4/zones/$zone_ID/dns_records" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
     -H "X-Auth-Email:example@example.com"

找到刚刚设置的域名ID

如果太过凌乱可以将域名修改为
https://api.cloudflare.com/client/v4/zones/$zone_ID/dns_records?type=AAAA&name=刚刚设置的域名(记得写全)

IPv4 type 修改为 A

自动更新DNS记录

$CURRENT_IP=$(curl -s ipv6.ip.sb)
curl -X GET "https://api.cloudflare.com/client/v4/zones/$zone_ID/dns_records/$dns_ID" \
     -H "Content-Type:application/json" \
     -H "X-Auth-Key:1234567893feefc5f0q5000bfo0c38d90bbeb" \
     -H "X-Auth-Email:example@example.com"
     --data '{"type":"AAAA","name":"'$DNS_RECORD'","content":"'$CURRENT_IP'","ttl":1,"proxied":false}'
  • $dns_ID修改为自己的dns ID
  • $DNS_RECORD修改为自己的记录名称(写全/如:”test.hex.moe”)
  • $CURRENT_IP修改为自己想使用的IP

IPv4 type 修改为 A

在上面的代码中,我用了 ipv6.ip.sb 来获取自己的IPv6地址

设置crontab

crontab -e

添加一行

*/1 * * * * /root/setDNS.sh

一分钟执行一次 setDNS.sh (将后方的路径修改为自己的)

后记

一分钟获取一次地址会不会太频繁了….之后考虑一下从本机读取吧…

This blog is under a CC BY-NC-SA 3.0 Unported License
Link to this article: https://hex.moe/p/aaafb04f/