1. 程式人生 > >通過阿里雲域名動態解析 IP 地址

通過阿里雲域名動態解析 IP 地址

這兩天在家裡用樹莓派折騰了一個家用伺服器,主要用來做 mac 的 Time Machine ,還有就是當做下載機和 nas ,想著平時上班時間家裡沒人用網路,空著也是空著,就可以利用空閒頻寬下個美劇啥的。所以在伺服器上裝了個遠端迅雷和 transmission ,這些網上教程一大把,跟著教程做很快就能搞好。

但是我遇到的問題就是,家用的寬頻不是固定 IP 的,如果路由器斷個網重新連線就會被分配到不同的 ip ,一旦 ip 換了那就沒辦法通過外網連線到伺服器上了。之前也嘗試過在路由器上繫結花生殼,但是實際使用效果不是很好,不是很清楚花生殼的動態更新機制,好幾次家裡網路已經更新了 ip 但是花生殼那邊沒有及時更新。

花生殼的方案不行,那就只有找別的方法了。同時我順便了解了下花生殼能夠動態解析域名的原因,原來使用的是 DDNS 服務,關於 DDNS ,網上的解釋是:

DDNS ( Dynamic Domain Name Server )是動態域名服務的縮寫。
DDNS 是將使用者的動態 IP 地址對映到一個固定的域名解析服務上,使用者每次連線網路的時候客戶端程式就會通過資訊傳遞把該主機的動態 IP 地址傳送給位於服務商主機上的伺服器程式,伺服器程式負責提供 DNS 服務並實現動態域名解析。 --百度百科

這不正是我需要的功能麼,正好我自己也有域名,我的域名是在阿里雲上註冊的,所以我就去阿里雲上看有沒有提供動態域名解析服務,果不其然在網站上找到了

修改解析記錄的 api 文件。

由於我比較擅長的是 java(其實也是唯一擅長的),所以我下了他們的 JAVA SDK ,申請好Access Key 很快就接入成功了,但是感覺在 Linux 伺服器上用 Java 來執行更新好像是件很 Low 的事,正常的使用方式應該用指令碼才對啊。正好最近我在自學 Phthon ,所以順便邊學邊做用 python 指令碼來實現吧。

好啦,以上的都是廢話,下面的才是正題。

1.首先你得有個阿里雲的域名

3.下載Python sdk,SDK 主要幫我們封裝好了一些資料格式轉換和對接的方法,能夠方便我們快速接入,當然如果你足夠牛逼的話,你也完全可以全部自己寫。

4.進行接入操作。我的主要思路是執行該指令碼的時候先去阿里雲獲取域名繫結的 ip 地址,再跟
當前伺服器 ip 地址做對比,如果 ip 相同則說明沒改變,不需要操作。如果 ip 不同則修改域名繫結的 ip 地址。

5.伺服器部署。在伺服器上通過 corntab 設定一項定時計劃,讓伺服器定期執行該指令碼。 linux 設定定時計劃命令:

crontab -e

幾個注意點:

1.請記得保管好你的 Access Key ,所以我沒有在我的程式碼裡直接寫 Access Key Id 和 Access Key Secret ,我把他們單獨放在一個 key.json 檔案中,同時將這個檔案排除出 git ,保證只有我自己知道,因為一旦這兩個值洩露了那別人就可以直接修改你的域名了。

2.阿里雲通過 RecordId 來區分每條域名解析記錄,但是他們之前文件上對於這個引數的描述只寫了“解析記錄的 ID ”,沒有寫如何獲取這條解析記錄 ID ,我去我的阿里雲控制檯上找了好久都沒找到,到後來我突然想到 sdk 上有獲取域名資訊的 api ,我試著用這個果然返回的資訊裡有這個欄位,後來聯絡了他們客服,他們也說在控制檯上沒辦法找到,也只有通過 api 獲取域名資訊才能找到,後來他們也在文件中註明了這個欄位的獲取方式。

3.更新域名解析主要用到的是阿里雲 sdk 包裡 aliyun/api/rest/Dns20150109UpdateDomainRecordRequest.py 方法,我為了偷懶直接在這個方法裡寫死了一些需要固定傳入的引數,如果你要對自己的域名做解析的話記得去修改這些引數值。

4.我已經把這個專案發到 github 上,歡迎有需要的使用,同時也歡迎一起交流,github 地址