由於家裏使用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