分类:
2005-10-20 11:26:15
如果一直沒動作怎麼吧﹖呵呵~~~ 我也不知道。但我會建議您將 /etc/dhcpd.conf ﹑named.conf﹑和 /var/named/ 的記錄檔儘量簡化﹐將那些有的沒的全部拿掉﹐並重新啟動服務看看。當然了﹐/var/log/ 裡面記錄檔也有很多重要資訊﹐比方說提昇 named.conf 裡的 debug level 數值(如﹕severity debug 9 )﹐然後執行﹕
tail -f /var/log/update-dbug.log
再不然﹐用 tcpdump 抓封包看囉~~~
老實說﹐我原本寫這篇文章的時候並沒有打算將 dhcp + dns 的動態更新寫進來的﹐因為還沒實作過。幸得在新聞組上得到 小州兄
的指點﹐才裝了個 Mandrak8.1 ﹐並按 man page 的步驟設定起來的。我覺得在本機上更新﹐也就是 dhcpd 和 named
都在同一台機器上﹐會比較容易成功。如果跨網路進行的話﹐那您得要首先解決網路想過的問題﹐例如路由和防火牆這些設定。
Anyway﹐我不敢保證您能按照上面的步驟實作出來﹐總要自己多嘗試嘗試吧。如果您想更進一步了解 DNS 的動態更新﹐您可以研究一下 nsupdate 這個命令。它可以讓您以交談模式來更新 named 的記錄設定。
Tips﹕我知道許多所謂的動態 dns 服務﹐大都會於 server 上提供更新機制﹐我猜﹐只要透過簡單的 cgi 或 client 程式﹐就應該可以完成的。看完下面 Leo 兄的文章﹐您應該會有靈感的﹕
動態 DNS 設定技巧
除此之外﹐如果您還有興趣研究動態 DNS 技術的話﹐不妨到網路上找找 IXFR 的技術﹐也可以參考如下這些 RFC﹕1034﹐1995﹐1996﹐2136﹐2535﹐2694。
設定 master / slave
不管您是否有打算註冊自己的 domain 和管理自己的 DNS 主機﹐在您真正架設對外服務的 dns 伺服器之前﹐請先行在內部網路架設看看﹐直到您有信心之後才架設直接向 Internet 提供服務的 DNS 。而您需要練習的這些前置功夫中﹐其一就是 master 與 slave DNS 的設置。
假如您真的到網路上註冊過 domain﹐他們通常需要您提供最少兩台 NS 主機。為什麼呢﹖這是基於備援考量的。當一個註冊 domain 同時授權到兩台 ns 上面管理的話﹐那別人透過 DNS 查詢的時候﹐會獲得兩個 NS 記錄( root zone 就有 13 個 ns 之多﹗)。對方只需向其中一台進行查詢就可以了﹐如果第一台不能成功的話﹐則轉向下一台。究竟向哪一台 NS 查詢﹐其先後順序沒什麼關係﹐但關鍵的是資料的準確性﹗
在前面您已經知道如何在單一的主機上面進行 DNS 設定了﹐那麼﹐當有兩台主機需要為同一個 domain 提供 DNS 服務的時候又如何設定呢﹖您當然可以在兩台主機上各設定一次。但資料的同步呢﹖您總不能在一台 NS 查詢到一個 IP 位址﹑而在另一台 NS 得到另外一個位址吧﹖如果發生資料變更需求的時候﹐您也得同樣的在兩台機器上面進行修改﹐而且必須透過人為的觀測﹐以確定雙方的資料一致性。那~~ 是否有更好的辦法來做到這點呢﹖
當然有啦﹐這就是 master 和 slave DNS 的設定了。透過 master 和 slave 的架構﹐您日後要進行資料變更的時候﹐只需在 master 上面維護就好﹐然後 slave 會定期的自動過來將更新資料同步回去(還記得 SOA 那堆數字的嗎﹖您應該知道 Refresh 和 Serial 的作用吧﹖如果您忘記了﹐請回去溫習一下)。
如果您沒有理解錯誤﹐應該知道 slave 會在 refresh 時間到達的時候﹐就嘗試和 master 進行資料同步的動作﹐這在 DNS 系統裡面有一個專門術語﹐叫做“zone transfer”(區域轉移)﹐而在技術層面來說﹐則是 AXFR 查詢﹕
當 slave 需要進行 zone transfer 之前﹐它首先查詢 master 的 SOA 記錄之 serial 數值﹔
如果發現數值比 slave 上的 serial 要大﹐就送出 AXFR 查詢﹔
如果 master 允許 slave 的 zone transfer ﹐那就回應 AXFR 的查詢結果﹔
然後 slave 根據查詢結果更新自己的記錄檔。
從上面的流程來看﹐您不難發現 serial 在整個區域轉移過程中的重要性。所以﹐您每次修改了 master﹐一定要將增加 serial 數值。雖然﹐您可以依序的增加數值﹐但如果您的 Serial 號碼是依照“日期 + 修改次數”格式的話﹐那麼您只要修改日期部份﹐就肯定可以獲得一個更大的數值(除非您又碰到 Y2K 的問題 )﹔假如您的修改是在同一天發生的﹐那您可以修改最右邊的兩為數字(相信您一天之內不會修改 100 次吧﹖)。
要設定 slave DNS 其實非常簡單﹐簡單到或許您不相信﹗真的沒騙您﹐您只需在 slave 主機上面的 /etc/named.conf 增加這幾行就可以了﹕
zone "siyongc.domain" IN {
type slave;
masters { 192.168.100.23; };// 請不要漏了 masters 後面的 s ﹗
file "slave.siyongc.domain";
};
一點也沒錯﹗就這麼簡單~~~ 我們假設上面的設定在 10.0.1.130 ( lp64 ) 上面進行﹐而 master 則是 192.168.10.23 ( rh71 )。這裡﹐我再告訴您一個您非常樂意聽到的信息﹕您根本無需擔心如何建立 slave 的記錄檔﹐named 會自動幫您搞定﹗您只需確定 /var/named 這個目錄能夠被 named 寫入就行了。如果您不確定﹐那只需將目錄的 owner 改一改就行了﹕
chown -R named.named /var/named
這樣的話﹐只要 slave 的 refresh
時間到達﹐就會自動的幫您更新記錄資料了(當然了﹐底層的路由和連線必須是暢通無阻的)。但是﹐每次當您修改了 master 上面的設定並重新啟動
named 服務的時候﹐master 就會主動向資源記錄當中的所有 NS 主機送出 NOTIFY 信號(自己除外﹐但 master 的 NS
記錄必須是第一筆)。當 slave(s) 收到來自 master 的 NOTIFY 之後﹐會回復一個確認給 master ﹔然後根據 /etc/