在下一小節開始介紹正、反解 zone 的資料設定之前,在這個小節當中,我們先來談一個單純修改設定檔,而不必設計 zone file 的環境,那就是不具有自己正反解 zone 的僅進行快取的 DNS 伺服器。
什麼是 cache-only 與 forwarding DNS 伺服器呢?
那如果連 . 都不想要呢?那就得要指定一個上層 DNS 伺服器作為你的 forwarding (轉遞) 目標,將原本自己要往 . 查詢的任務,丟給上層 DNS 伺服器去煩惱即可。 如此一來,我們這部具有 forwarding 功能的 DNS 伺服器,甚至連 . 都不需要了!因為 . 有記錄在上層 DNS 上頭了嘛!
如同剛剛提到的,cache only 的 DNS 並不存在資料庫 (其實還是存在 . 這個 root 領域的 zone file), 因此不論是誰來查詢資料,這部 DNS 一律開始從自己的快取以及 . 找起,整個流程與圖 19.1-4 相同。那如果具有 forwarding 功能呢?果真如此,那即使你的 DNS 具有 . 這個 zone file,這部 DNS 還是會將查詢權『委請』上層 DNS 查詢的,這部 DNS 伺服器當場變成用戶端啦!查詢流程會變這樣喔:
圖 19.3-1、具有 forwarding 功能的 DNS 伺服器查詢方式
什麼時候有架設 cache-only DNS 的需求?
這是什麼意思呢?很簡單啊!就是你自己利用自己的防火牆主機上的 DNS 服務去幫你的 Client 端解譯 hostname <--> IP 囉!因為防火牆主機可以設定放行自己的 DNS 功能,而 Client 端就設定該防火牆 IP 為 DNS 伺服器的 IP 即可!哈哈!這樣就可以取得主機名稱與 IP 的轉譯啦!所以,通常架設 cache only DNS 伺服器大都是為了系統安全囉。
實際設定 cache-only DNS server
編輯主要設定檔: /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 當上層 }; }; //最終記得要結尾符號!
- 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 了!
啟動 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 | 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
檢查 /var/log/messages 的內容訊息 (極重要!)
named 這個服務的記錄檔就直接給他放置在 /var/log/messages 裡面啦,所以來看看裡面的幾行登錄資訊吧!
[root@www ~]# tail -n 30 /var/log/messages | 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 <==說明的是 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
Tips:
如果你在 /var/log/messages 裡面一直看到這樣的錯誤資訊:
couldn't add command channel 127.0.0.1#953: not found
那表示你還必需要加入 rndc key ,請參考本章後面的 利用 RNDC 指令管理 DNS 伺服器 的介紹,將他加入你的 named.conf 中!
測試:
如果你的 DNS 伺服器具有連上網際網路的功能,那麼透過『 dig www.google.com @127.0.0.1 』這個基本指令執行看看, 如果有找到 google 的 IP ,並且輸出資料的最底下顯示『 SERVER: 127.0.0.1#53(127.0.0.1) 』的字樣, 那就代表應該是成功啦!其他更詳細的測試請參考:19.2 小節的內容
沒有留言:
張貼留言