19.4 DNS 伺服器的詳細設定
好了,經過上面的說明後,我們大概知道 DNS 的幾個小細節是這樣的:
- DNS 伺服器的架設需要上層 DNS 的授權才可以成為合法的 DNS 伺服器 (否則只是練功);
- 設定檔位置:目前 bind 程式已進行 chroot,相關目錄可參考 /etc/sysconfig/named;
- named 主要設定檔是 /etc/named.conf;
- 每個正、反解領域都需要一個資料庫檔案,而檔名則是由 /etc/named.conf 所設定;
- 當 DNS 查詢時,若本身沒有資料庫檔案,則前往 root (.) 或 forwarders 伺服器查詢;
- named 是否啟動成功務必要查閱 /var/log/messages 內的資訊!
其中第一點很重要,因為我們尚未向上層 ISP 註冊合法的領域名稱,所以我們當然就沒有權利架設合法的 DNS 伺服器了。 而由於擔心我們的 DNS 伺服器會與外部網際網路環境互相干擾,所以底下鳥哥將主要以一個 centos.vbird 的領域名稱來架設 DNS 伺服器,如此一來咱們就可以好好的玩一玩自己區域網路內的 DNS 啦!
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
既然 DNS 最早之前的目的就是要從主機名稱去找到 IP,所以就讓我們先從正解 zone 來談起吧。既然要談正解, 那麼就應該要瞭解正解檔案記錄的資訊有哪些吧?在這個小節裡面,我們就先來談談正解 zone 常常記錄的資料有哪些吧。
正解檔資源記錄 (resource record, RR) 格式
我們從前面幾個小節的 dig 指令輸出結果中,可以發現到一個有趣的咚咚,那就是輸出的資料格式似乎是固定的! 舉例來說,查詢 www.ksu.edu.tw 的 IP 時,輸出的結果為:
[root@www ~]# dig www.ksu.edu.tw ....(前面省略).... ;; ANSWER SECTION: www.ksu.edu.tw. 2203 IN A 120.114.100.101 ;; AUTHORITY SECTION: ksu.edu.tw. 911 IN NS dns1.ksu.edu.tw. ....(後面省略).... # 上面的輸出資料已經被簡化過了,重點是要大家瞭解 RR 的格式 |
在答案的輸出階段,主要查詢得到的是 A 的標誌,在認證階段,則是提供 ksu.edu.tw 的 NS 伺服器為哪一部的意思。 格式非常接近,只是 A 後面接 IP,而 NS 後面接主機名稱而已。我們可以將整個輸出的格式簡化成為如下的說明:
[domain] [ttl] IN [[RR type] [RR data]] [待查資料] [暫存時間(秒)] IN [[資源類型] [資源內容]] |
上表中,關鍵字 IN 是固定的,而 RR type 與 RR data 則是互有關連性的,例如剛剛才提過的 A 就是接 IP 而不是主機名稱啊。此外,在 domain 的部分,若可能的話,請盡量使用 FQDN,亦即是主機名稱結尾加上一個小數點的 (.) 就被稱為 FQDN 了!例如剛剛 dig www.ksu.edu.tw 的輸出結果中,在答案階段時,搜尋的主機名稱會變成 www.ksu.edu.tw. 喔!注意看最後面有個小數點喔!那個小數點非常重要!
至於 ttl 就是 time to live 的縮寫,意思就是當這筆記錄被其他 DNS 伺服器查詢到後, 這個記錄會保持在對方 DNS 伺服器的快取中,保持多少秒鐘的意思。所以,當你反覆執行 dig www.ksu.edu.tw 之後,就會發現這個時間會減少!為什麼呢?因為在你的 DNS 快取中,這筆資料能夠保存的時間會開始倒數, 當這個數字歸零後,下次有人再重新搜尋這筆記錄時,你的 DNS 就會重新沿著 . (root) 開始重來搜尋一遍, 而不會從快取裡面捉取了 (因為快取內的資料會被捨棄)。
由於 ttl 可由特定的參數來統一控管,因此在 RR 的記錄格式中,通常這個 ttl 的欄位是可以忽略的。 那麼常見的 RR 有哪些呢?我們將正解檔的 RR 記錄格式彙整如下:
# 常見的正解檔 RR 相關資訊 [domain] IN [[RR type] [RR data]] 主機名稱. IN A IPv4 的 IP 位址 主機名稱. IN AAAA IPv6 的 IP 位址 領域名稱. IN NS 管理這個領域名稱的伺服器主機名字. 領域名稱. IN SOA 管理這個領域名稱的七個重要參數(容後說明) 領域名稱. IN MX 順序數字 接收郵件的伺服器主機名字 主機別名. IN CNAME 實際代表這個主機別名的主機名字. |
接下來我們以崑山科大的 DNS 設定,包括 ksu.edu.tw 這個領域 (domain, zone),以及 www.ksu.edu.tw 這個主機名稱 (FQDN) 的查詢結果來跟大家解釋每個 RR 記錄的資訊為何呦!
A, AAAA :查詢 IP 的記錄
這個 A 的 RR 類型是在查詢某個主機名稱的 IP,也是最長被查詢的一個 RR 標誌喔!舉例來說,要找到 www.ksu.edu.tw 的 A 的話,就是這樣查:
[root@www ~]# dig [-t a] www.ksu.edu.tw ;; ANSWER SECTION: www.ksu.edu.tw. 2987 IN A 120.114.100.101 # 主機FQDN. ttl 這部主機的 IP 就是這裡 # 僅列出答案階段的資料,後續的 RR 相關標誌也是這樣顯示的喔! # 指令列中的 [-t a] 可以不加,而最左邊主機名稱結尾都會有小數點喔! |
左邊是主機名稱,當然,你也可以讓你的 domain 擁有一個 A 的標誌,例如『 dig google.com 』也能找到 IP。 不過,咱們崑山科大的 ksu.edu.tw 則沒有設定 IP 就是了。要再次特別強調的,主機名稱如果是全名, 結尾部分請務必加上小數點。如果你的 IP 設定的是 IPv6 的話,那麼查詢就得要使用 aaaa 類型才行。
NS :查詢管理領域名稱 (zone) 的伺服器主機名
如果你想要知道 www.ksu.edu.tw 的這筆記錄是由哪部 DNS 伺服器提供的,那就得要使用 NS (NameServer) 的 RR 類型標誌來查詢。不過,由於 NS 是管理整個領域的,因此,你得要查詢的目標將得輸入 domain,亦即 ksu.edu.tw 才行喔!舉例如下:
[root@www ~]# dig -t ns ksu.edu.tw ;; ANSWER SECTION: ksu.edu.tw. 1596 IN NS dns1.ksu.edu.tw. ;; ADDITIONAL SECTION: dns1.ksu.edu.tw. 577 IN A 120.114.50.1 # 除了列出 NS 是哪部伺服器之外,該伺服器的 IP 也會額外提供! |
前面提過,DNS 伺服器是很重要的,因此至少都會有兩部以上。崑山科大共有三部 DNS 伺服器,鳥哥僅列出第一部提供參考。 NS 後面會加伺服器名稱,而這個伺服器的 IP 也會額外提供才對!因此 NS 經常伴隨 A 的標誌啊!這樣你才能到 NS 去查詢資料嘛!這樣說有理解吧? ^_^
SOA :查詢管理領域名稱的伺服器管理資訊
如果你有多部 DNS 伺服器管理同一個領域名稱時,那麼最好使用 master/slave 的方式來進行管理。既然要這樣管理, 那就得要宣告被管理的 zone file 是如何進行傳輸的,此時就得要 SOA (Start Of Authority) 的標誌了。先來瞧瞧崑山科大的設定是怎樣:
[root@www ~]# dig -t soa ksu.edu.tw ;; ANSWER SECTION: ksu.edu.tw. 3600 IN SOA dns1.ksu.edu.tw. abuse.mail.ksu.edu.tw. 2010080369 1800 900 604800 86400 # 上述的輸出結果是同一行喔! |
SOA 主要是與領域有關,所以前面當然要寫 ksu.edu.tw 這個領域名。而 SOA 後面共會接七個參數,這七個參數的意義依序是:
- Master DNS 伺服器主機名稱:這個領域主要是哪部 DNS 作為 master 的意思。在本例中, dns1.ksu.edu.tw 為 ksu.edu.tw 這個領域的主要 DNS 伺服器囉;
- 管理員的 email:那麼管理員的 email 為何?發生問題可以聯絡這個管理員。要注意的是, 由於 @ 在資料庫檔案中是有特別意義的,因此這裡就將 abuse@mail.ksu.edu.tw 改寫成 abuse.mail.ksu.edu.tw ,這樣看的懂了嗎?
- 序號 (Serial):這個序號代表的是這個資料庫檔案的新舊,序號越大代表越新。 當 slave 要判斷是否主動下載新的資料庫時,就以序號是否比 slave 上的還要新來判斷,若是則下載,若不是則不下載。 所以當你修訂了資料庫內容時,記得要將這個數值放大才行! 為了方便使用者記憶,通常序號都會使用日期格式『YYYYMMDDNU』來記憶,例如崑山科大的 2010080369 序號代表 2010/08/03 當天的第 69 次更新的感覺。不過,序號不可大於 2 的 32 次方,亦即必須小於 4294967296 才行喔。
- 更新頻率 (Refresh):那麼啥時 slave 會去向 master 要求資料更新的判斷? 就是這個數值定義的。崑山科大的 DNS 設定每 1800 秒進行一次 slave 向 master 要求資料更新。那每次 slave 去更新時, 如果發現序號沒有比較大,那就不會下載資料庫檔案。
- 失敗重新嘗試時間 (Retry):如果因為某些因素,導致 slave 無法對 master 達成連線, 那麼在多久的時間內,slave 會嘗試重新連線到 master。在崑山科大的設定中,900 秒會重新嘗試一次。意思是說,每 1800 秒 slave 會主動向 master 連線,但如果該次連線沒有成功,那接下來嘗試連線的時間會變成 900 秒。若後來有成功,則又會恢復到 1800 秒才再一次連線。
- 失效時間 (Expire):如果一直失敗嘗試時間,持續連線到達這個設定值時限, 那麼 slave 將不再繼續嘗試連線,並且嘗試刪除這份下載的 zone file 資訊。崑山科大設定為 604800 秒。意思是說,當連線一直失敗,每 900 秒嘗試到達 604800 秒後,崑山科大的 slave 將不再更新,只能等待系統管理員的處理。
- 快取時間 (Minumum TTL):如果這個資料庫 zone file 中,每筆 RR 記錄都沒有寫到 TTL 快取時間的話,那麼就以這個 SOA 的設定值為主。
除了 Serial 不可以超過 2 的 32 次方之外,有沒有其它的限制啊針對這幾個數值?是有的,基本上就是這樣:
- Refresh >= Retry *2
- Refresh + Retry < Expire
- Expire >= Rrtry * 10
- Expire >= 7Days
一般來說,如果 DNS RR 資料變更情況頻繁的,那麼上述的相關數值可以訂定的小一些,如果 DNS RR 是很穩定的, 為了節省頻寬,則可以將 Refresh 設定的較大一些。
CNAME :設定某主機名稱的別名 (alias)
有時候你不想要針對某個主機名稱設定 A 的標誌,而是想透過另外一部主機名稱的 A 來規範這個新主機名稱時, 可以使用別名 (CNAME) 的設定喔!舉例來說,追蹤 www.google.com 時,你會發現這樣:
[root@www ~]# dig www.google.com ;; ANSWER SECTION: www.google.com. 557697 IN CNAME www.l.google.com. www.l.google.com. 298 IN A 72.14.203.99 |
意思是說,當你要追查 www.google.com 時,請找 www.1.google.com 那個主機,而那個主機的 A 就上面第二行的顯示了。 鳥哥常常開玩笑的說,你知道鳥哥的身份證字號嗎?你到戶政事務所去查『鳥哥』時,他會說:『沒這個人啊!因為沒有人姓鳥...』, 這個『鳥哥』就是別名 (CNAME) ,而對應到的名稱就是『蔡某某』,這個蔡某某才真的有身份字號的意思~ 一層一層去追蹤囉~
這個 CNAME 有啥好處呢?用 A 就好了吧?其實還是有好處的,舉例來說,如果你有一個 IP,這個 IP 是給很多主機名稱使用的。 那麼當你的 IP 更改時,所有的資料就得通通更新 A 標誌才行。如果你只有一個主要主機名稱設定 A,而其他的標誌使用 CNAME 時,那麼當 IP 更改,那你只要修訂一個 A 的標誌,其他的 CNAME 就跟著變動了!處理起來比較容易啊!
MX :查詢某領域名稱的郵件伺服器主機名稱
MX 是 Mail eXchanger (郵件交換) 的意思,通常你的整個領域會設定一個 MX ,代表,所有寄給這個領域的 email 應該要送到後頭的 email server 主機名上頭才是。先看看崑大的資料:
[root@www ~]# dig -t mx ksu.edu.tw ;; ANSWER SECTION: ksu.edu.tw. 3600 IN MX 8 mx01.ksu.edu.tw. ;; ADDITIONAL SECTION: mx01.ksu.edu.tw. 3600 IN A 120.114.100.28 |
上頭的意思是說,當有信件要送給 ksu.edu.tw 這個領域時,則預先將信件傳送給 mx01.ksu.edu.tw 這部郵件伺服器管理, 當然啦,這部 mx01.ksu.edu.tw 自然就是崑大自己管理的郵件伺服器才行!MX 後面接的主機名稱通常就是合法 mail server, 而想要當 MX 伺服器,就得要有 A 的標誌才行~所以上表後面就會出現 mx01.ksu.edu.tw 的 A 啊!
那麼在 mx01 之前的 8 是什麼意思?由於擔心郵件會遺失,因此較大型的企業會有多部這樣的上層郵件伺服器來預先收受信件。 那麼到底哪部郵件主機會先收下呢?就以數字較小的那部優先囉!舉例來說,如果你去查 google.com 的 MX 標誌, 就會發現他有 5 部這樣的伺服器呢!
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
講完了正解來談談反解吧!在講反解之前,先來談談正解主機名稱的追蹤方式。以 www.ksu.edu.tw. 來說,整個網域的概念來看, 越右邊出現的名稱代表網域越大!舉例來說,.(root) > tw > edu 以此類推。因此追蹤時,是由大範圍找到小範圍, 最後,我們就知道追蹤的方向如圖 19.1-4 所示那樣。
但是 IP 則不一樣啊!以崑大的 120.114.100.101 來說好了,當然是 120 > 114 > 100 > 101 ,左邊的網域最大! 與預設的 DNS 從右邊向左邊查詢不一樣啊!那怎辦?為了解決這個問題,所以反解的 zone 就必須要將 IP 反過來寫,而在結尾時加上 .in-addr.arpa. 的結尾字樣即可。所以,當你想要追蹤反解時,那麼反解的結果就會是:
[root@www ~]# dig -x 120.114.100.101 ;; ANSWER SECTION: 101.100.114.120.in-addr.arpa. 3600 IN PTR www.ksu.edu.tw. |
例如上述的結果中,我們要查詢的主機名稱竟然變成了 IP 反轉的模樣!所以才稱為反解嘛!而反解的標誌最重要的就是 PTR 了!
PTR :就是反解啊!所以是查詢 IP 所對應的主機名稱
進行反解時,要注意的就是 zone 的名稱了!要將 IP 反轉過來寫,並且結尾加上 .in-addr.arpa. 才行! 例如 120.114.100.0/24 這個 class C IP 網段的反解設定,就必須要寫成: 100.114.120.in-addr.arpa. 這樣的 zone 名稱才行。 而 PTR 後面接的自然就是主機名稱囉!
在反解最重要的地方就是:後面的主機名稱盡量使用完整 FQDN,亦即加上小數點 (.) !為什麼呢?舉 100.114.120.in-addr.arpa. 為例,如果你只是填寫主機名稱,並沒有填寫領域名稱, 那麼當人家追蹤你的主機名稱時,你的主機名稱會變成: www.100.114.120.in-addr.arpa. 的怪模樣。 這是比較需要注意的地方。
Tips: 老實說,鳥園討論區的一些有經驗的朋友一直在講,如果擔心會有誤解,主機名稱的設定則通通記得是要填寫 FQDN 就是了! 這樣絕對不會有問題! ^_^ |
![]() |
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
現在假設鳥哥的區網環境中想要設定 DNS 伺服器,鳥哥的區網原本規劃的網域名稱就是 centos.vbird,且搭配的 IP 網段為 192.168.100.0/24 這一段,因此主要的正解網域為 centos.vbird,而反解的網域則為 192.168.100.0/24, 鳥哥的這部 DNS 伺服器想要自己找尋 .(root) 而不透過 forwarders 的輔助,因此還得要 . 的領域正解檔。 綜合起來說,鳥哥需要設定到的檔案就有這幾個:
- named.conf (主要設定檔)
- named.centos.vbird (主要的 centos.vbird 的正解檔)
- named.192.168.100 (主要的 192.168.100.0/24 的反解檔)
- named.ca (由 bind 軟體提供的 . 正解檔)
如果我還想要加入其他的領域,例如 niki.vbird 可不可以啊?當然可以啊!就再多一個資料庫正解檔案即可! 還有,鳥哥上頭這個設定資料為內部私有的,所以你可以完全照著玩!並不會影響到外部的網際網路啦! 只是,網際網路也查不到你的 DNS 設定就是了~反正是練功嘛!^_^
至於資料庫的正、反解對應上,依據實際的測試環境,規劃如下 (亦請參考第三章圖 3.2-1):
作業系統與IP | 主機名稱與 RR 標誌 | 說明 |
Linux (192.168.100.254) | master.centos.vbird (NS, A) www.centos.vbird (A) linux.centos.vbird (CNAME) ftp.centos.vbird (CNAME) forum.centos.vbird (CNAME) www.centos.vbird (MX) |
DNS 設置是使用 master.centos.vbird 這個 DNS 伺服器名稱。至於這部主機的另一個主要名稱是 www.centos.vbird,其他的都是 CNAME,這樣未來比較好修改。同時給予一個 MX 的標誌給主要主機名喔 |
Linux (192.168.100.10) | slave.centos.vbird (NS, A) clientlinux.centos.vbird(A) |
未來作為 slave DNS 的接班人~ |
WinXP (192.168.1.101) | workstation.centos.vbird (A) | 一部經常用來工作的工作機 |
WinXP (192.168.100.20) | winxp.centos.vbird (A) | 一部用來測試的 Windows XP |
Win7 (192.168.100.30) | win7.centos.vbird (A) | 一部用來測試的 Windows 7 |
請特別留意啊,一個 IP 可以對應給多個主機名稱,同樣的,一個主機名稱可以給予多個 IP 喔! 主要是因為那部 www.centos.vbird 的機器未來的用途相當的多,鳥哥希望那一部主機有多個名稱,以方便未來額外的規劃啊。 所以就對該 IP 對應了四個主機名稱啊!
Tips: 在自家設的沒有經過合法授權的 DNS 最好不要以 Internet 上面已經存在的領域名稱來練習架設! 舉例來說,假設今天你以 192.168.100.254 那部機器來架設 *.yahoo.com 的領域, 因為我將 192.168.100.254 放置在第一位,導致每次的查詢其實 yahoo.com 這個領域的資料都是直接由 192.168.100.254 所提供,這很不好~因為可能會造成你的用戶端的不便~ |
![]() |
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
這個設定檔較多的 options 參數我們已經在 19.3.3 裡面談過,在我們目前的案例中, 則必須要將 forwarders 相關功能取消,並加上禁止傳輸 zone file 的參數即可。至於 zone 的設定上,必須要包含上個小節談到的三個主要的 zone 喔!因此這個檔案的任務是:
- options:規範 DNS 伺服器的使用權限 (可否查詢、forward 與否等);
- zone:設定出 zone (domain name) 以及 zone file 的所在 (包含 master/slave/hint);
- 其他:設定 DNS 本機管理介面以及其相關的金鑰檔案 (key file)。(本章稍後進階應用再談)
那就直接看一下鳥哥的範本吧:
[root@www ~]# vim /etc/named.conf options { 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; allow-transfer { none; }; // 不許別人進行 zone 轉移 }; zone "." IN { type hint; file "named.ca"; }; zone "centos.vbird" IN { // 這個 zone 的名稱 type master; // 是什麼類型 file "named.centos.vbird"; // 檔案放在哪裡 }; zone "100.168.192.in-addr.arpa" IN { type master; file "named.192.168.100"; }; |
在 options 裡面僅新增一個新的參數,就是 allow-transfer,意義為:
- allow-transfer ( none; };
是否允許來自 slave DNS 對我的整個領域資料進行傳送?這個設定值與 master/slave DNS 伺服器之間的資料庫傳送有關。除非你有 slave DNS 伺服器,否則這裡不要開放喔!因此這裡我們先設定為 none。
至於在 zone 裡面的設定值,主要則有底下幾個:
zone 內的相關參數說明 | |
設定值 | 意義 |
type | 該 zone 的類型,主要的類型有針對 . 的 hint,以及自己手動修改資料庫檔案的 master,與可自動更新資料庫的 slave。 |
file | 就是 zone file 的檔名啊!(注意 chroot 與否呦!) |
反解 zone | 主要就是 in-addr.arpa 這個玩意兒!請參考 19.4.2 的解釋 |
為何檔名都是 named 開頭呢?這只是個習慣而已,你也可以依據自己的習慣來訂定檔名的。經過上面的說明,所以我們會知道,zone file 檔名都是透過 named.conf 這個設定檔來規範的啊!
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
從 圖 19.1-4 可以知道 . 的重要性!那麼這個 . 在哪裡呢?事實上,它是由 INTERNIC 所管理維護的,全世界共有 13 部管理 . 的 DNS 伺服器呢!相關的最新設定在:
要不要下載最新的資料隨你便,因為我們的 CentOS 6.x 內的 bind 軟體已經提供了一個名為 named.ca 的檔案了,鳥哥是直接使用系統提供的資料啦。這個檔案的內容有點像這樣:
[root@www ~]# vim /var/named/named.ca . <==這裡有個小數點 518400 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4 # 上面這兩行是成對的!代表點由 A.ROOT-SERVERS.NET. 管理,並附上 IP 查詢 . <==這裡有個小數點 518400 IN NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33 M.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:dc3::35 # 上面這三行是成對的,代表 M 開頭的伺服器有 A 與 AAAA 的記錄 |
相關的正解標誌 NS, A, AAAA 意義,請回 19.4.1 去查詢,這裡不再解釋。 比較特殊的是,由於考慮 IPv6 未來的流行性,因此很多部 . 伺服器都加上 AAAA 的 IPv6 功能囉。 這個檔案的內容你不要修改啊~因為這個內容是 Internet 上面通用的資料,一般來說,也不會常常變動, 所以不需要更動他,將他放置到正確的目錄並改成你所指定的檔名即可啊!接下來可以看看其他正解檔案啦!
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
再來開始正解檔的設定吧!正解檔一定要有的 RR 標誌有底下幾個喔:
- 關於本領域的基礎設定方面:例如快取記憶時間 (TTL)、領域名稱 (ORIGIN) 等;
- 關於 master/slave 的認證方面 (SOA);
- 關於本領域的領域名稱伺服器所在主機名稱與 IP 對應 (NS, A);
- 其他正反解相關的資源記錄 (A, MX, CNAME 等)。
相關的 RR 意義請回 19.4.1 去查詢。此外,這個檔案的特殊符號也得跟大家報告一下:
字元 | 意義 |
一定從行首開始 | 所有設定資料一定要從行首開始,前面不可有空白字元。若有空白字元,代表延續前一個 domain 的意思~非常重要~ |
@ | 這個符號代表 zone 的意思!例如寫在 named.centos.vbird 中,@ 代表 centos.vbird.,如果寫在 named.192.168.100 檔案中,則 @ 代表 100.168.192.in-addr.arpa. 的意思 (參考 named.conf 內的 zone 設定) |
. | 這個點 (.) 很重要!因為他代表一個完整主機名稱 (FQDN) 而不是僅有 hostname 而已。舉例來說,在 named.centos.vbird 當中寫 www.centos.vbird 則代表 FQDN 為 www.centos.vbird.@ ==> www.centos.vbird.centos.vbird. 喔!因此當然要寫成 www.centos.vbird. 才對! |
; | 代表註解符號~似乎 # 也是註解~兩個符號都能使用 |
鳥哥打算沿用系統提供的一些設定檔,然後據以修改成為鳥哥自己需要的環境。整個 DNS 是由 master.centos.vbird 這部伺服器管理的,而管理者的 email 為 vbird@www.centos.vbird 這個。整個正解檔最終有點像這樣:
[root@www ~]# vim /var/named/named.centos.vbird # 與整個領域相關性較高的設定包括 NS, A, MX, SOA 等標誌的設定處! $TTL 600 @ IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080401 3H 15M 1W 1D ) ; 與上面是同一行 @ IN NS master.centos.vbird. ; DNS 伺服器名稱 master.centos.vbird. IN A 192.168.100.254 ; DNS 伺服器 IP @ IN MX 10 www.centos.vbird. ; 領域名稱的郵件伺服器 # 針對 192.168.100.254 這部主機的所有相關正解設定。 www.centos.vbird. IN A 192.168.100.254 linux.centos.vbird. IN CNAME www.centos.vbird. ftp.centos.vbird. IN CNAME www.centos.vbird. forum.centos.vbird. IN CNAME www.centos.vbird. # 其他幾部主機的主機名稱正解設定。 slave.centos.vbird. IN A 192.168.100.10 clientlinux.centos.vbird. IN A 192.168.100.10 workstation.centos.vbird. IN A 192.168.1.101 winxp.centos.vbird. IN A 192.168.100.20 win7 IN A 192.168.100.30 ; 這是簡化的寫法! |
再次強調,一個正解的資料庫設定中,至少應該要有 $TTL, SOA, NS (與這部 NS 主機名稱的 A), 鳥哥將這些基本要用到的標誌寫在上表的第一部份。至於其他的,則是相關的主機名稱正解設定囉。 如果這些設定值你看不懂,那麼,可以肯定的是,請回 19.4.1 去瞧瞧吧! 底下強調一下之前沒有講到的設定值項目:
關於本領域的一些設定值 | |
設定值 | 說明 |
$TTL | 為了簡化每筆 RR 記錄的設定,因此我們將 TTL 挪到最前面統一設定。因為鳥哥的 DNS 伺服器還在測試中,所以 TTL 寫了個比較小的數值,可以存在對方 DNS 伺服器的快取 600 秒而已。 |
$ORIGIN | 這個設定值可以重新指定 zone 的定義。在預設的情況下,這個正反解資料庫檔案中的 zone 是由 named.conf 所指定的,就是 zone 那個參數的功能。不過,這個 zone 是可以改的,就是用 $ORIGIN 來修訂就是了。通常這個設定值不會用到的 |
老實說,初次設定 DNS 的朋友大概都會被那個小數點 (.) 玩死~其實你不要太緊張,只要記住:『 加上了 . 表示這是個完整的主機名稱 (FQDN),亦即是 "hostname + domain name" 了, 如果沒有加上 . 的話,表示該名稱僅為 "hostname" 而已!因為我們這個設定檔的 zone 是 centos.vbird, 所以上表的最後一行,鳥哥只寫出主機名稱 (win7) ,因為沒有小數點結尾,因此完整的 FQDN 要加上 zone,所以主機名稱 win7 代表的是: win7.centos.vbird. 喔!
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
反解跟正解一樣,還都需要 TTL, SOA, NS 等等的,但是相對於正解裡面有 A,反解裡面則僅有 PTR 喔! 另外,由於反解的 zone 名稱是很怪 zz.yy.xx.in-addr.arpa. 的模樣,因此只要在反解裡面要用到主機名稱時, 務必使用 FQDN 來設定啊!更多與反解有關的資料,請到 19.4.2 去查閱喔! 至於 192.168.100.0/24 這個網域的 DNS 反解則成為:
[root@www ~]# vim /var/named/named.192.168.100 $TTL 600 @ IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080401 3H 15M 1W 1D ) @ IN NS master.centos.vbird. 254 IN PTR master.centos.vbird. ; 將原本的 A 改成 PTR 的標誌而已 254 IN PTR www.centos.vbird. ; 這些是特定的 IP 對應 10 IN PTR slave.centos.vbird. 20 IN PTR winxp.centos.vbird. 30 IN PTR win7.centos.vbird. 101 IN PTR dhcp101.centos.vbird. ; 可能針對 DHCP (第十二章) 的 IP 設定 102 IN PTR dhcp102.centos.vbird. ....(中間省略).... 200 IN PTR dhcp200.centos.vbird. |
因為我們的 zone 是 100.168.192.in-addr.arpa. 這一個,因此 IP 的全名部分已經含有 192.168.100 了, 所以在上表當中的最左邊,數值只需要存在最後一個 IP 即可。因此 254 就代表 192.168.100.254 囉! 此外,為了擔心 DHCP 自動分配的 IP 沒有對應的主機名稱,所以這裡也附掛了 192.168.100.{101~200} 的主機名稱對應喔!
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
DNS 的啟動也太簡單了吧?就直接利用系統提供的啟動 script 即可!
[root@www ~]# /etc/init.d/named start <==也可能是需要 restart 喔 [root@www ~]# chkconfig named on |
但即使畫面上出現的是『確定』或『OK』,都不見得你的 DNS 服務是正常的。所以,請你『務必』查閱 /var/log/messages 的內容才行!基本上,內容會有點像這樣:
[root@www ~]# tail -n 30 /var/log/messages | grep named
named[3511]: starting BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 -u named -t
/var/named/chroot
named[3511]: adjusted limit on open files from 1024 to 1048576
named[3511]: found 1 CPU, using 1 worker thread
named[3511]: using up to 4096 sockets
named[3511]: loading configuration from '/etc/named.conf'
named[3511]: using default UDP/IPv4 port range: [1024, 65535]
named[3511]: using default UDP/IPv6 port range: [1024, 65535]
named[3511]: listening on IPv4 interface lo, 127.0.0.1#53
named[3511]: listening on IPv4 interface eth0, 192.168.1.100#53
named[3511]: listening on IPv4 interface eth1, 192.168.100.254#53
named[3511]: command channel listening on 127.0.0.1#953
named[3511]: command channel listening on ::1#953
named[3511]: the working directory is not writable
named[3511]: zone 100.168.192.in-addr.arpa/IN: loaded serial 2011080401
named[3511]: zone centos.vbird/IN: loaded serial 2011080401
named[3511]: running
|
上面的輸出訊息中,你得要特別注意有畫底線的部分。包括 -t chroot_dir 是設定 chroot 目錄的位置, 而設定檔 (configuration) 則是 /etc/named.conf,最重要的是你的所有的 zone (hint 類型的 . 除外) 的序號 (serial) 號碼要跟你的資料庫內容一致才行!而且不能夠有出現『設定的檔名:數字』的內容, 否則肯定就是設定檔有問題~上面的訊息看起來還算 OK 啦!
在上述的輸出資料當中因為資訊太長了,所以鳥哥將登錄的時間與主機的欄位拿掉了!上面是順利啟動時的狀況, 如果出現問題怎辦?通常出現問題的原因是因為:
- 語法設定錯誤:
這個問題好解決,因為在 /var/log/messages 裡面有詳細的說明,按照內容去修訂即可;
- 邏輯設定錯誤:
這個就比較困擾了!為什麼呢?因為他主要發生在你設定 DNS 主機的時候,考慮不週所產生的問題!例如忘記加上 (.), 系統不會顯示錯誤訊息,但是卻會造成查詢的誤判,而 MX 設定的主機名稱錯誤,也不會出現有問題的訊息,但是 mail server 就是會收不到信等等~這些錯誤都需要很詳細的 DNS client 的測試才能知道問題的所在。
我們這裡先就語法設定錯誤方面進行介紹,至於邏輯設定的問題,那個就需要多多的進行測試才能知道了~ 底下的錯誤訊息都會記錄在 /var/log/messages 裡面喔!
named: /etc/named.conf:8: missing ';' before '}' # 注意到上面提到的檔名與數字嗎?說明的是 /etc/named.conf 的第 8 行, # 至於錯誤是因為缺少分號 (;) 所致!去修正一下即可。 dns_rdata_fromtext: named.centos.vbird:4: near eol: unexpected end of input zone centos.vbird/IN: loading master file named.centos.vbird: unexpected end of input _default/centos.vbird/IN: unexpected end of input # 指的是 named.centos.vbird 的第 4 行有問題,察看檔案內容第 4 行是 SOA 的項目, # 通常是 SOA 那五個數字沒有完全!趕緊去修訂一下即可啊! dns_rdata_fromtext: named.centos.vbird:7: near 'www.centos.vbird.': not a valid number # 說明第 7 行在 www.centos.vbird 附近需要有一個合法的數字!剛好是 MX , # 所以,趕緊加上一個合法的數字,去瞧瞧改改即可! |
通常最大的問題是...打錯字!所以,務必要慢慢打字,慢慢察看清楚,尤其是登錄檔內的資訊喔!都處理完畢之後, 也能夠透過 netstat 去查到 port 53 有在監聽,再來就是要放行人家的查詢了!所以,又得要修改防火牆囉! 假設你還是安裝鳥哥的防火牆腳本,那麼接下來就是:
[root@www ~]# vim /usr/local/virus/iptables/iptables.rule # 找到如下兩行,將註解拿掉即可! iptables -A INPUT -p UDP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT [root@www ~]# /usr/local/virus/iptables/iptables.rule |
![鸟哥--LINUX(DNS架设)2_linux](http://linux.vbird.org/p_w_picpaths/penguin-s.gif)
在上面的設定都搞定,並且啟動之後,你的 DNS 伺服器應該是已經妥當的在運作了。 那你怎麼知道你的設定是否合理?當然要作測試喔!測試有兩種方式,一種是藉由 client 端的查詢功能, 目的是檢驗你的資料庫設定有無錯誤;另外你也可以連上底下這個網站:
這個網站可以幫你檢驗你的 DNS 伺服器的主要設定是否有問題!不過,這個網站的檢驗主要是以合法授權的 zone 為主,我們自己亂搞的 DNS 是沒有辦法檢查的啦!真是可惜~好了,就讓我們來測試測試結果吧!首先, 得將 DNS 伺服器自己的 /etc/resolv.conf 改成如下模樣較佳:
[root@www ~]# vim /etc/resolv.conf nameserver 192.168.100.254 <==自己的 IP 一定要最早出現! nameserver 168.95.1.1 |
接下來,就讓我們針對上面較重要的正、反解資訊進行檢測吧!同樣的,鳥哥也僅列出答案的部分而已!
# 1. 檢查 master.centos.vbird 以及 www.centos.vbird 的 A 標誌 [root@www ~]# dig master.centos.vbird ;; ANSWER SECTION: master.centos.vbird. 600 IN A 192.168.100.254 [root@www ~]# dig www.centos.vbird ;; ANSWER SECTION: www.centos.vbird. 600 IN A 192.168.100.254 # 2. 檢查 ftp.centos.vbird 與 winxp 等等的 A 標誌 [root@www ~]# dig ftp.centos.vbird ;; ANSWER SECTION: ftp.centos.vbird. 600 IN CNAME www.centos.vbird. www.centos.vbird. 600 IN A 192.168.100.254 [root@www ~]# dig winxp.centos.vbird ;; ANSWER SECTION: winxp.centos.vbird. 600 IN A 192.168.100.20 # 3. 檢查 centos.vbird 這個 zone 的 MX [root@www ~]# dig -t mx centos.vbird ;; ANSWER SECTION: centos.vbird. 600 IN MX 10 www.centos.vbird. # 4. 檢查 192.168.100.254 及 192.168.100.10 的反解 [root@www ~]# dig -x 192.168.100.254 ;; ANSWER SECTION: 254.100.168.192.in-addr.arpa. 600 IN PTR www.centos.vbird. 254.100.168.192.in-addr.arpa. 600 IN PTR master.centos.vbird. [root@www ~]# dig -x 192.168.100.10 ;; ANSWER SECTION: 10.100.168.192.in-addr.arpa. 600 IN PTR slave.centos.vbird. |
測試要成功才行呦!什麼是成功呢?除了要真的有資料顯示之外,該資料是否正是你要的模樣?那才是順利成功。 如果有出現錯誤的資訊,例如找不到 www.centos.vbird 之類的,那就失敗了,得要找出問題才行。
另外,如果你的資料庫需要更新時,應該做哪些舉動啊?舉例來說,你的某個主機 IP 或者主機名稱要變更,也可能是新增某個主機名稱與 IP 的對應呢!很簡單啦,通常這樣做就好了:
- 先針對要更改的那個 zone 的資料庫檔案去做更新,就是加入 RR 的標誌即是!
- 更改該 zone file 的序號 (Serial) ,就是那個 SOA 的第三個參數 (第一個數字),因為這個數字會影響到 master/slave 的判定更新與否喔!
- 重新啟動 named ,或者是讓 named 重新讀取設定檔即可。
就這麼簡單啊!不過大家常常會忘記第二個步驟啦!就是將序號變大啊!如果序號沒有變大,那 master/slave 的資料庫可能不會主動的更新,會造成一些困擾喔!