1.正確的DDNS應該為Dynamic domain name server 動態域名的縮寫。 主要是一些免費的ISP商為一些動態撥號的寬帶用戶提供ddns服務,當撥號用戶每次連上網路時,ip是變的,隨後ddns客戶端(用戶,有些用花生殼軟體其實就是這個原理)通過發起更新到ddns服務端,ddns服務端直接修改該域名的A記錄而已。比較清晰的理解: 如果你有一個固定的外網IP和合法域名,並建有DNS服務器,則你可以為任何固定和非固定的用戶提供動態更新服務。無論用戶端IP怎麼變,都會在你建的那台DNS服務器實現動態更新。所以就牽扯到一個ddns服務端(你自己或免費ISP)和ddns客戶端
// 然後將你原本的 zone 加入底下這一段宣示 zone "centos.vbird" IN { type master; file "named.centos.vbird"; allow-transfer { 192.168.100.100; }; update-policy { grant web name web.centos.vbird. A; }; };
# chown named /var/named/chroot/var/named # /etc/init.d/named restart # setsebool -P named_write_master_zones=1 注意到上頭的 grant web name web.centos.vbird. A; 那一行, grant 後面接的就是 key 的名稱,也就是說,我這把 web 的 key 在這個 zone (centos.vbird) 裡面可以修改主機名稱 web.centos.vbird 的 A 的標誌,亦即是修改主機的 IP 對應啦!語法也就是: grant name 標籤 也就是說,我的一把 key 其實可以給予多種權限喔!就看你如何規範了。 設定好之後,由於未來用戶端傳來的資訊是由我們主機的 named 所寫入, 寫入的目錄在 /var/named/chroot/var/named/ 當中,所以你必需要修改一下權限喔! 給他重新啟動 DNS,然後觀察一下 /var/log/messages 裡面有沒有錯誤即可! 如此一來,DDNS 主機端就設定妥當囉! • ________________________________________ 2. Client 端的更新: 接下來則是 DDNS Client 端的更新了。首先,你必須要由 Server 端取得剛剛建立的那兩個檔案, 請將剛剛建立的 Kweb.+157+60597.key 及 Kweb.+157+60597.private 利用 SSH 的 sftp 傳送到用戶端, 亦即是那部 web.centos.vbird 主機上頭, 假設你已經將這兩個檔案放置到 /usr/local/ddns 裡面去,然後測試看看: # cd /usr/local/ddns # nsupdate -k Kweb.+157+50096.key > server 192.168.100.254 > update delete web.centos.vbird <==刪除原有的 > update add web.centos.vbird 600 A 192.168.100.200 <==更新到最新的 > send > 最後在此按下 +D 即可 請注意到『 update add web.centos.vbird 600 A 192.168.100.200 』這行, 他的意義說的是,新增一筆資料, ttl 是 600 ,給予 A 的標籤,對應到 192.168.100.200 的意思~ 至於 nsupdate -k 後面加的則是我們在 Server 端產生的那個 key 檔案! 然後你就會發現到在 DNS 伺服器端的 /var/named/chroot/var/named/ 裡面多出一個暫存檔,那就是 named.centos.vbird.jnl 當然,/var/named/chroot/var/named/named.centos.vbird 就會隨著用戶端的要求而更新資料喔! 由於手動更新好像挺麻煩的,我們就讓 Client 自動更新吧!利用底下這個 script 即可! # vi /usr/local/ddns/ddns_update.sh #!/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH
# Get your new IP newip=`ifconfig "$outif" | grep 'inet addr' | \ awk '{print $2}' | sed -e "s/addr\://"` checkip=`echo $newip | grep "^"` if [ "$checkip" == "" ]; then echo "$0: The interface can't connect internet...." exit 1 fi
# create the temporal file tmpfile=$basedir/tmp.txt cd $basedir echo "server $servername" > $tmpfile echo "update delete $hostname A " >> $tmpfile echo "update add $hostname $ttl A $newip" >> $tmpfile echo "send" >> $tmpfile
# send your IP to server nsupdate -k $keyfile -v $tmpfile 你只要將上述的程式裡面,特殊字體的部分給他修改一下,就能夠以 /etc/crontab 的方式在你的系統內自動執行了!這支程式你也可以在底下的連結下載: • http://linux.vbird.org/linux_server/0350dns/ddns_update.sh 利用 BIND 9 所提供的這個服務,我們只要具有一組固定的 IP ,並向 ISP 申請一個合法授權的 domain name, 就可以提供不論是固定或者是非固定的 IP 使用者,一個合法的主機名稱了! 並且,使用者也可以自行透過 nsupdate 來修改自己的 IP 對應!以讓自己的主機 IP 永遠與主機名稱保持正確的對應!這對只有撥接制上網的用戶來說,真是方便啊! ________________________________________