Cloudflare动态域名解析才是我们真正需要的。用的人不多的主要原因,可能是在获取二级域名的id的麻烦上,确实很难受。
Cloudflare API手册,是必备工具,里面详细写明了几乎所有功能的用法。不过要理解的话,必须照着手册去试错。
设置教程
1. 主机里必须安装 curl, 这是跟API通讯的基本工具。
2. 获取域名的Zone ID、账号Email、API Keys(我直接使用Global API Key)。
3. 获取二级域名的ID号,这是最眼花缭乱的一步,很多朋友大概就止步于此。 首先要先设置一个Cloudflare二级域名,比如home.51sec.org ,IP地址随便填,记住这个 home。
然后获取home的ID号:
https://api.cloudflare.com/#dns-records-for-a-zone-list-dns-records
上面是说明书的具体章节。然后是命令样本:
curl -X GET "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records?type=A&name=example.com&content=127.0.0.1&page=1&per_page=20&order=type&direction=desc&match=all"
- -H "X-Auth-Email: [email protected]"
- -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41"
- -H "Content-Type: application/json"
我一开始总是把 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: [email protected]" -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: [email protected]" -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: [email protected]" -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 里面,按照你设想的时间频率运行即可。