分类:
2005-10-20 11:27:56
named.conf 檔案中的設定﹐嘗試向所定義的 masters 位址進行 zone transfer (是否要更新資料﹐當然還必須以 Serial 為依據)﹐就好像 refresh 到達了一樣。
Tips﹕假如您發現修改 master 後並不能及時同步 slave 上的資料﹐那可能是 slave 並沒寫在 NS 記錄上。如果您不願意修改 NS 記錄﹐那您可以在 master 的 named.conf 裡面的 zone 設定上加上這幾行﹕
zone "siyongc.domain" IN {
type master;
file "siyongc.domain";
notify yes;
also-notify { 192.168.100.26; };
};
這樣﹐master 在修改後同時還會通知名單中的 slave 主機。
事實上﹐如果有別的 slave DNS 被設定為指向該這台 master 的話﹐就算您這裡將 notify 設為 no ﹐當 slave 主機的 refresh 到期的時候﹐還是可以進行區域轉移 (zone transfer) 的。
當然了﹐為了防止別人任意的向 master 進行 zone transfer 而盜取 zone 資料﹐named 還允許您以 acl (Access Control List) 來控制哪些主機才能上來進行區域轉移(這個我們後面再談)﹐同時﹐還允許 zone transfer 的時候以加密的方式傳送資料。
除了上述的備援需求外﹐在其它情形也有可能需要 master / slave
的架構。比方說﹐您有一個很大型的網路﹐如果所有主機都集中向 master 進行 DNS 查詢﹐那勢必會增加 master
的工作負荷﹑而降低其效能﹐同時也產生額外的遠程網路流量。這時﹐您最好設定多台 slave 放置在不同的地點來分擔 master
的工作﹐同時也能提供備援服務。
設定 forwarder
我們除了能夠用 slave 來分擔 master 工作﹑減少網路流量之外﹐還可以透過另外一種 DNS 機制來減低網路流量的﹐那就是 forwarder 設定了。
所謂的 forwarder ﹐就是當某一台 NS 主機遇到非本機負責的 zone ( slave zone 也屬於本機負責的範圍) 之查詢請求的時候﹐將不直接向 root zone 查詢而把請求轉交給指定的 forwarder (一台或多台) 主機代為查詢。如果您不了解 DNS 的查詢模式﹐那您很難理解這個 forwarder 的意義和好處。
我們知道﹐當 NS 主機在接到 client 的查詢的時候﹐首先會檢查這個查詢是否屬於本機管轄﹐否則將轉向 root zone 再逐級的查詢下去﹐最後將結果告訴 client 。而在這個過程之中﹐NS 主機還會將每一筆結果存放到 cache 中。這樣﹐只要 cache 中的 TTL 沒過期的話﹐在下次遇到同樣查詢的時候﹐就可以直接將結果回應給 client 了﹐而無需再重複上次的查詢流程。如果 NS 上面指定了 forwarder﹐那這個 NS 發現 cache 沒有記錄的話﹐將不向 root 查詢﹐而是將自己扮成一個 client﹐向 forwarder 送出同樣的請求﹐然後等待查詢結果﹔而逐級往下查詢的動作﹐則交由 forwarder 負責﹐NS 自己就輕鬆多了。但無論這個結果是自己直接查詢得來的﹐還是 forwarder 送回來的﹐NS 都會保存一份資料在 cache 中。這樣﹐其後的相同查詢就快多了﹐這對於 NS 所服務的 client 而言更是有效率得多。
但是﹐假如您仔細研究一下這個 forwarder 機制﹐您會發現它的好處並非僅是上面所提到的效能提昇﹐而且﹐對於整個網路流量(尤其是對外的流量)也有非常正面的幫助。比方說﹐您的內部網路需要 10 台 DNS 來提供服務﹐您只需在某一台能直接與外界溝通的電腦上架設 DNS 服務﹐然後將其它內部 NS 的 forwarder 指向該主機就行了。這樣﹐本來需要 10 次的 root 查詢﹐在 forwarders 的機制下﹐就只需 1 次而已﹗連同下層的往返查詢來計算的話﹐總體上所省下的對外查詢就更多了~~ 如果再加上 cache 的效能﹐forwarder 所降低的 DNS 流量是非常顯著的。
事實上﹐forwarder 在我們的實際應用中也很常見﹐例如﹐我們只要將 forwarder 設定為 ISP 的 DNS ﹐那麼﹐我們的 NS 就無需直接向 root 查詢了﹔又因為 ISP 上的 DNS 也有 cache 的關係﹐所以我們的 NS 所獲得的查詢結果﹐也比直接向 root 查詢來得要快。