<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定 談完了一些基礎概念后,接下來讓我們來聊一聊,那如何設定好 DNS 服務器啊?這當然就得由軟件安裝談起啦! 在這個小節,我們先不要談 DNS 記錄的正反解咚咚,只講到 hint 這個 . (root) 的 zone,談一談最簡單的僅有快取的 DNS 服務器 (Caching only DNS server) 吧! * * * ### 19.3.1 架設 DNS 所需要的軟件 終于廢話都說完了!相信你大概也有點累的吧?鳥哥是蠻累的啦,因為手臂、肩頸酸痛的毛病頗嚴重....咦!講這個干嘛? @_@ 好啦,我們終于要來安裝 DNS 所需要的軟件了!還記得前面提過的,我們要使用的 DNS 軟件就是使用柏克萊大學發展出來的 BIND (Berkeley Internet Name Domain, BIND) 這個啦!那么怎么知道你安裝了沒?不就是 rpm 與 yum 嗎?自己查查看。 ``` [root@www ~]# rpm -qa &#124; grep '^bind' bind-libs-9.7.0-5.P2.el6_0.1.x86_64 &lt;==給 bind 與相關指令使用的函式庫 bind-utils-9.7.0-5.P2.el6_0.1.x86_64 &lt;==這個是客戶端搜尋主機名的相關指令 bind-9.7.0-5.P2.el6_0.1.x86_64 &lt;==就是 bind 主程序所需軟件 bind-chroot-9.7.0-5.P2.el6_0.1.x86_64 &lt;==將 bind 主程序關在家里面! ``` 上面比較重要的是那個『 bind-chroot 』啦!所謂的 chroot 代表的是『 change to root(根目錄) 』的意思,root 代表的是根目錄。早期的 bind 默認將程序啟動在 /var/named 當中,但是該程序可以在根目錄下的其他目錄到處轉移,因此若 bind 的程序有問題時,則該程序會造成整個系統的危害。為避免這個問題, 所以我們將某個目錄指定為 bind 程序的根目錄,由于已經是根目錄,所以 bind 便不能離開該目錄!所以若該程序被攻擊,了不起也是在某個特定目錄底下搞破壞而已。 CentOS 6.x 默認將 bind 鎖在 /var/named/chroot 目錄中喔! 我們主程序是由 bind, bind-chroot 所提供,那前一小節提到的,每部 DNS 服務器都要有的 . (root) 這個 zone file 在哪里?它也是由 bind 所提供的喔! (CentOS 4.x, 5.x 所提供的 caching-nameserver 軟件并不存在 CentOS 6.x 當中了喔!已經被涵蓋于 bind 軟件內!) * * * ### 19.3.2 BIND 的默認路徑設定與 chroot 要架設好 BIND 需要什么設定數據呢?基本上有兩個主要的數據要處理: * BIND 本身的配置文件:主要規范主機的設定、zone file 的所在、權限的設定等; * 正反解數據庫檔案 (zone file):記錄主機名與 IP 對應的等。 BIND 的配置文件為 /etc/named.conf,在這個檔案里面可以規范 zone file 的完整檔名喔! 也就是說,你的 zone file 其實是由 /etc/named.conf 所指定的,所以 zone file 檔名可以隨便取啦! 只要 /etc/named.conf 內規范為正確即可。一般來說, CentOS 6.x 的默認目錄是這樣的: * /etc/named.conf :這就是我們的主配置文件啦! * /etc/sysconfig/named :是否啟動 chroot 及額外的參數,就由這個檔案控制; * /var/named/ :數據庫檔案默認放置在這個目錄 * /var/run/named :named 這支程序執行時默認放置 pid-file 在此目錄內。 * /etc/sysconfig/named 與 chroot 環境 不過,為了系統的安全性考慮,一般來說目前各主要 distributions 都已經自動的將你的 bind 相關程序給他 chroot 了! 那你如何知道你 chroot 所指定的目錄在哪里呢?其實是記錄在 /etc/sysconfig/named 里面啦!你可以先查閱一下: ``` [root@www ~]# cat /etc/sysconfig/named ROOTDIR=/var/named/chroot ``` 事實上該檔案內較有意義的就只有上面這一行,意思是說:『我要將 named 給他 chroot ,并且變更的根目錄為 /var/named/chroot 』喔!由于根目錄已經被變更到 /var/named/chroot 了,但 bind 的相關程序是需要 /etc, /var/named, /var/run ...等目錄的,所以實際上咱們 bind 的相關程序所需要的所有數據會是在: * **/var/named/chroot**/etc/named.conf * **/var/named/chroot**/var/named/zone_file1 * **/var/named/chroot**/var/named/zone_file..... * **/var/named/chroot**/var/run/named/... 哇!真是好麻煩~不過,不要太擔心!因為新版本的 CentOS 6.x 已經將 chroot 所需要使用到的目錄,透過 mount --bind 的功能進行目錄鏈接了 (參考 /etc/init.d/named 內容),舉例來說,我們需要的 /var/named 在啟動腳本中透過 mount --bind /var/named /var/named/chroot/var/named 進行目錄綁定啰!所以在 CentOS 6.x 當中,你根本無須切換至 /var/named/chroot/ 了!使用正規的目錄即可喔!就是這樣簡單!^_^ **Tips:** 事實上, /etc/sysconfig/named 是由 /etc/init.d/named 啟動時所讀入的,所以你也可以直接修改 /etc/init.d/named 這個 script 哩! ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) * * * ### 19.3.3 單純的 cache-only DNS 服務器與 forwarding 功能 在下一小節開始介紹正、反解 zone 的數據設定之前,在這個小節當中,我們先來談一個單純修改配置文件,而不必設計 zone file 的環境,那就是不具有自己正反解 zone 的僅進行快取的 DNS 服務器。 * 什么是 cache-only 與 forwarding DNS 服務器呢? 有個只需要 . 這個 zone file 的簡單 DNS 服務器,我們稱這種沒有自己公開的 DNS 數據庫的服務器為 cache-only (僅快取) DNS server!顧名思義,這個 DNS server 只有快取搜尋結果的功能,也就是說,他本身并沒有主機名與 IP 正反解的配置文件,完全是由對外的查詢來提供他的數據源! 那如果連 . 都不想要呢?那就得要指定一個上層 DNS 服務器作為你的 forwarding (轉遞) 目標,將原本自己要往 . 查詢的任務,丟給上層 DNS 服務器去煩惱即可。 如此一來,我們這部具有 forwarding 功能的 DNS 服務器,甚至連 . 都不需要了!因為 . 有記錄在上層 DNS 上頭了嘛! 如同剛剛提到的,cache only 的 DNS 并不存在數據庫 (其實還是存在 . 這個 root 領域的 zone file), 因此不論是誰來查詢數據,這部 DNS 一律開始從自己的快取以及 . 找起,整個流程與[圖 19.1-4](#fig19.1-4) 相同。那如果具有 forwarding 功能呢?果真如此,那即使你的 DNS 具有 . 這個 zone file,這部 DNS 還是會將查詢權『委請』上層 DNS 查詢的,這部 DNS 服務器當場變成客戶端啦!查詢流程會變這樣喔: ![](https://box.kancloud.cn/2016-05-13_5735da7bb0d71.gif) 圖 19.3-1、具有 forwarding 功能的 DNS 服務器查詢方式 觀察上圖的查詢方向,你會發現到,具有 forwarding 機制時,查詢權會委請上層 DNS 服務器來處理,所以根本也不需要 . 這個位置所在的 zone 啦。一般來說,如果你的環境需要架設一個 cache-only 的 DNS 服務器時,其實可以直接加上 forwarding 的機制,讓查詢權指向上層或者是流量較大的上層 DNS 服務器即可。那既然 cache only 的服務器并沒有數據庫, forwarding 機制甚至不需要 . 的 zone ,那干嘛還得要架設這樣的 DNS 呢?是有理由的啦! * 什么時候有架設 cache-only DNS 的需求? 在某些公司行號里頭,為了預防員工利用公司的網絡資源作自己的事情,所以都會針對 Internet 的聯機作比較嚴格的限制。當然啦,連 port 53 這個 DNS 會用到的 port 也可能會被擋在防火墻之外的~這個時候, 你可以在『防火墻的那部機器上面,加裝一個 cache-only 的 DNS 服務!』 這是什么意思呢?很簡單啊!就是你自己利用自己的防火墻主機上的 DNS 服務去幫你的 Client 端解譯 hostname &lt;--&gt; IP 啰!因為防火墻主機可以設定放行自己的 DNS 功能,而 Client 端就設定該防火墻 IP 為 DNS 服務器的 IP 即可!哈哈!這樣就可以取得主機名與 IP 的轉譯啦!所以,通常架設 cache only DNS 服務器大都是為了系統安全啰。 * 實際設定 cache-only DNS server 那如何在你的 Linux 主機上架設一個 cache-only 的 DNS 服務器呢?其實真的很簡單的啦!因為不需要設定正反解的 zone (只需要 . 的 zone 支持即可),所以只要設定一個檔案 (就是 named.conf 主配置文件) 即可!真是快樂得不得了吶! 另外,cache-only 只要加上個 forwarders 的設定即可指定 forwarding 的數據,所以底下我們將設定具有 forwarding 的 cache-only DNS 服務器吧! 1. * * * 編輯主要配置文件: /etc/named.conf 雖然我們具有 chroot 的環境,不過由于 CentOS 6.x 已經透過啟動腳本幫我們進行檔案與目錄的掛載鏈接,所以請你直接修改 /etc/named.conf 即可呦!不要再去 /var/named/chroot/etc/named.conf 修改啦! 在這個檔案中,主要是定義跟服務器環境有關的設定,以及各個 zone 的領域及數據庫所在文件名。 在鳥哥的這個案例當中,因為使用了 forwarding 的機制,所以這個 cache-only DNS 服務器并沒有 zone (連 . 都沒有),所以我們只要設定好跟服務器有關的設定即可。設定這個檔案的時候請注意: * 批注數據是放置在兩條斜線『 // 』后面接的數據 * 每個段落之后都需要以分號『 ; 』來做為結尾! 鳥哥將這個檔案再簡化如下的樣式: ``` [root@www ~]# cp /etc/named.conf /etc/named.conf.raw [root@www ~]# vim /etc/named.conf // 在預設的情況下,這個檔案會去讀取 /etc/named.rfc1912.zones 這個領域定義檔 // 所以請記得要修改成底下的樣式啊! options { listen-on port 53 { any; }; //可不設定,代表全部接受 directory "/var/named"; //數據庫默認放置的目錄所在 dump-file "/var/named/data/cache_dump.db"; //一些統計信息 statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; //可不設定,代表全部接受 recursion yes; //將自己視為客戶端的一種查詢模式 forward only; //可暫時不設定 forwarders { //是重點! 168.95.1.1; //先用中華電信的 DNS 當上層 139.175.10.20; //再用 seednet 當上層 }; }; //最終記得要結尾符號! ``` 鳥哥將大部分的數據都予以刪除,只將少部分保留的數據加以小部分的修訂而已。在 named.conf 的結構中,與服務器環境有關的是由 options 這個項目內容設定的,因為 options 里面還有很多子參數, 所以就以大括號 { } 包起來啰。至于 options 內的子參數在上面提到的較重要的項目簡單敘述如下: * listen-on port 53 { any; }; 監聽在這部主機系統上面的哪個網絡接口。預設是監聽在 localhost,亦即只有本機可以對 DNS 服務進行查詢,那當然是很不合理啊! 所以這里要將大括號內的數據改寫成 any。記得,因為可以監聽多個接口,因此 any 后面得要加上分號才算結束喔! 另外,這個項目如果忘記寫也沒有關系,因為默認是對整個主機系統的所有接口進行監聽的。 * directory "/var/named"; 意思是說,如果此檔案底下有規范到正、反解的 zone file 檔名時,該檔名預設應該放置在哪個目錄底下的意思。預設放置到 /var/named/ 底下。由于 chroot 的關系,最終這些數據庫檔案會被主動鏈接到 /var/named/chroot/var/named/ 這個目錄。 * dump-file, statistics-file, memstatistics-file 與 named 這個服務有關的許多統計信息,如果想要輸出成為檔案的話,預設的檔名就如上所述。鳥哥自己很少看這些統計資料, 所以,這三個設定值寫不寫應該都是沒有關系的。 * allow-query { any; }; 這個是針對客戶端的設定,到底誰可以對我的 DNS 服務提出查詢請求的意思。原本的檔案內容預設是針對 localhost 開放而已, 我們這里改成對所有的用戶開放 (當然啦,防火墻也得放行才行)。不過,預設 DNS 就是對所有用戶放行,所以這個設定值也可以不用寫。 * forward only ; 這個設定可以讓你的 DNS 服務器僅進行 forward,即使有 . 這個 zone file 的設定,也不會使用 . 的資料, 只會將查詢權交給上層 DNS 服務器而已,是 cache only DNS 最常見的設定了! * forwarders { 168.95.1.1; 139.175.10.20; } ; 既然有 forward only,那么到底要對哪部上層 DNS 服務器進行轉遞呢?那就是 forwarders (不要忘記那個 s) 設定值的重要性了!由于擔心上層 DNS 服務器也可能會掛點,因此可以設定多部上層 DNS 服務器喔!每一個 forwarder 服務器的 IP 都需要有『 ; 』來做為結尾! 很簡單吧!至于更多的參數我們會在后續篇幅當中慢慢介紹的。這樣就已經設定完成了最簡單的 cache only DNS server 了! 2. * * * 啟動 named 并觀察服務的埠口 啟動總不會忘記吧?趕快去啟動一下吧!同時啟動完畢之后,觀察一下由 named 所開啟的埠口,看看到底哪些埠口會被 DNS 用到的! ``` # 1\. 啟動一下 DNS 這玩意兒! [root@www ~]# /etc/init.d/named start Starting named: [ OK ] [root@www ~]# chkconfig named on # 2\. 到底用了多少埠口呢? [root@www ~]# netstat -utlnp &#124; grep named Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.100.254:53 0.0.0.0:* LISTEN 3140/named tcp 0 0 192.168.1.100:53 0.0.0.0:* LISTEN 3140/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3140/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3140/named tcp 0 0 ::1:953 :::* LISTEN 3140/named udp 0 0 192.168.100.254:53 0.0.0.0:* 3140/named udp 0 0 192.168.1.100:53 0.0.0.0:* 3140/named udp 0 0 127.0.0.1:53 0.0.0.0:* 3140/named ``` 我們知道 DNS 會同時啟用 UDP/TCP 的 port 53,而且是針對所有接口,因此上面的數據并沒有什么特異的部分。不過,怎么會有 port 953 且僅針對本機來監聽呢?其實那是 named 的遠程控制功能,稱為遠程名稱解析服務控制功能 (remote name daemon control, rndc)。預設的情況下,僅有本機可以針對 rndc 來控制。我們會在后續的章節再來探討這個 rndc 啦,目前我們只要知道 UDP/TCP port 53 有啟動即可。 3. * * * 檢查 /var/log/messages 的內容訊息 (極重要!) named 這個服務的記錄文件就直接給他放置在 /var/log/messages 里面啦,所以來看看里面的幾行登錄信息吧! ``` [root@www ~]# tail -n 30 /var/log/messages &#124; grep named Aug 4 14:57:09 www named[3140]: starting BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 -u named -t /var/named/chroot &lt;==說明的是 chroot 在哪個目錄下! Aug 4 14:57:09 www named[3140]: adjusted limit on open files from 1024 to 1048576 Aug 4 14:57:09 www named[3140]: found 1 CPU, using 1 worker thread Aug 4 14:57:09 www named[3140]: using up to 4096 sockets Aug 4 14:57:09 www named[3140]: loading configuration from '/etc/named.conf' Aug 4 14:57:09 www named[3140]: using default UDP/IPv4 port range: [1024, 65535] Aug 4 14:57:09 www named[3140]: using default UDP/IPv6 port range: [1024, 65535] Aug 4 14:57:09 www named[3140]: listening on IPv4 interface lo, 127.0.0.1#53 Aug 4 14:57:09 www named[3140]: listening on IPv4 interface eth0, 192.168.1.100#53 Aug 4 14:57:09 www named[3140]: listening on IPv4 interface eth1, 192.168.100.254#53 Aug 4 14:57:09 www named[3140]: generating session key for dynamic DNS Aug 4 14:57:09 www named[3140]: command channel listening on 127.0.0.1#953 Aug 4 14:57:09 www named[3140]: command channel listening on ::1#953 Aug 4 14:57:09 www named[3140]: the working directory is not writable Aug 4 14:57:09 www named[3140]: running ``` 上面最重要的是第一行出現的『-t ...』那個項目指出你的 chroot 目錄啰。另外,上面表格中特殊字體的部分,有寫到讀取 /etc/named.conf,代表可以順利的加載 /var/named/etc/named.conf 的意思。如果上面有出現冒號后面接數字 (:10), 那就代表某個檔案內的第十行有問題的意思,屆時再進入處理即可。要注意的是,即使 port 53 有啟動,但有可能 DNS 服務是錯誤的,此時這個登錄檔就顯的非常重要!每次重新啟動 DNS 后,請務必查閱一下這個檔案的內容!! **Tips:** 如果你在 /var/log/messages 里面一直看到這樣的錯誤信息: couldn't add command channel 127.0.0.1#953: not found 那表示你還必需要加入 rndc key ,請參考本章后面的 [利用 RNDC 指令管理 DNS 服務器](#rndckey) 的介紹,將他加入你的 named.conf 中! ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) 4. * * * 測試: 如果你的 DNS 伺服器具有連上因特網的功能,那么透過『 dig www.google.com @127.0.0.1 』這個基本指令執行看看, 如果有找到 google 的 IP ,并且輸出數據的最底下顯示『 SERVER: 127.0.0.1#53(127.0.0.1) 』的字樣, 那就代表應該是成功啦!其他更詳細的測試請參考:[19.2 小節的內容](#DNS_resolver) * 特別說明:Forwarders 的好處與問題分析 關于 forwarder 的好處與壞處,其實有很多種的意見!大致的意見可分為這兩派: * 利用 Forwarder 的功能來增進效能的理論: 這些朋友們認為,當很多的下層 DNS 服務器都使用 forwarder 時,那么那個被設定為 forwarder 的主機,由于會記錄很多的查詢信息記錄 (請參考[圖 19.1-4](#fig19.1-4) 的說明),因此,對于那些下層的 DNS 服務器而言,查詢速度會增快很多,亦即會節省很多的查詢時間!因為 forwarder 服務器里面有較多的快取記錄了, 所以包括 forwarder 本身,以及所有向這部 forwarder 要求數據的 DNS 服務器,都能夠減少往 . 查詢的機會, 因此速度當然增加。 * 利用 Forwarder 反而會使整體的效能降低: 但是另外一派則持相反的見解!這是因為當主 DNS 本身的『業務量』就很繁忙的時候,那么你的 cache only DNS 服務器還向他要求數據,因為他原本的數據傳輸量就太大了,帶寬方面可能負荷不量,而太多的下層 DNS 還向他要求數據,所以他的查詢速度會變慢!因為查詢速度變慢了,而你的 cache only server 又是向他提出要求的,所以自然兩邊的查詢速度就會同步下降! 很多種說法啦!鳥哥本人也覺得很有趣哩!只是不知道哪一派較正確就是了,不過可以知道的是,如果上層的 DNS 速度很快的話,那么他被設定為 forwarder 時,或許真的可以增加不少效能哩! * * *
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看