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或者家庭監控都是一個比較省錢的解決方案。