DDNS,即動態DNS,簡單來講就是服務器的 IP 地址常常變更,這個時候須要一個主動上報的服務來更新 DNS 的解析記錄,保證域名指向正確的 IP 地址。html
好比在本身家中的樹莓派上部署了某些服務,且路由器有公網 IP,因爲每次從新撥號,公網 IP 都會變,因此想要根據域名去訪問樹莓派,必須作 DDNS。node
DDNS 能夠選擇 花生殼,可是花生殼提供的 DDNS 服務沒法自定義域名,配置起來也較爲麻煩,因此這裏用 NodeJS 來實現一個 DDNS 服務。git
源碼地址(https://github.com/luoye-fe/aliyun-ddns)github
按期獲取本機公網 IPnpm
比對當前 DNS 解析記錄服務器
若是不一致,調用阿里雲的 API 更新 DNS 記錄阿里雲
訪問 http://ifconfig.me/ip
獲取本機外網 IP,注意需僞造 UA,否則403加密
比較複雜,也比較坑爹,具體實現能夠看放出的 git 源碼code
把全部請求參數按順序序列化htm
把全部請求參數拼接成 encodeURIComponent(key)=encodeURIComponent(value)&encodeURIComponent(key)=encodeURIComponent(value)
的形式獲得 signStr
拼接字符串,[請求方式]&encodeURIComponent('/')&[signStr]
,如 GET&%2F&[signStr]
HMAC SHA1 加密,加密的 key 爲 [AccessKeySecret]&
,注意最後的 &
DescribeSubDomainRecords
具體看文檔
根據當前解析記錄的狀態來肯定是更新仍是新增解析記錄
AddDomainRecord
UpdateDomainRecord
使用的 node-schedule
使用的 pm2