大家好,我是冰河~~
一般家庭网络的公网IP都是不固定的,而我又想通过域名来访问自己服务器上的应用,也就是说:需要通过将域名绑定到动态IP上来实现这个需求。于是乎,我开始探索实现的技术方案。
通过在网上查阅一系列的资料后,发现阿里云可以做到实现动态域名解析DDNS。于是乎,一顿操作下来,我实现了域名绑定动态IP。这里,我们以Python为例实现。
小伙伴们注意啦:Java版源码已提交到:https://github.com/sunshinelyz/mykit-ddns
好了,说干就干,我们开始吧,走起~~

阿里云DDNS前置条件
- 域名是在阿里云购买的
- 地址必须是公网地址,不然加了解析也没有用
通过阿里云提供的SDK,然后自己编写程序新增或者修改域名的解析,达到动态解析域名的目的;主要应用于pppoe拨号的环境,比如家里设置了服务器,但是外网地址经常变化的场景;再比如公司的pppoe网关,需要建立vpn的场景。
安装阿里云SDK
需要安装两个SDK库,一个是阿里云核心SDK库,一个是阿里云域名SDK库;
阿里云核心SDK库
阿里云域名SDK库
阿里云DNSSDK库
设计思路
- 获取阿里云的accessKeyId和accessSecret
- 获取外网ip
- 判断外网ip是否与之前一致
- 外网ip不一致时,新增或者更新域名解析记录
实现方案
这里,我直接给出完整的Python代码,小伙伴们自行替换AccessKey和AccessSecret。
Python脚本的功能如下:
- 获取外网ip地址。
- 获取域名解析记录。
- 新增域名解析记录。
- 更新域名解析记录。
- 删除域名解析记录 (并不建议将该功能添加在实际脚本中)。
- 批量操作,如果记录不存在则添加记录,存在则更新记录。
另外,有几点需要特别说明:
- 建议不要将删除记录添加进实际使用的脚本当中。
- 相同记录是同一个子域名的多条记录,比如 test.binghe.com。
- 脚本并没有验证记录类型,所以同一子域名下的不同类型的记录也会认为是相同记录,比如:有两条记录分别是 test.binghe.com 的 A 记录 和 test.binghe.com 的 AAAA 记录,会被认为是两条相同的 test.binghe.com 记录.如果需要判定为不同的记录,小伙伴们可以根据上述Python脚本自行实现。
- 可以通过判断获取记录返回的 record_id 来实现精确匹配记录。
最后,可以将以上脚本保存为文件之后,通过定时任务,来实现定期自动更新ip地址。
好了,今天就到这儿吧,小伙伴们点赞、在看、留言,转发,四连走起呀,我是冰河,我们下期见~~
文章转自公众号:冰河技术