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

原文地址

相关文章
相关标签/搜索