原文:http://www.dwhd.org/20150519_160959.html 在 CC15 上安装成功 1 更换 openwrt 的源加速地址 1 sed -i 's/downloads.openwrt.org/openwrt.legion.pt/' /etc/opkg .conf 2 安装 bash she ..

使用DNSPOD的域名解析实现DDNS域名动态的脚本

本贴最后更新于 1139 天前,其中的信息可能已经时移世易
内容有过重大修订,请浏览修改历史以获取更新全貌

原文:http://www.dwhd.org/20150519_160959.html

在 CC15 上安装成功

1 更换 openwrt 的源加速地址

1
sed -i 's/downloads.openwrt.org/openwrt.legion.pt/' /etc/opkg .conf

2 安装 bash shell

1
opkg update && opkg install bash

3 将 root 用户的 shell 换成 bash

1
sed -ri 's|^(root:.*:)/bin/.*|\1/bin/bash|' /etc/passwd

4 下载 DDNS 脚本

1
wget http: //www .dwhd.org /script/dnspodDDNS .sh -O /etc/dnspodddns .sh && chmod +x /etc/dnspodddns .sh

5 执行下面的命令 修改几个必要的参数

1
2
vi /etc/dnspodddns .sh
[ -z "$(grep 'dnspodddns.sh' /var/spool/cron/crontabs/root )" ] && echo "*/1 * * * * /etc/dnspodddns.sh &>/dev/null" >> /var/spool/cron/crontabs/root

6 然后退出 ssh 重新登录或者重启下路由

1
reboot

 

 

下面是脚本源码

01
02
03
04
05
06
07
08
09
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
84
#!/bin/bash
#########################################################################
# File Name: dnspodDDNS.sh
# Author: LookBack
# Email: 393411264@qq.com
# Created Time: 2015年03月28日 星期六 23时19分00秒
#########################################################################
#
#        利用DNSPOD官方提供的API,自动更新域名解析记录,
#        在Netgear 4300 openwrt和CentOS 6系统上测试完美执行,
#        在其他硬件的openwrt上应该也是可以执行的,
#        非openwrt系统的不保证脚本的兼容性。
#        如有任何BUG 请联系我 393411264@qq.com
#
#########################################################################
 
#=======================下方是需要修改的参数信息=============================================
#DNSPOD 帐号
DNSPODID= "393411264@qq.com"
#DNSPOD 密码
DNSPODPW= "www.05hd.com"
#DNSPOD 主域名
DNSPODPD= "05h.com"
#DNSPOD 二级域名,可以是多个,如下设置DNSPODSDNM[0-n]。有几个就写几个,把多余的删除
DNSPODSDNM[0]= "openwrt141"
DNSPODSDNM[1]= "openwrt"
DNSPODSDNM[2]= "netgear111"
#=========================下方内容如果不懂请勿修改============================================
CURL=$( which curl)
GetID() {
         $CURL -X POST https: //dnsapi .cn /Domain .List -ks -d "login_email=$1&login_password=$2&format=json" | \
awk -F ',' '{for(i=1;i<=NF;i++) if($i~/"id":[0-9]+/ || $i~/"name":".*"/) {print $i}}' | \
awk '{if (NR%2==0){print $0} else {printf"%s ",$0}}' | sed 's/"domains":\[//' | \
awk -F ':| |"' '{print $9,$4}' > /tmp/dnspodDomain
         while read line; do
                 if [ "$(awk '{print$1}' <<< $line)A" = "${DNSPODPD}A" ]; then
                         DNSPODPDID=$( awk '{print$2}' <<< $line)
                         break
                 fi
         done < /tmp/dnspodDomain
 
         $CURL -X POST https: //dnsapi .cn /Record .List -ks -d "login_email=$1&login_password=$2&format=json&domain_id=$DNSPODPDID" | \
sed 's/.*},"records":\[//' | awk -F ',' '{for(i=1;i<=NF;i++) if($i~/"id":"[0-9]+"/ || $i~/"name":".*"/) {print $i}}' | \
awk '{if (NR%2==0){print $0} else {printf"%s ",$0}}' | awk -F '"' '{print $8,$4}' > /tmp/dnspodRecord
         while read line; do
                 for i in ` seq 1 ${ #DNSPODSDNM[@]}`; do
                         i=$[$i-1]
                         [ "$(awk '{print$1}' <<< $line)A" = "${DNSPODSDNM[$i]}A" ] && DNSPODSDID[$i]=$( awk '{print$2}' <<< $line) && break
                 done
         done < /tmp/dnspodRecord
}
 
StartRun() {
         WanIP=$($CURL -s ip.cn | grep -Eo '([0-9]{1,3}[\.]){3}[0-9]{1,3}' )
         DNSPODIP=$($CURL -X POST https: //dnsapi .cn /Record .Info -ks -d \
"login_email=$1&login_password=$2&format=json&domain_id=$3&record_id=${DNSPODSDID[0]}" | \
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' )
#awk -F':|,|"' '{for(i=1;i<=NF;i++)if($i~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/){print$i;break}}')
         [ -z $WanIP ] && exit 1
         [ -z $DNSPODIP ] && exit 1
         :> /tmp/dnspodDomain && :> /tmp/dnspodRecord
}
 
UploadIP() {
         [ "${3}A" != "${4}A" ]
         if [ "A$?" = "A0" ]; then
                 for i in ` seq 1 ${ #DNSPODSDNM[@]}`; do
                         i=$[$i-1]
                         $CURL -X POST https: //dnsapi .cn /Record .Modify -ks -d \
"login_email=$1&login_password=$2& format =json&domain_id=$5\
&record_id= ${DNSPODSDID[$i]}&sub_domain=${DNSPODSDNM[$i]}&value=$3\
&record_type=A&record_line=默认" &> /dev/null
                         echo "$(date " +%F %H:%M:%S ") Domain ${DNSPODSDNM[$i]}.$DNSPODPD A Record Update To $3" >> /var/log/dnspod .log
                 done
         fi
}
 
RUN() {
         GetID $1 $2
         StartRun $1 $2 $DNSPODPDID
         UploadIP $1 $2 ${WanIP} ${DNSPODIP} $DNSPODPDID ${DNSPODSDID[*]}
}
 
RUN $DNSPODID $DNSPODPW $DNSPODPDID
 
 
 

  • OpenWrt
    10 引用 • 17 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    5 引用 • 22 回帖 • 510 关注
回帖   
请输入回帖内容...