一、什么是DDNS? DDNS英文名是 Dynamic Domain Name Server,字面解释是动态域名服务,我用一句直白的话概括下DDNS是什么?DDNS就是能把你家宽带的ip地址绑定到一个固定域名下的一个程序,这样家里的网络就可以通过这个固定域名访问了,既然是程序,那这个程序放在哪里?当然放在家庭的网络的设备上,因为只有内部设备才能获取到家庭网络的ip地址,常见的设备如路由器、电脑主机等。
二、具体工作细节?DDNS工作细节主要有两部分:一个是获取家庭网络的ip地址,一个是向你的域名注册商上报家庭ip地址。
程序其实相当简单:每隔一定时间,获取到宽带的ip地址,通过域名商提供的api 上报给域名商完成解析服务。
获取ip:这一步有多种方式,如果DDNS放在路由器,那路由器系统本身就知道拨号获得的ip地址,直接读取这个ip就可以了。如果部署在电脑主机上,技术上有几种方式,一种是访问ip138.com这类能获取自身宽带ip的网站,然后从网站html数据中提取ip地址,还有一种是询问路由器的某个服务,路由器告知它获取的ip地址。
上报ip:这一步需要你购买的域名商提供接口,程序通过这个接口上报。如阿里就提供了一个上报接口,只不过安全起见,同时也给每个人分配了一把钥匙和一个密码。通过这个钥匙和密码访问接口就可以完成上报。
三、DDNS的作用和具体应用一切的原因都归结于宽带进行拨号的时候获取到的ip地址不是固定的,一旦家里停电或者长时间运行后,宽带的ip都会发生变化,假设将没变化之前的ip绑定到域名上,一旦ip发生变化,该域名却还绑定着之前的旧ip地址,那这个域名所有的访问都将失效。DDNS的存在就是为了解决这种问题,DDNS程序不关心路由器ip什么时候发生变化,它只会每隔一段时间去获取一次ip地址并通过域名上报接口上报。优化版的程序可能会在每次网络重新联通后也获取一次,并且和之前上报的进行比对,甚至不是通过间隔获取方式,如果路由器ip地址变化会有主动性的广播,那程序可不通过间隔获取,只要监听这个变化广播提取广播中的ip信息就行了,这样程序就能达到最大的优化。
那面对DDNS程序,其实不需要自己开发,别人已经做好这些工作了,我们只需要去找到这些程序执行就可以了。比如群晖中,我们就可以运用docker技术执行阿里云DDNS服务,镜像叫chenhw2/aliyun-ddns-cli
使用的时候只要修改环境变量AKID、AKSCT和DOMAIN几项就可以了。AKID、AKSCT是阿里云提供的,可在阿里云后台获取,DOMAIN是你需要解析的域名,IPAPI可以修改,如果不修改就会使用默认的获取方式,REDO获取ip的间隔时间,单位为秒。300就是5分钟。以上只是DDNS应用的一个小例子,我并没有去看这个镜像中具体的代码实现,因为实现原理细节已经在本文第二项中描述的很清楚了,不管使用何种编程语言都能实现。