Bookmark and Share
Section
bash寫作參考---DynDNS域名更新檢查
(Publish Date: 2009-7-30 9:39pm, Total Visits: 945, Today: 1, This Week: 11, This Month: 7)

.

DynDNS域名更新檢查

 

本內容基於 debian 系統所寫,以下內容,紅字部份皆為指令或是您需要修改的內容 ,藍字部份則為設定檔內容。

最近在使用 dyndns 的免費域名上,有了些小問題它經常會沒有更新IP成功,就會造成網站上不去。

首先講一下我是怎麼更新 dyndns 的域名的。更新域名只要一行指令就能搞定,不用安裝官方網站提供的程式

底下就是 dyndns 域名更新指令的格式

wget -q --no-check-certificate --secure-protocol=auto --delete-after https://帳號:密碼@members.dyndns.org/nic/update?hostname=你的域名

這行指令你可以寫在一個 script 檔裡,也可直接將此行指令寫在以下地方

/etc/ppp/ip-up

↑這個檔案的意思就是 ppp 連線上去時會執行的動作,你可把那行指令加在裡面,或加一行你要執行的 script 檔。

按以上設定,本來是能在它斷線後,重新連上線時,就能自動更新IP,一般來講這樣就能正常運作了。但因為它只做一次更新的動作,這個動作要是失敗的話,就不會再更新了,所以我們就要另外寫一隻程式來定時檢查IP是否有正常更新。

vim /home/backu/dyndns.sh

=========================================

#!/bin/bash
#檢查 dyndns.com 域名是否有正確更新IP
# 2009/07/30 作者:夢見草
ppp0=`ifconfig ppp0|grep inet|sed 's/^.*addr://g'|sed 's/P-t-P.*$//g'`
#↑grep inet那行 | sed 刪掉 addr:之前的資料 | sed 刪掉 P-t-P 之後的資料
dyndns=`host
你的域名|awk '{print $4}'`
#↑取第4欄數值
#↓直到 ppp0 等於 dyndns時,才跳到 done那行,注意, $ppp0 若加了雙引號,就會依字串來判斷,會判斷錯誤
until [ $ppp0 == $dyndns ]
do
echo 現在的ip是:$ppp0
echo dyn的IP是 :$dyndns
echo "發現域名與ip不一樣,現在執行dyndns域名更新!!"
wget -q --no-check-certificate --secure-protocol=auto --delete-after https://
帳號:密碼@members.dyndns.org/nic/update?hostname=你的域名
echo "暫停300秒(5分鐘)後,再重新檢查一次域名是否等於IP"
sleep 300
done
echo IP正常,跳出程式

=========================================

以上內容,紅字的地方請修改成你的資料, echo 開頭的那幾行,在你測試無誤之後,就可以將 echo 開頭的那幾行程式碼給刪除,或將其 mark 起來。

chmod 755 /home/backup/dyndns.sh

將其建立連結放入這裡,就能每隔一小時檢查一次。

ln -s  /home/backup/dyndns.sh /etc/cron.hourly/dyndns.sh

注意:放到 /etc/cron.hourly   cron.daily 等目錄裡的執行檔不能有附檔名 .sh 否則它不能正常的執行,這是 debian 系統的 bug

所以上面那一行應改寫成這樣↓

ln -s  /home/backup/dyndns.sh /etc/cron.hourly/dyndns

 

2009/8/27 發現 bug

今天發現用此程式的域名都被 block 了,估計原因可能是暫停時間 (300秒) 太短了,導致於雖然它有更新成功但去問IP卻是是舊的(可能從cache裡面拿資料,所以得到舊IP)程式因此判斷沒有更新IP,於是又送出次更新域名IP的資料給 dyndns.com,等5分鐘後,再檢查還是得到舊的IP (還從 cache 裡拿資料)所以,又再送一次更新資料給 dyndns.com,如此重覆一個小時後還是跳不出此程式,但一小時後排程裡又再啟動一次此更新程式.....

如此惡性循迴:不斷更新IP,又一直啟動 dyndns 這支程式。 最後就會造成域名被 dyndns.com 公司給封了,罪名是 abuse update

可能解法:

1.將暫停時間設長一點,十分鐘以上。

2.檢查 ip 的指令,從原本的 host 域名,改為 nslookup  域名

3.要避免重覆啟動 dyndns 程式。可能將程式改寫為無限迴圈,或是在程式啟動時檢查程式是否重覆執行了。

以上三點解法尚未實作,待日後有空再來修改此程式。

目前先用官方提供的更新程式 ddclient 頂著用先。

wget http://ftp.tw.debian.org/debian/pool/main/d/ddclient/ddclient_3.8.0-4_all.deb

dpkg -i ddclient_3.8.0-4_all.deb

dpkg-reconfigure ddclient

會問你幾個問題:

1.動態 DNS 服務提供者→www.dyndns.com
2.帳號
3.密碼
4.Find public IP using checkip.dyndns.com?→
5.Selection method for updated names:→問你有哪些域名要更新,請選 From list
6.Run ddclient on PPP connect?→
7.ddclient 以 daemon 模式啟動?→
8.Interval between ddclient runs:→問你 IP 檢查時間,用預設的 300 秒即可
9.Host names to keep updated:→勾選你要更新的域名