架設 DNS 所需要的套件

  • 安裝 DNS 套件: BIND
    終於廢話都說完了!相信您大概也有點累的吧!?鳥哥是蠻累的啦,因爲手臂、肩頸痠痛的毛病頗嚴重....咦!講這個幹嘛!? @_@ 好啦,我們終於要來安裝 DNS 所需要的套件了!還記得前面提過的,我們要使用的 DNS 就是使用柏克萊大學發展出來的 BIND ( Berkeley Internet Name Domain, BIND ) 這個套件啦!那麼怎麼知道您安裝了沒?還記得基礎篇裏面的 RPM 嗎?對啦!就是使用 RPM 來檢驗囉:
     
    [root@test root]# rpm -qa | grep bind
    bind-9.2.1-4mdk         <==這個是用來安裝 Server 的
    bind-utils-9.2.1-4mdk      <==這個是用來做爲 Client 端搜尋 domain name 的指令
     
    萬一沒裝怎麼辦?嗄!還問我ㄌㄟ~趕快將您的原版光盤拿出來,然後將他安裝上去先~不會安裝?請自行拿出『鳥哥的 Linux 私房菜 -- 基礎學習篇』去觀察一下 RPM 的用法吧!
  • BIND 的預設路徑設定:
    基本上, BIND 的主要設定檔爲 /etc/named.conf這一支檔案,各種針對主機的設定值都在這個檔案中設定的!但是對於 hostname <--> IP 的對應關係,就需要由 zone 來設定了!但是這個 zone 的文件名稱是在 /etc/named.conf 裏面規定的!所以,請注意喔,每一個 zone 的名稱都是可變的,但是需要在 /etc/named.conf 裏面命名好!此外,最好將 zone 規定出來的檔案直接放置到 BIND 的預設 zone 擺放的目錄,就是 /var/named 裏面去!比較好管理囉!
  • BIND 的升級:
    必須請大家注意的是,這個 DNS 的 53 port 其實也不是個很安全的咚咚,所以呢,非必要,其實是不太建議啓用 DNS 的啦!不過,如果真的要安裝的話,那麼請隨時注意您的 linux學習 distribution 是否有定時的公告的漏洞修補套件呢?這個真的很重要,因爲鳥哥很久很久以前,就是被這個 port 53 給種植了一個蠕蟲,真是討厭的很! @_@

設定部分 在 DNS 的設定上面,基本上,您必須要已經很清楚 zone 是什麼了,否則很難繼續設定喔!會搞的一塌糊塗的~無論如何,您一定要知道的是, bind 的設定檔,就是 /etc/named.conf 這個檔案,如果他不存在的話,請自行建立吧!另外,針對 DNS server 的類型大致上可以分爲三類,分別是:
 
  • Master:這種類型的 DNS 本身含有領域名稱的設定檔(就是有Zone啦!),這個設定檔就是設定正解或者是反解的『Database』囉!所以他本身是具有提供 Internet 查詢所需的數據喔!例如我可以在我的主機上面設定提供 vbird.idv.tw 這個網域,那麼我的主機就是 master 類型的主機啦!
 
  • Slave:這種類型的主機本身不必直接由 DNS 系統管理員手動設定 DNS 的正反解數據庫檔案,而是對應到這部 Slave 所支持的 Master 主機去備份 DNS 的設定檔案數據,也就是說, Slave 會將 Master 上面已經訂定好的正反解對應數據文件備份一份在自己的系統當中喔!( 注:當然囉,這個 Master 必須要開放 Slave 來更新 Slave 的數據對應文件喔! ) 此外,需要特別留意的是, Slave 主機並不是在 Master 掛點時纔會『活起來』的,而是他與 Master 相同,都同時負責 Internet 上面的 domain 查尋!那麼架設這個 Slave 有什麼好處呢?呵呵!最大的好處就是『單點維護』啦!怎麼說呢?假設您有三部 DNS 主機,那麼萬一您所管理的網域之內要加入一部新的主機名稱,試問,您是要手動修改 3 部計算機還是僅修改一部計算機,其它的兩部讓他自動的更新其設定呢?這樣說親愛的朋友們,您應該可以理解了吧! ^_^!由於這個 Slave 並不是在 Master 掛點時纔會活起來的一個 DNS 主機,因此,如果您向 ISP 訂定兩部 DNS 主機時,千萬要讓這兩部都活起來喔!因爲不論是 Master 或是 Slave ,在 Internet 上面並非循序來查尋 domain name 的,而是先找到先贏的,所以我們不會曉得哪一部主機會先被查詢到!當然啦!因此兩部 Master/Slave 的機器就需要通通可以在 Internet 上面工作啦!
 
  • Cache-only:通常設定在防火牆上面的呢!這種類型的 DNS 主機沒有自己的數據庫,單純僅幫助 Client 端向外部的 DNS 主機要求數據而已~簡單的來說,他可以想成是一個『代理人』的角色而已~
 
