NodeJS + Aliyun 實現 DDNS

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 記錄阿里雲

相關資料

實現

獲取公網 IP

訪問 http://ifconfig.me/ip 獲取本機外網 IP,注意需僞造 UA,否則403加密

阿里雲 API 接口鑑權

比較複雜,也比較坑爹,具體實現能夠看放出的 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

原文地址

相關文章
相關標籤/搜索