Dnspod的动态域名设置很简单,反过来说,也是因为功能有限,所以才简单。
-
#获取domain_id curl -X POST https://dnsapi.cn/Domain.Info -d 'login_token=13834,fe01aa05aded8ada9c3e984fb6144cd7&format=json&domain=uselys.cn' #获取record_id curl -X POST https://dnsapi.cn/Record.List -d 'login_token=13834,fe01aa05aded8ada9c3e984fb6144cd7&format=json&domain=uselys.cn' #提交域名更新。每小时限5次。 curl -s -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=13834,fe01aa05aded8ada9c3e984fb6144cd7&format=json&domain=uselys.cn&record_id=184261226&record_line=默认&sub_domain=home'
就这么三步。
燃鹅国产dns的问题,大家也都心知肚明。还有那些花生壳之类的,真要用在生产环境下要多纠结有多纠结,跑起来晃悠悠的,死起来直挺挺的。
所以Cloudflare动态域名解析才是我们真正需要的。用的人不多的主要原因,可能是在获取二级域名的id的麻烦上,确实很操蛋。
https://api.cloudflare.com/
Cloudflare API手册,是必备工具,里面详细写明了几乎所有功能的用法。不过要理解的话,必须照着手册去试错。
现在就直接给出答案吧,不浪费大家的时间。
1. 主机里必须安装 curl, 这是跟API通讯的基本工具。
2. 获取域名的Zone ID、账号Email、API Keys(我直接使用Global API Key)。
3. 获取二级域名的ID号,这是最眼花缭乱的一步,很多朋友大概就止步于此。
首先要先设置一个二级域名,比如home.uselys.cn ,IP地址随便填,记住这个 home。
然后获取home的ID号:
https://api.cloudflare.com/#dns-records-for-a-zone-list-dns-records
上面是说明书的具体章节。
然后是命令样本:
API_URL=$(/usr/local/bin/curl -s http://whatismyip.akamai.com) /usr/local/bin/curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/cc837e5e8b25acc36fab40fdf98dcaf9/dns_records/a3365e7fa46ec326cf8ca153e6d7fe5c" \ -H "X-Auth-Email: service@uselys.cn" \ -H "X-Auth-Key: a79efe70d7bcdc3rd4763676f3437e412f002" \ -H "Content-Type: application/json" \ --data "{"type":"A","name":"source","content":"$API_URL","ttl":300,"proxied":false}" \ > /dev/null
我一开始总是把Zone Details 和 List DNS Records 搞错,实际上是 List DNS Records。
- /zones/023e105f4ecef8ad9ca31a8372d0c353
复制代码
这一段/zones/后面的字符串改成 域名的ID号
- /dns_records?type=A&name=example.com&content=127.0.0.1&page=1&per_page=20&order=type&direction=desc&match=all"
复制代码
这一段只需要保留问号前面的内容,问号后面都是参数,实际上我们用不着。
结果就是这样:
- curl -X GET
- "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records"
X-Auth-Email 和 X-Auth-Key 改成自己的实际参数就好了。
最终,命令是这样的:
- curl -X GET "https://api.cloudflare.com/client/v4/zones/cc837e5e8b25acc36fab40fdf98dcaf9/dns_records" -H "X-Auth-Email: service@uselys.cn" -H "X-Auth-Key: a79efe70d7bcdc3rd4763676f3437e412f002" -H "Content-Type: application/json"
记得把发斜杠去掉,做成一个一行命令,然后在命令行执行,结果如下:
-
{"result":[{"id":"a3365e7fa46ec326cf8ca153e6d7fe5c","type":"A","name":"home.uselys.cn","content":"111.111.111.111","proxiable":true,"proxied":false,"ttl":1,"locked":false ......
home.uselys.cn 前面的id值 a3365e7fa46ec326cf8ca153e6d7fe5c 就是二级域名 home 的id。
到此,参数配齐了!
4. 获取本机IP
- curl -s http://whatismyip.akamai.com
复制代码
获取本机IP的方式有很多种,这种比较直观把。
5. 更新home的IP,说明书具体章节:
- https://api.cloudflare.com/#dns-records-for-a-zone-update-dns-record
复制代码
章节名称是:Update DNS Record
命令样本:
- curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \
- -H "X-Auth-Email: user@example.com"
- \
- -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41"
- \
- -H "Content-Type: application/json" \
- --data '{"type":"A","name":"example.com","content":"127.0.0.1","ttl":120,"proxied":false}'
复制代码
这时候,所有的参数我们都已经知道,把对应的参数都修改成自己的实际参数即可。然后把 content 的值换成 222.222.222.222 试试看。如果成功了,这一步就算完成了。
6. 把获取IP、更改IP连个步骤组合成一个sh脚本:
- API_URL=$(/usr/local/bin/curl -s http://whatismyip.akamai.com)
- /usr/local/bin/curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/cc837e5e8b25acc36fab40fdf98dcaf9/dns_records/a3365e7fa46ec326cf8ca153e6d7fe5c" \
- -H "X-Auth-Email: service@uselys.cn" \
- -H "X-Auth-Key: a79efe70d7bcdc3rd4763676f3437e412f002" \
- -H "Content-Type: application/json" \
- --data "{"type":"A","name":"source","content":"$API_URL","ttl":300,"proxied":false}" \
- > /dev/null
复制代码
注意,content的参数换成了 变量 $API_URL。
保存为 cf.sh,并给它赋予执行权限。 如此一来,每执行一次,home.uselys.cn 的IP就更新一次。
7. 最后一步,把 cf.sh 放到 crontab 里面,按照你设想的时间频率运行即可。
完工。
文章评论