因為家裡使用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