通过阿里云域名动态解释ip地址

公司对外发布的服务一直是利用路由器的 koolshare-aliddns 功能更新ip地址,但是昨天开始域名无法正常更新ip,排查一轮无果,只要找代替方案。

利用 aliyun-ddns-cli for Docker 更新

aliyun-ddns-cli是将aliyungo打包成 Docker 版本,具体使用办法十分简单。

1
2
3
4
5
6
7
8
9
$ docker pull chenhw2/aliyun-ddns-cli
$ docker run -d \
--name ddns \
--restart=always \
-e "AKID=[ALIYUN's AccessKey-ID]" \
-e "AKSCT=[ALIYUN's AccessKey-Secret]" \
-e "DOMAIN=[Domain 全称]" \
-e "REDO=600" \
chenhw2/aliyun-ddns-cli
  • AKID= 填写阿里云获得的 AccessKey-ID
  • AKSCT= 填写阿里云获得的 AccessKey-Secret
  • DOMAIN= 填写域名全称包括子域名
  • –restart=always 跟随系统自启动 docker 镜像

这个 Docker 会10分钟检测一次域名ip和公网ip是否对的上,如果一样则不更新,不同则更新域名。

Access Key 申请方式可以参考如何获取Access ID和Access Key

Windows Server 下客户端

aliyun-ddns-client-csharp 这个客户端是用 C#写的,可以在 Widnows 下运行,但是设置计划任务貌似有很多问题,一直运行失败。

使用方法很简单,修改 config.txt 里面内容即可,内容都有注释我就不在解析。

下载地址:https://github.com/kaedei/aliyun-ddns-client-csharp/releases

利用路由系统 Padavan 更新

Padavan 这个路由系统我很喜欢,类linux,所有附加功能可以直接使用 shell 来完成,性能不必 openwrt 差。

在扩展功能→花生壳内网版→Aliddns 就是我们要的功能,开启开关,填写信息即可。

这里有一个需要注意,如果发现上次运行: 【2017-10-23 10:30:41 成功更新:XXX.XXX.XXX.XXX】,成功更新后面如果没有IP地址的话,证明脚本无法获取你公网的ip地址,这时需要点击Aliddns 脚本-基于 Aliddns 用户 API 实现的纯 Shell 动态域名客户端这个连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 获得外网地址
# 自行测试哪个代码能获取正确的IP,删除前面的#可生效
arIpAddress () {
curltest=`which curl`
if [ -z "$curltest" ] || [ ! -s "`which curl`" ] ; then
#wget --no-check-certificate --quiet --output-document=- "http://www.ipip.net" | grep "您当前的IP:" | grep -E -o '([0-9]+\.){3}[0-9]+'
wget --no-check-certificate --quiet --output-document=- "http://members.3322.org/dyndns/getip" | grep -E -o '([0-9]+\.){3}[0-9]+'
#wget --no-check-certificate --quiet --output-document=- "1212.ip138.com/ic.asp" | grep -E -o '([0-9]+\.){3}[0-9]+'
#wget --no-check-certificate --quiet --output-document=- "ip.6655.com/ip.aspx" | grep -E -o '([0-9]+\.){3}[0-9]+'
#wget --no-check-certificate --quiet --output-document=- "ip.3322.net" | grep -E -o '([0-9]+\.){3}[0-9]+'
else
#curl -k -s "http://www.ipip.net" | grep "您当前的IP:" | grep -E -o '([0-9]+\.){3}[0-9]+'
curl -k -s "http://members.3322.org/dyndns/getip" | grep -E -o '([0-9]+\.){3}[0-9]+'
#curl -k -s 1212.ip138.com/ic.asp | grep -E -o '([0-9]+\.){3}[0-9]+'
#curl -k -s ip.6655.com/ip.aspx | grep -E -o '([0-9]+\.){3}[0-9]+'
#curl -k -s ip.3322.net | grep -E -o '([0-9]+\.){3}[0-9]+'
fi
}
arIpAddress=$(arIpAddress)

按照注释说明更换获取公网ip的办法即可,我路由器失效也是因为ipip.net的好像不能获取ip的原因导致的,具体为什么不能获取ip我也不清楚,可能是因为基于web上的中文筛选出了问题吧。