天天看点

CentOS通过DNSpod实现动态域名

因为家里使用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}&amp;login_password=${arPass}&amp;format=json&amp;${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}&amp;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}&amp;record_id=${recordID}&amp;sub_domain=${2}&amp;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>&gt;&gt; </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

继续阅读