自己实现动态域名解析(服务端)
最近感觉免费的花生壳服务不是很稳定,于是想自己实现一个,研究了下发现阿里云有提供域名管理的 API:
https://help.aliyun.com/document_detail/dns/api-reference/summary.html
利用这些 API,就能轻松实现花生壳相同的功能(当然,仅适用于阿里云托管的域名)
原理上很简单:
- 客户端访问服务端,传递参数:待解析的域名
- 服务端获取域名参数,并解析得到客户端 IP 地址
- 利用阿里云的 API,提交域名和 IP 地址,更新解析记录
实现上比较麻烦的是 API 参数的签名和编码,不过这个搞明白之后就能解锁阿里云 API 所有的功能了。
示例代码(原生的 Node.js 实现):
https://github.com/yyqian/aliyun-ddns
我的代码里提供了两种更新域名解析的方式:
- 跟花生壳相同,解析为访问者的公网 IP
- 访问者传递额外的 IP 参数,解析为该 IP 参数的值
注意:示例代码的域名更新 API 没有任何安全防护,仅适用于学习交流。