因为家里使用ADSL动态IP上网,有时在外面需要使用家里资源,原本使用的是TP-LINK自带的花生壳解析,用过之后发现很不稳定。因为自己注册了域名也已使用了DNSPOD解析。
1.新建脚本文件
1
<code>vim ddns.sh</code>
文件内容如下:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<code>#!/bin/sh</code>
<code> </code>
<code>#################################################</code>
<code># AnripDdns v3.08.09</code>
<code># 基于DNSPod用户API实现的动态域名客户端</code>
<code># 作者: 若海[[email protected]]</code>
<code># 介绍: http://www.anrip.com/ddnspod</code>
<code># 时间: 2013-08-08 23:25:00</code>
<code># 全局变量表</code>
<code>arPass=arMail=</code><code>""</code>
<code># 获得外网地址</code>
<code>arIpAdress() {</code>
<code> </code><code>local</code> <code>inter=</code><code>"http://members.3322.org/dyndns/getip"</code>
<code> </code><code>wget --quiet --no-check-certificate --output-document=- $inter</code>
<code>}</code>
<code># 查询域名地址</code>
<code># 参数: 待查询域名</code>
<code>arNslookup() {</code>
<code> </code><code>local</code> <code>dnsvr=</code><code>"114.114.114.114"</code>
<code> </code><code>nslookup</code> <code>${1} $dnsvr | </code><code>tr</code> <code>-d </code><code>'\n[:blank:]'</code> <code>| </code><code>sed</code> <code>'s/.\+1 \([0-9\.]\+\)/\1/'</code>
<code># 读取接口数据</code>
<code># 参数: 接口类型 待提交数据</code>
<code>arApiPost() {</code>
<code> </code><code>local</code> <code>agent=</code><code>"AnripDdns/3.08([email protected])"</code>
<code> </code><code>local</code> <code>inter=</code><code>"https://dnsapi.cn/${1:?'Info.Version'}"</code>
<code> </code><code>local</code> <code>param=</code><code>"login_email=${arMail}&login_password=${arPass}&format=json&${2}"</code>
<code> </code><code>wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter</code>
<code># 更新记录信息</code>
<code># 参数: 主域名 子域名</code>
<code>arDdnsUpdate() {</code>
<code> </code><code>local</code> <code>domainID recordID recordRS recordCD</code>
<code> </code><code># 获得域名ID</code>
<code> </code><code>domainID=$(arApiPost </code><code>"Domain.Info"</code> <code>"domain=${1}"</code><code>)</code>
<code> </code><code>domainID=$(</code><code>echo</code> <code>$domainID | </code><code>sed</code> <code>'s/.\+{"id":"\([0-9]\+\)".\+/\1/'</code><code>)</code>
<code> </code><code># 获得记录ID</code>
<code> </code><code>recordID=$(arApiPost </code><code>"Record.List"</code> <code>"domain_id=${domainID}&sub_domain=${2}"</code><code>)</code>
<code> </code><code>recordID=$(</code><code>echo</code> <code>$recordID | </code><code>sed</code> <code>'s/.\+\[{"id":"\([0-9]\+\)".\+/\1/'</code><code>)</code>
<code> </code><code># 更新记录IP</code>
<code> </code><code>recordRS=$(arApiPost </code><code>"Record.Ddns"</code> <code>"domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_line=默认"</code><code>)</code>
<code> </code><code>recordCD=$(</code><code>echo</code> <code>$recordRS | </code><code>sed</code> <code>'s/.\+{"code":"\([0-9]\+\)".\+/\1/'</code><code>)</code>
<code> </code><code># 输出记录IP</code>
<code> </code><code>if</code> <code>[ </code><code>"$recordCD"</code> <code>== </code><code>"1"</code> <code>]; </code><code>then</code>
<code> </code><code>echo</code> <code>$recordRS | </code><code>sed</code> <code>'s/.\+,"value":"\([0-9\.]\+\)".\+/\1/'</code>
<code> </code><code>return</code> <code>1</code>
<code> </code><code>fi</code>
<code> </code><code># 输出错误信息</code>
<code> </code><code>echo</code> <code>$recordRS | </code><code>sed</code> <code>'s/.\+,"message":"\([^"]\+\)".\+/\1/'</code>
<code># 动态检查更新</code>
<code>arDdnsCheck() {</code>
<code> </code><code>local</code> <code>postRS</code>
<code> </code><code>local</code> <code>hostIP=$(arIpAdress)</code>
<code> </code><code>local</code> <code>lastIP=$(arNslookup </code><code>"${2}.${1}"</code><code>)</code>
<code> </code><code>echo</code> <code>"hostIP: ${hostIP}"</code>
<code> </code><code>echo</code> <code>"lastIP: ${lastIP}"</code>
<code> </code><code>if</code> <code>[ </code><code>"$lastIP"</code> <code>!= </code><code>"$hostIP"</code> <code>]; </code><code>then</code>
<code> </code><code>postRS=$(arDdnsUpdate $1 $2)</code>
<code> </code><code>echo</code> <code>"postRS: ${postRS}"</code>
<code> </code><code>if</code> <code>[ $? -</code><code>ne</code> <code>1 ]; </code><code>then</code>
<code> </code><code>return</code> <code>0</code>
<code> </code><code>fi</code>
<code> </code><code>return</code> <code>1</code>
<code>###################################################</code>
<code># 设置用户参数</code>
<code>arMail=</code><code>"[email protected]"</code>
<code>arPass=</code><code>"anrip.net"</code>
<code># 检查更新域名</code>
<code>arDdnsCheck </code><code>"anrip.com"</code> <code>"lab"</code>
<code>arDdnsCheck </code><code>"anrip.net"</code> <code>"lab"</code>
我们只需要将上面的
# 设置用户参数
arMail="[email protected]" //DNSPOD用户名
arPass="anrip.net" //DNSPOD密码
# 检查更新域名
arDdnsCheck"anrip.com" "lab" //需要更新的域名为anrip.com,主机为lab,就是lab.anrip.com
arDdnsCheck"anrip.net" "lab" //更新lab.anrip.net
修改成自己的信息即可
3.增加执行权限
<code>chmod</code> <code>+x </code><code>/root/ddns</code><code>.sh</code>
4.加入任务计划(5分钟执行一次)
<code>echo</code> <code>"*/5 * * * * root /root/ddns.sh"</code> <code>>> </code><code>/etc/crontab</code>
计划任务执行情况可以查看/var/log/cron
说明:
如果在执行后发现
<code>[root@localhost ~]</code><code># ./ddns.sh</code>
<code>.</code><code>/ddns</code><code>.sh: line 24: </code><code>nslookup</code><code>: </code><code>command</code> <code>not found</code>
<code>hostIP: 114.234.77.222</code>
<code>lastIP:</code>
<code>postRS: 114.234.77.222</code>
如果你使用的是CentOS则执行
<code>yum -y </code><code>install</code> <code>bind-utils</code>
或者是ubuntu的话
<code>sudo</code> <code>apt-get </code><code>install</code> <code>dnsutils</code>
<code></code>
本文转自 rong341233 51CTO博客,原文链接:http://blog.51cto.com/fengwan/1404534