那麼 Master/Slave 的數據更新到底是如何動作的呢?請注意,Slave 是需要更新來自 Master 的 DNS 數據啊!所以當然 Slave 在設定之初就需要存在 Master 纔行喔!好了, Master 與 Slave 的數據同步動作可以由底下的圖示來看:
 

圖四、Master/Slave 的 DNS 主機數據同步過程
  • 判斷是否需要更新(1.1):我們可以在 Slave 設定好向 Master DNS 主機要求數據更新的週期時間,則每當到達更新時間時, Slave 會向 Master 索取是否需要更新數據,這個更新數據的判斷則以 Serial number 是否不同來進行更新喔
  • 判斷是否需要更新(1.2):除了由 Slave 向 Master 的查詢之外,Master 如果 DNS 數據經過變更,且想要 Slave 同步更新時,也可以主動的向 Slave 進行更新通知!
  • 數據同步化(2):最後當然就是數據由 Master 傳送到 Slave 來更新 Slave 的 DNS 數據囉!
 
請注意,如果您想要架設 Master/Slave 的 DNS 架構時,兩部主機 (Master/Slave) 都需要您能夠掌控纔行!網絡上很多的文件在這個地方都有點『閃失』,請特別的留意啊!
 
底下我們就來談一談兩個簡單的 DNS 主機,分別是 cache-only ( 單純 forward ) 與較爲詳細的 Master 類型的 DNS 主機吧!至於 slave 與 Master 的設定蠻類似的,這裏我們就不多加介紹了!
 

單純的 forward DNS 主機設定:
 
什麼是單純的 forward DNS 的主機呢?
好了,瞭解了 BIND 的預設路徑之後,我們知道了主要設定檔是 /etc/named.conf 這個檔案,但是偏偏我的 /etc 底下就沒有這個檔案!哈哈!因爲您要自行建立啦! ^_^!在介紹怎麼設定每一個 zone 之前,我們先來玩一個簡單的 DNS 主機!就是 cache-only DNS server !也稱爲 forward DNS 囉!顧名思義,這個 DNS server 只有 cache ( 快取 ) 的功能,也就是說,他本身沒有設定檔,完全是由對外的查詢來提供他的數據來源!因爲他沒有設定檔,所以他就必須要連上一部合法的 DNS 纔行!整個運作的流程可以看成是這個樣子:

圖五、Cache-Only DNS 主機的運作流程
  • 由上面的圖示來看,您可以發現,其實,我們 Client 端雖然都是使用 Cache-Only 的 DNS 再搜尋,但是,實際上 Cache-only 的主機都是請一個 ( Forwarders ) DNS 主機來幫忙查詢的,本身並沒有設定檔的啦!所以說,基本上, cache-only 的 DNS 只是一箇中間傳遞數據的 DNS 主機罷了!那麼爲什麼要架設這樣的一個 DNS 主機呢?閒閒沒事幹?當然不是!這是有原因的啦!底下說給您聽囉!
