centos系统利用dnspod 动态解析域名ddns外网穿透

1.新建脚本文件

1
vim ddns.sh

文件内容如下:

1
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
84
85
86
87
88
89
90
91
92
93
#!/bin/sh



# 全局变量表
arPass=arMail=""

# 获得外网地址
arIpAdress() {
    local inter="http://members.3322.org/dyndns/getip"
    wget --quiet --no-check-certificate --output-document=- $inter
}

# 查询域名地址
# 参数: 待查询域名
arNslookup() {
    local dnsvr="114.114.114.114"
    nslookup ${1} $dnsvr | tr -d '\n[:blank:]' | awk -F':' '{print $6}'
}

# 读取接口数据
# 参数: 接口类型 待提交数据
arApiPost() {
    local agent="Ddns/3.08"
    local inter="https://dnsapi.cn/${1:?'Info.Version'}"
    local param="login_token=${arID},${arToken}&format=json&${2}"
    wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter
}

# 更新记录信息
# 参数: 主域名 子域名
arDdnsUpdate() {
    local domainID recordID recordRS recordCD
    # 获得域名ID
    domainID=$(arApiPost "Domain.Info" "domain=${1}")
    domainID=$(echo $domainID | sed 's/.*"id":"\([0-9]*\)".*/\1/')
    # 获得记录ID
    recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}")
    recordID=$(echo $recordID | sed 's/.\+\[{"id":"\([0-9]\+\)".\+/\1/')
    # 更新记录IP
    recordRS=$(arApiPost "Record.Ddns" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_line=默认")
    recordCD=$(echo $recordRS | sed 's/.\+{"code":"\([0-9]\+\)".\+/\1/')
    # 输出记录IP
    if [ "$recordCD" == "1" ]; then
        echo $recordRS | sed 's/.\+,"value":"\([0-9\.]\+\)".\+/\1/'
        return 1
    fi
    # 输出错误信息
    echo $recordRS | sed 's/.\+,"message":"\([^"]\+\)".\+/\1/'
}
# 动态检查更新
# 参数: 主域名 子域名
arDdnsCheck() {
    local postRS
    local hostIP=$(arIpAdress)
    local lastIP=$(arNslookup "${2}.${1}")
    echo "hostIP: ${hostIP}"
    echo "lastIP: ${lastIP}"
    if [ "$lastIP" != "$hostIP" ]; then
        postRS=$(arDdnsUpdate $1 $2)
        echo "postRS: ${postRS}"
        if [ $? -ne 1 ]; then
            return 0
        fi
    fi
    return 1
}

###################################################

# 设置用户参数
arID="89322"
arToken="3222w2e3213e123421421424234"
#填写账户的API token


# 检查更新域名
arDdnsCheck "anrip.com" "lab"
ps:以上代码来自http://www.anrip.com/post/872

我们只需要将上面的

# 设置用户参数

arID="user@anrip.com"     //DNSPOD的API ID

arToken="anrip.net"                //DNSPOD的API Token

# 检查更新域名

arDdnsCheck"anrip.com"  "lab"     //需要更新的域名为anrip.com,主机为lab,就是lab.anrip.com

arDdnsCheck"anrip.net"  "lab"      //更新lab.anrip.net

修改成自己的信息即可

3.增加执行权限

1
chmod +x /root/ddns.sh

4.加入任务计划(5分钟执行一次) 注意修改成自己的路径

1
echo "*/5  * * * * root /root/ddns.sh" >> /etc/crontab

计划任务执行情况可以查看/var/log/cron

说明:

5 如果在执行后发现

1
2
3
4
5
[root@localhost ~]# ./ddns.sh
./ddns.sh: line 24: nslookup: command not found
hostIP: 114.234.77.222
lastIP:
postRS: 114.234.77.222

如果你使用的是CentOS则执行

1
yum -y install bind-utils

或者是ubuntu的话

1
sudo apt-get install dnsutils

6 如果执行后提示
postRS: Domain id invalid
原因:
修改
domainID=$(echo $domainID | sed ‘s/.\+,”id”:”\([0-9]\+\)”.\+/\1/’)

domainID=$(echo $domainID | sed ‘s/.*”id”:”\([0-9]*\)”.*/\1/’)

本文上述代码中已经修改,可以正常试用

原文链接:https://xiaohost.com/3154.html,转载请注明出处。
1

评论0

请先