godaddy域名服务商提供api接口供调用修改域名各个参数配置,同样的dns也属于域名参数的一种,我们可以修改域名dns指向实现域名和ip绑定的变更。同样的我们可以通过脚本的形式定期执行修改实现动态dns服务。
https://developer.godaddy.com/doc/endpoint/domains#/v1/recordReplace
或者
https://developer.godaddy.com/doc/endpoint/domains#/v1/recordReplaceTypeName
该网址是godaddy api文档地址,其中v1/recordReplace则是实现ddns的方法,而recordReplacetypename则更加细分修改的内容,为了方便理解,以recordReplace为例,api范例中recordReplace模板有明确的header信息,header不管是哪个api都需要使用,而recordReplacetypename范例有时候加载不出来,不写header会直接422错误。
如图,这里包含了4个重要组成部分,下图只展示了三个:
四个重要组成部分分别是:
1、调用api路径
2、调用api所需要修改的域名
3、修改的内容(包括请求头信息和body信息都要按照官方的格式来)
4、以json格式发送内容,如果在头中设定格式位xml,可已发送xml,一般都是用json
第四点其实是需要注意的,老手当然会有所认识,新人再没有注意发送格式的情况下用别人的脚本有时候会忽略掉json形式发送,然后返回各种错误;
点击execute执行,官方会给出shell形式的请求范例,如图:
curl范例分析:
1、方法:PUT
2、请求路径:request_url(正式环境去掉ote-)
3、请求头head:-H后面的head信息,我们需要修改的是Authorization对应的自己域名的KEY和PASSWORD
key的生成地址是:https://developer.godaddy.com/keys#
4、修改信息body:-d后面的内容
为了方便,使用python3作为范例:
import requests
import json
#修改内容体
records = {
#修改的域名
"data": "6.6.6.6",
#指向方式
"name": "@",
#指向端口
"port": 80,
#ttl时间,最小600
"ttl": 600,
#指向形式
"type": "A"
}
#请求头
head = {
'accept':'application/json',
'Content-Type':'application/json',
#需要改为自己的key和pd
'Authorization':'sso-key e4MzyMjQmALJ:KNtBGcWWmL'
}
#官方的默认dns信息,统一的,如果不带上,会返回422错误
records_NS01 = {
"data": "ns07.domaincontrol.com",
"name": "@",
"ttl": 3600,
"type": "NS"
}
records_NS02 = {
"data": "ns08.domaincontrol.com",
"name": "@",
"ttl": 3600,
"type": "NS"
}
#组件发送信息,信息要转成json形式,可以在发送转也可以生成的时候转,我直接在生成数据转了
put_data =json.dumps([records,records_NS01,records_NS02])
print(put_data)
#请求的url,根据自己的域名变更范例的url
url = 'https://api.godaddy.com/v1/domains/hires.com/records'
#或者u1 ='https://api.ote-godaddy.com/v1/domains/hires.com/records/A/@'
#以put形式发送
req = requests.put(url,headers=head,data=put_data)
code = req.status_code
print(code)
结果:
godaddy后台页面:
这里已经实现了通过脚本修改域名的dns,那么如何构建ddns?
我自己的方案是:
树莓派上放了python3的域名ip修改脚本和3分钟执行一次的当前ip地址获取的脚本,如果当前ip和上一次ip地址不一样,这调用修改脚本直接掉godaddy的api修改为当前ip地址实现域名动态的绑定,你要说会有延时?那肯定会有延时了,但对于个人使用,解决了固定ip的大部分需求,对于个人构建nas或者家庭监控都是一个比较省钱的解决方案。