什麼時候使用 cache-only DNS?
在某些公司行號裏頭,爲了預防員工利用公司的網絡資源作自己的事情,所以都會規定 Internet 的聯機上面相當的嚴格,所以說,有的時候,連自己都會被擋住!自然,這個 port 53 也就同樣的,可能被擋住啦!那麼我們知道說,如果沒有 port 53 這個 DNS ,那麼自然就無法解析出 hostname 對應 IP 囉!是的!怎麼辦?這個時候,您可以在『防火牆的那部機器上面,加裝一個 cache-only 的 DNS 服務!』這是什麼意思呢?很簡單啊!就是您自己利用自己的 firewall 與 DNS 去幫您的 Client 端解譯 hostname <--> IP 囉!因爲 firewall 可以設定放行自己的 DNS 外出,而 Client 端的 DNS server IP 就設定自己的 firewall ,哈哈!這樣就可以取得轉譯啦!簡易的 cache-only DNS 設定:
設定一個 cache-only 的 DNS 主機其實真的很簡單的啦!因爲不需要設定正反解的 Zone ,所以只要設定一個檔案即可!真是快樂得不得了吶!
 
  1. 編輯 /etc/named.conf
    在這個檔案中,主要是定義跟主機有關的事項,以及各個 Zone 的代表含意與檔案,因爲 cache-only 沒有 Zone ,所以我們只要設定好跟主機有關的設定即可。設定這個檔案的時候請注意:
     
    • 批註數據是以『 // 』來作設定的!
    • 每個段落之後都需要以『 ; 』來做爲結尾!
     
    那麼您可以這樣設定這個檔案啦!
     
    [root@test root]# vi /etc/named.conf
    // This settings is only for forwarding DNS Server
    options {
            pid-file "/var/run/named/named.pid"; //我這裏設定 pid-file !這個時候,
                           //請特別留意該路徑的所有人 ( owner )
                           //一定是要 named 這個人才行!
            forward only;             //只允許 forward!
            forwarders {
                    168.95.1.1;          //我這裏使用 hinet 的 DNS !
                    139.175.10.20;        //這個是 seednet 的 DNS !
            };
    };

    [root@test root]# ls -al /var/run/named
    total 12
    drwxr-xr-x    2 named    named        4096 Dec 5 02:28 ./ <==注意這個 owner 喔!
    drwxr-xr-x   10 root     root         4096 Dec 5 02:01 ../

     
    • options 的內容指的是在主機內的主要設定值,裏頭的設定爲:
      • pid-file 指的是每一個 services 的記錄自己的 PID ( Process ID ) 的檔案囉!這個檔案通常用在重新啓動或者是 reload 整個 services 最常被使用到的!因爲可以使用 kill -1 PID 來重新啓動啊!嗄!忘記什麼是 PID ?趕快拿出基礎篇複習一下!
      • forwarders (不要忘記那個 s 喔!)就是要設定往前尋找的那個『合法』的 DNS 囉!每一個 forward 的主機之 IP 都需要有『 ; 』來做爲結尾!
      • forward only:這個設定可以讓您的 DNS 主機僅進行 forward 而已!是 Cache-Only 主機最常見的設定了!
     
    很簡單吧!這樣就已經設定完成了最簡單的 cache-only 的 DNS 主機了!
     
  2. 啓動 named
    啓動總不會忘記吧!?趕快去啓動一下吧!
     
    [root@test root]# /etc/rc.d/init.d/named start
    Starting named:                                                 [ OK ]
     
  3. 觀察 port 的變化
    請特別的注意喔!並不是啓動的時候顯示 OK 就會成功的!所以,還要趕快的來看一下您的 port 53 有沒有啓動ㄋㄟ~
     
    [root@test root]# netstat -utln
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp        0      0 192.168.1.2:53          0.0.0.0:*               LISTEN
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
    udp        0      0 192.168.1.2:53          0.0.0.0:*
    udp        0      0 127.0.0.1:53            0.0.0.0:*
     
    特別需要留意的是,如果沒有指定接口的話,那麼所有的網絡接口,包含 lo, eth0, ... 等接口都會被設定爲可以接受 domain name 要求的響應接口!此外,還記得我們在前面提到的,每個接口同時都會提供 TCP 與 UDP 封包的服務喔!這樣看起來似乎真的有啓動的樣子,不過,我們還是得瞧一瞧設定方面有沒有什麼大問題呢?
     
  4. 檢查 /var/log/messages 的內容訊息
    named 這個服務的記錄文件就直接給他放置在 /var/log/messages 裏面啦,所以來看看裏面的幾行吧!
     
    [root@test root]# tail -n 15 /var/log/messages | grep named
    Dec 5 02:33:33 test named[3010]: starting BIND 9.2.1 -u named
    Dec 5 02:33:33 test named[3010]: using 1 CPU
    Dec 5 02:33:33 test named[3015]: loading configuration from '/etc/named.conf'
    Dec 5 02:33:33 test named[3015]: no IPv6 interfaces found
    Dec 5 02:33:33 test named[3015]: listening on IPv4 interface lo, 127.0.0.1#53
    Dec 5 02:33:33 test named[3015]: listening on IPv4 interface eth0, 192.168.1.2#53
    Dec 5 02:33:33 test named[3015]: running
    Dec 5 02:33:33 test named: named startup succeeded
     
    呵呵!看起來似乎是沒有問題的樣子了!好了!那麼就直接來測試看看吧!
     
  5. 測試( 請觀看 Client 端的測試項目 )
Forwarders 的好處與問題分析
關於 forwarder 的好處與壞處,其實有很多種的意見!大致的意見可分爲這兩派:
 
  • 利用 Forwarder 的功能來增進效能的理論:這些朋友們認爲,當很多的下層 DNS 主機都使用 forwarder 時,那麼那個被設定爲 forwarder 的主機,由於會記錄很多的信息記錄,因此,對於那些下層的 DNS 主機而言,會增快很多,亦即會節省很多的查詢時間!基本上,這些基本的流程可以看成如下圖所示:

    圖六、Forwarder 參數的運作說明
     
    所有的 cache-only 都設定 forwarder 爲『主 DNS 主機』那一部,則由於主 DNS 主機已經記錄了較多的信息了(每個人都來要求嘛!)所以,當其它人來要求相同的查詢數據時,則主 DNS 那部機器將會直接由其 cache 當中讀取,因此,查詢效率就變快了!
     
  • 利用 Forwarder 反而會使整體的效能降低:但是另外一派則持相反的見解!這是因爲當主 DNS 本身的『業務量』就很繁忙的時候,那麼您的 cache-only 主機還向他要求數據,那麼因爲他的數據傳輸量太大,頻寬方面可能負荷不量,而太多的下層 DNS 又向他要求數據,所以他的查詢速度會變慢!因爲查詢速度變慢了,而您的 cache-only 主機又是向他提出要求的,所以自然兩邊的查詢速度就會同步下降!
 
很多種說法啦!鳥哥本人也覺得很有趣哩!只是不知道哪一派較正確就是了 >_<"" ,不過可以知道的是,如果上層的 DNS 速度很快的話,那麼他被設定爲 forwarder 時,或許真的可以增加不少效能哩! 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章