CentOS經過DNSpod實現動態域名

由於家裏使用ADSL動態IP上網,有時在外面須要使用家裏資源,本來使用的是TP-LINK自帶的花生殼解析,用過以後發現很不穩定。由於本身註冊了域名也已使用了DNSPOD解析。json

1.新建腳本文件ubuntu

vim ddns.sh

文件內容以下:
vim

#!/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
api

咱們只須要將上面的bash

# 設置用戶參數dom

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

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

# 檢查更新域名ui

arDdnsCheck"anrip.com"  "lab"     //須要更新的域名爲anrip.com,主機爲lab,就是lab.anrip.com
spa

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

修改爲本身的信息便可


3.增長執行權限

chmod +x /root/ddns.sh


4.加入任務計劃(5分鐘執行一次)

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


計劃任務執行狀況能夠查看/var/log/cron

說明:

若是在執行後發現

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

若是你使用的是CentOS則執行

yum -y install bind-utils

或者是ubuntu的話

sudo apt-get install dnsutils
相關文章
相關標籤/搜索