DDNS实现方法 – 附:梅林DDNS优雅实现

关于DDNS的方法真的有一万种,方法也都大同小异,无非就是实现上有些不同。

 

先说说我自己的方案:

首先域名托管在Cloudflare,路由器是华硕的AC88u,刷了梅林。因为自己家内网有一台笔记本跑ESXi,所以还是有资源搞一台CentOS日常玩一玩的,因此用Node写了个程序,每隔5分钟获取自身IP然后修改DNS记录,实现虽暴力但异常有效。

缺点:

1. 不太优雅,5分钟一次暴力改,即便IP没变

2. 实时性不太高,如果外网IP变动了,最坏的情况要等5分钟

3. 依赖中间设备(ESXi虚拟出来的CentOS),如果因为某种意外中间设备炸了,DDNS就凉了

4. 实现太繁琐,为了个DDNS功能还得准备Node环境(虽然Node环境本来就有)

 

棒棒家的方案:

首先域名托管在CloudXNS,路由器是UBNT。家里除了路由器之外没有什么能7*24小时稳定运行还适合干这件事的环境,所以我那种暴力方法行不通。 但是人家有钱人外网服务器多, 所以找了个外网服务器跑个Node写的API,配合路由器的计划任务按时调一次,调用的时候顺便还能拿到路由器的IP,然后修改DNS记录,也算是另辟蹊径了。

缺点基本上和我那种也差不多,万一外网那台API服务器炸了,DDNS也凉了,不过毕竟他服务器毕竟是IDC服务器,所以整个方案还是比我的更靠谱。

 

仔细分析一下,其实DDNS的实现无非就是解决几个重要的点:

1. 当前的外网IP如何获取

2. 如何(谁)修改DNS记录

3. 什么时候修改DNS记录

 

那么回过头来看一下上面两个方案, 各种折腾都是为了这3个点

 

新天地

前面也提到了,这两种方案无论如何都是有缺点的,亦或是说不是最优雅的方案,那么更优雅的方案是什么样的呢?

这个方案其实也是大多数路由器的DDNS实现方式,也是相对较为优雅的一种,同时因为没有引入太多的质变,方案整体稳定性也大大提高。那么我们就奔着这个目标来实现我们的新方案

 

以下是适用于华硕梅林固件的方案:

 

关于ddns-start事件以及梅林里其他事件的细节,请熟读文档:https://github.com/RMerl/asuswrt-merlin/wiki/User-scripts#ddns-start

关于修改DNS记录的shell,梅林固件中也提供了sample,可供参考:https://github.com/RMerl/asuswrt-merlin/wiki/DDNS-Sample-Scripts

0 个评论
来吐个槽(ノ*・ω・)ノ)