提供阿里域名的动态域名更新、快速查询、以及更新本地DNS结果的轻量脚本。本脚本兼容Windows环境(git bash)以及各种Linux发行版本。
阿里云目前提供的免费域名解析,最小TTL是600,也就是10分钟。也就是说,当大家将阿里云的域名解析当做DDNS服务使用的时候,一旦IP地址发生变更,哪怕立即通过API去更新了阿里云的DNS解析记录,但是由于各级DNS缓存的存在,客户端也无法立即解析到最新的IP。该脚本的目的就是为了第一时间解析到DDNS的最新IP而编写,方便一些需要长时间与服务器保持连接的应用,可以在服务器端IP发生变更的时候,最短时间内重新连接上服务器端。
执行前请务必先更新脚本中的aliddns_ak
和aliddns_sk
这两个变量,这是你的阿里云API的访问秘钥,请尽量设置为最低权限,如域名查询权限。
然后将修改后的aliddns.sh
拷贝到你的Linux服务器上或者其他可以运行bash的环境,然后执行chmod 755 aliddns.sh
将脚本变更为可执行状态。
查询阿里云上的域名解析记录,当前DNS上的域名解析记录以及客户端的公网IP
[root@SZV-VM ~]$ ./aliddns.sh home.mydomain.com
External IP: 218.37.12.42
Nslookup IP: 116.21.220.238 home.mydomain.com
AliDNS Record IP: 116.21.220.238 home.mydomain.com
查询阿里云上的域名解析记录,当前DNS上的域名解析记录以及客户端的公网IP,并将阿里云上的域名解析记录添加
或更新
或删除
到指定的文件(如本地hosts)
#注:输出文件需已经创建,修改前会自动创建备份文件
[root@SZV-VM ~]$ ./aliddns.sh home.mydomain.com output.txt
External IP: 218.37.12.42
Nslookup IP: 116.21.220.238 home.mydomain.com
AliDNS Record IP: 116.21.220.238 home.mydomain.com
output.txt.bak created
No record can be removed, skip
按指定的时间间隔,轮询查询阿里云上的域名解析记录,当前DNS上的域名解析记录,并将阿里云上的域名解析记录添加
或更新
或删除
到指定的文件(如本地hosts)
#注:输出文件需已经创建,修改前会自动创建备份文件;
[root@SZV-VM ~]$ ./aliddns.sh home.mydomain.com /etc/hosts 30
External IP: 218.37.12.42
Nslookup IP: 116.21.220.238 home.mydomain.com
AliDNS Record IP: 116.21.220.238 home.mydomain.com
hosts.bak created
No record can be removed, skip
External IP: 218.37.12.42
Nslookup IP: 116.21.220.238 home.mydomain.com
AliDNS Record IP: 116.21.220.238 home.mydomain.com
hosts.bak is already created, skip bakup operation.
No record can be removed, skip
Windows环境要运行sh脚本文件,需要一些sh的模拟环境,开发人员最常用的就是git-bash了。在Windows环境安装Git的时候就会自带git-bash运行环境,下载链接。安装完毕后打开git-bash后就可以像Linux环境一样使用sh脚本了,使用方式与Linux下完全一样,以下是Windows 10下的截图:
但是在Windows下,如果要修改C:\Windows\System32\drivers\etc\hosts
文件,需要先将该文件的只读属性去掉,其次必须以管理员或者系统的身份运行。
如果需要在cmd
下运行sh文件,可以在cmd
下执行"C:\Program Files\Git\bin\sh.exe" c:\MyApps\aliddns.sh home.mydomain.com
。
我用该脚本更多是为了更精确的跟踪我的路由器的ip变化。Windows环境我更倾向于使用系统自带的任务管理
,可以直接添加一个定时任务(譬如1分钟一次),并使用system的身份去调度,则可以有效修改Windows的hosts文件。以Windows 10为例,方法如下:
计算机管理
,依次点开任务计划程序
->任务计划程序库
,创建任务;创建任务
窗口,常规
选项卡里,将用户账户改为SYSTEM
;触发器
选项卡里,添加一个新建/修改任务时,时间间隔设置为1分钟或者其它你希望的时间;操作
选项卡里,添加应用程序"C:\Program Files\Git\bin\sh.exe"
,参数为c:\MyApps\aliddns.sh home.mydomain.com C:\Windows\System32\drivers\etc\hosts
;添加
从阿里云API上查询到的最新的解析记录;更新
从阿里云API上查询到的最新的解析记录;删除
指定hosts文件中的解析记录;2020-02-08 V1.1
修复hosts文件末尾不带新行,导致hosts最后一条记录丢失的bug;
提供Windows下,基于git bash更新hosts文件的方法;
2018-06-01 初始版本 V1
通过阿里云的API,提供阿里云域名服务的单一域名记录的IP的快速查询,无DNS缓存等待时间限制;
提供本地hosts文件的更新、删除功能;
提供循环检查域名解析更新状态;