forwarders (不要忘記那個 s 喔!)就是要設定往前尋找的那個『合法』的 DNS 囉!每一個 forward 的主機之 IP 都需要有『 ; 』來做為結尾!
forward only 這個設定可以讓您的 DNS 主機僅進行 forward 而已!是 Cache-Only 主機最常見的設定了!
特別說明:Forwarders 的好處與問題分析 (不過可以知道的是,如果上層的 DNS 速度很快的話,那麼他被設定為 forwarder 時,或許真的可以增加不少效能哩) DNS 主機的詳細設定:
當 DNS 查詢時,若本身沒有資料庫,則前往 root (.) 或 forwarders 主機查詢;
DNS 伺服器的架設需要上層 DNS 的授權才可以成為合法的 DNS 伺服器。
named 是否啟動成功務必要查閱 /var/log/messages 內的資訊! 一個簡單的案例說明:
named.conf :設定檔
named.vbird.tsai :vbird.tsai 的正解
named.192.168.1 :192.168.1.0/24 的反解
named.root :root (.) 的資料庫
named.localhost :localhost 的正解
named.127.0.0 :127.0.0.1/24 的反解 如果我還想要加入其他的領域,例如 niki.tsai 可不可以啊?當然可以啊!就再多一個資料庫正解檔案即可! 還有,鳥哥上頭這個設定資料為內部私有的,所以你可以完全照著玩!並不會影響到外部的網際網路啦!
作業系統與 IP
對應之主機名稱
說明
OS: Linux
IP: 192.168.1.254
linux.vbird.tsai
www.vbird.tsai
ftp.vbird.tsai
forum.vbird.tsai
這部是主要的 DNS 伺服器,主要主機名稱為 linux.vbird.tsai ,其他的三部主機名稱為主機別名。
OS: Linux
IP: 192.168.1.150
slave.vbird.tsai
主要作為 slave DNS 主機, 相關的 slave 設定將在下個小節才會介紹的啦!
OS: Windows XP
IP: 192.168.1.100
winxp.vbird.tsai
某一部主機的 IP 與主機名稱對應
OS: Sun
IP: 192.168.1.200
sun.vbird.tsai
某一部主機,用來玩的而已!
etc/named.conf 設定檔
這個設定檔是整個 Linux 上 DNS 的核心啦!他最主要就是在:
規範 DNS 伺服器的使用權限 (可否查詢、forward 與否、master/slave 架構等);
設定出 zone (domain name) 以及 zone file 的所在;
設定 DNS 本機管理介面以及其相關的金鑰檔案 (key file)。
基本上,這個檔案的內容主要就是分為上頭的三大部分啦!至於設定方面你要注意的有:
在整體伺服器的環境與使用權限方面,主要是透過 options {....} 這個設定來處理的;
還是要注意,在 named.conf 當中註解使用 // ,而每一個設定項目最後需要分號 (;)
allow-query
是否允許用戶端的查詢。查詢的重點就是讀取資料庫的內容, 既然要架設 DNS ,當然要允許用戶端的查詢啦。內容可以填寫任何來源 (any) 或 IP 或網域 (IP/netmask) 的格式。
allow-transfer
是否允許 slave DNS 的整個領域資料的傳送?這個設定值與 master/slave DNS 伺服器之間的資料庫傳送有關。除非你有 slave DNS 伺服器,否則這裡不要開放喔!
type
該 zone 的類型,主要的類型有: master, slave 及 hint。 其中需要注意最上層的 DNS (.) 使用的是 hint 的類型,然後 master 主機用 master 啊! slave 主機就用 slave ㄇㄟ!
file
就是 zone file 啦!那麼完整的 zone file 在哪裡啊?在這裡:
[chroot_dir]/[options 內的 directory]/[file 設定值]
所以說,root (.) 設定檔就在:
/var/named/chroot/var/named/named.root
反解 zone
正解的 zone 很好理解,反解的 zone 怎麼那麼奇怪啊?就如同 linux.vbird.org 要追蹤時是由 org -> vbird -> linux 一樣,至於反解則例如 192.168.1.1: 192 -> 168 -> 1 -> 1。 由於 DNS 的領域名稱都是由後往前找,且反解是個特殊的領域,所以必需要 將 IP 反過來寫,同時在最後面加上『 .in-addr.arpa 』來表示反解宣告!所以 192.168.1 這個 zone 就得要寫成 1.168.192.in-addr.arpa 正解資料庫檔案的設定
DNS 自己的領域之名稱解析器
符號與 RR
說明 NS
就是 name server 的縮寫,這個標誌的參數是:
[zone] IN NS [主機名稱]
注意喔, NS 後面接的一定是主機名稱喔!代表的意思是說:『這個 zone 的查詢請向後面這部主機要求』的意思。 所以,如果你這個 zone 有兩部以上的 DNS 伺服器負責時,那就必需要寫兩個 NS 了!而 NS 後面接的主機名稱必需要有 IP 的對應啊!因此就需要 A 這個標誌了! A
是正解的符號,參數是:
[hostname] IN A [IP]
意思是說該部主機的 IP 對應之意!也是最常用的一個標誌了!
root@linux ~]# vi /var/named/chroot/var/named/named.vbird.tsai
$TTL 600
@ IN SOA linux.vbird.tsai. root.linux ( 2006102001 28800 14400 720000 86400 )
; 本領域的 DNS 伺服器的主機名稱與 IP 的對應
@ IN NS linux.vbird.tsai.
@ IN NS slave.vbird.tsai.
linux IN A 192.168.1.254
slave IN A 192.168.1.150
@ IN MX 10 linux
; 其他 RR 可以加入的地方
www IN CNAME linux
ftp IN CNAME linux
forum IN CNAME linux
winxp IN A 192.168.1.100
sun IN A 192.168.1.200
sun IN TXT "The sun solaris OS"
sun IN HINFO "Celeron 1G""Solaris 10"
符號與 RR
說明 MX
就是 Mail eXchanger(MX) 的簡寫,他的參數是這樣寫的:
[hostname] IN MX [順序] [主機名稱]
注意囉,這個 MX 與 mail server 有關,沒有 mail server 的朋友可以省略這個標誌,但是如果你的領域內有 mail server 時,就必需要設定這個 MX 才好。MX 的用途是在於『郵件轉遞』或者是經由上層郵件主機備份的一個機制, 後面設定的那個主機名稱通常是你的上游郵件主機,相關的意義我們會在 mail server 章節再跟大家詳談。 另外, MX 後面接的數值是越小越優先,而接的主機名稱必需要具有 A 的標誌才可以!
如果你不知道如何設定,通常建議你直接設定成你的 mail server 主機名稱即可 CNAME
顧名思義,這個標誌在建立『主機別名』的啦!參數為:
[hostname] IN CNAME [主機名稱]
注意一下, CNAME 後面接的是主機名稱喔。因為有好幾部主機名稱都對應到同一個 IP 上頭, 你當然可以針對每個主機名稱給予一個 A ,不過如果未來要改 IP 時,你就得改好幾個啦! 此時改為 CNAME 來處理就很簡單。如上表所示,如果我想要知道 ftp.vbird.tsai 的 IP 時, DNS 會先告知 ftp.vbird.tsai 屬於 linux.vbird.tsai 的 CNAME ,然後再透過 linux.vbird.tsai 來得到正確的 IP。
Master/Slave 架構的詳細設定
談完了 Master DNS 伺服器之後,接下來讓我們來瞭解一下 slave DNS 伺服器的架設方式吧! 在架設之前,你應該要曉得為何需要 slave DNS 呢?
為了不間斷的提供 DNS 服務,你的領域至少需要有兩部 DNS 伺服器來提供查詢的功能;
承上,這幾部 DNS 伺服器應該要分散在兩個以上的不同 IP 網域才好;
為方便管理,通常除了一部主要 Master DNS 之外,其他的 DNS 會使用 slave 的模式;
slave DNS 伺服器本身並沒有資料庫,他的資料庫是由 master DNS 所提供的;
master/slave DNS 必需要可以相互傳輸 zone file 的相關資訊才行,這部份需要 /etc/named.conf 之設定輔助。
好了,那麼讓我們繼續上一個案例的延續吧!前一小節是在 192.168.1.254 那部 master DNS 上面設定的, 底下的設定大部分都是在 192.168.1.150 那部 slave DNS 主機上設定的喔!假設我這部 slave.vbird.tsai 僅需要取得 vbird.tsai 以及 192.168.1 這兩個領域,其他的例如 named.root, named.localhost 及 named.127.0.0 都需要自理喔! master DNS 權限的開放
我們在 /etc/named.conf
設定檔當中的參數項目曾經設定過 allow-transfer ,並且設定所有人均不得使用 zone 的傳送 (transfer)。但是我們的 master DNS 必須要讓 slave DNS 可以進行 zone 的傳送啊,因此你必須要針對 vbird.tsai 及 192.168.1 這兩個 zone 來啟用 allow-transfer 的設定項目才行。整個過程很簡單:
[root@linux ~]# vi /etc/named.conf
....前面省略....
zone "vbird.tsai" {
type master;
file "named.vbird.tsai";
allow-transfer { 192.168.1.150; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "named.192.168.1";
allow-transfer { 192.168.1.150; };
};
....後面省略....
除此之外,在上頭所列示的那兩個資料庫檔案當中,你必須要填入所需要的 NS 標誌才行! 這部份我們已經在 前一小節
提過了,請你自行參考喔! 設定完畢後請重新啟動 named 啦! slave DNS 的設定
基本上, slave DNS 的 /etc/named.conf 與 master DNS 幾乎一模一樣啊! 唯一的差異在於兩個 zone 的類型 (type) 而已。設定方式唯一的差異在這裡:
[root@slave ~]# vi /etc/named.conf
....前面省略....
zone "vbird.tsai" {
type slave;
file "named.vbird.tsai";
masters { 192.168.1.254; };
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "named.192.168.1";
masters { 192.168.1.254; };
};
....後面省略....
你得要特別留意類型是 slave 之外,那個主機來源 (masters) 是有加 "s" 喔! 這點很容易忘記啊!至於資料庫檔案裡面,必須要存在的有:
named.root
named.localhost
named.127.0.0
在 slave DNS 當中,這三個 zone 的類型分別是 hint 與 master ,所以當然要預設存在, 至於那個 named.vbird.tsai 及 named.192.168.1 就不要存在啦! 因為這兩個 zone file 是由 master DNS 主機傳送過來的!只是你要注意 /var/named/chroot/var/named 這個目錄的權限必須要是 named 這個使用者可以寫入的狀態!這很重要喔!
範例二:查詢 vbird.tsai 這個領域的 MX 吧!
[root@linux ~]# dig @192.168.1.254 vbird.tsai mx
; > DiG 9.2.4 > @192.168.1.254 vbird.tsai mx
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER
;; ANSWER SECTION:
vbird.tsai. 600 IN MX 10 linux.vbird.tsai.
;; AUTHORITY SECTION:
vbird.tsai. 600 IN NS slave.vbird.tsai.
vbird.tsai. 600 IN NS linux.vbird.tsai.
;; ADDITIONAL SECTION:
linux.vbird.tsai. 600 IN A 192.168.1.254
slave.vbird.tsai. 600 IN A 192.168.1.150
;; Query time: 4 msec
;; SERVER: 192.168.1.254#53(192.168.1.254)
;; WHEN: Thu Oct 19 15:45:58 2006
;; MSG SIZE rcvd: 116
由於 dig 的輸出資訊實在是太豐富了,又分成多個部分去進行回報,因此很適合作為 DNS 追蹤回報的一個指令呢! 你可以透過這個指令來瞭解一下你所設定的 DNS 資料庫是否正確,並進行除錯喔! ^_^ DNS 伺服器的進階設定: 子網域授權問題
好了,那麼萬一我的網路很大,我只想要負責上層的 DNS 而已, 下層希望直接交給各單位的負責人來負責,要怎麼設定呢? 舉個例子來說,以成大為例,成大計中僅管理各個系所的的主機 IP 而已,由於各個系所的主機數量可能很大,如果每個人都要請計中來設定, 那麼管理員可能會瘋掉,而且在實際設計上也不太人性化。
所以囉,計中就將各個 subdomain (子網域) 的管理權交給各個系所的主機管理員去管理,如此一來, 各系所的設定上面會比較靈活,且上層 DNS 主機也不用太麻煩吶!
好了,那麼如何開放子網域授權呢?我們以剛剛在 master 上面建立的 vbird.tsai 這個 zone 為例, 假設今天你是個 ISP ,有個人想要跟妳申請 domain name ,他要的 domain 是『 niki.vbird.tsai 』, 那你該如何處理?其實只要指定 NS 就好了啦!如下所示:
上層主機端 vbird.tsai 的設定:
上層 DNS 主機的設定其實很簡單啦!只要將子網域開放出來給別人使用就對了! 怎麼設定呢?您可以直接修改前面談到的 named.vbird.tsai
,使他變成如下所示:
[root@linux ~]# vi /var/named/chroot/var/named/named.vbird.tsai
# 在這個檔案的最下方增加這兩行:
niki IN NS niki.vbird.tsai.
niki IN A 192.168.100.100
直接將 niki.vbird.tsai. 這個網域的 NS 權限 (name server) 轉給 niki.vbird.tsai. 這部主機來管理,並同時列出 niki.vbird.tsai 的正解資訊! 那麼未來當有人要查詢類似 www.niki.vbird.tsai 時,我們的 linux.vbird.tsai. 會直接將查詢的權限丟給 niki.vbird.tsai 去處理喔!
下游主機 niki.vbird.tsai 的設定:
這個設定就簡單啦!直接參考一下我們 上面寫的資料
,跟著設定,但是您的 domain name 變成 niki.vbird.tsai 就是了!簡單的很吶!所以鳥哥就不再多說了~ 利用 RNDC 指令管理 DNS 伺服器
不知道您會不會覺得很奇怪,那就是為啥啟動 DNS 後,在 /var/log/messages 老是看到這一句話:
command channel listening on 127.0.0.1#953
而且在本機端的 TCP port 953 還多了個 named 所啟動的服務,那是啥?那就是所謂的 rndc 了。這個 rndc 是 BIND version 9 以後所提供的功能啦,他可以讓你很輕鬆的管理你自己的 DNS 伺服器喔! 包括可以檢查已經存在 DNS 快取當中的資料、重新更新某個 zone 而不需要重新啟動整個 DNS , 以及檢查 DNS 的狀態與統計資料等等的,挺有趣的!
ttl字段以秒为单位指定数据项可被缓存并且仍被认为有效的时间长度。除了在根服务器的线索文件中之外,该字段经常被省略。它默认取该区的数据文件开头的$TTL指令设置的值。
ttl将存活时间参数的值增加到大约一周将明显减少网络流量和DNS负载。不过,一旦记录已经缓存在本地网络之外,您就无法迫使它们被丢谖。如果您准备大规模地得机关报对网络编号,可以降低$TTL的值,以使缓存在INTERNET上别处的老记录讯速过期。
一个区的SOA记录应该在最前面。但是这个要求现在也放宽了,NS记录通常紧跟在SOA后面。
它们取自于cs.colorado.edu的数据文件,默任的域都是"cs.colorado.edu.",所以anchor所指的主机实际上代表"anchor.cs.colorado.eud."
@ 当前区名的简写,本例中可以用"cs.colorado.eud."来代替.
@ IN SOA ns.cs.colorado.edu. hostmaster.cs.colorado.edu.
ns.cs.colorado.edu.是该区的主名字服务器
实例:
@ IN SOA ns.cs.colorado.edu. hostmaster.cs.colorado.eud.(
2009043000;
7200; refresh (2 hours 1-6个小时)
1800; retry (30 minutes 20-60分钟)
604800; expire (1 week) 1周到1个月)
7200; Minimum (1-6个小时)
);
NS记录:
zone [ttl] IN NS hostname
cs.colorado.edu. IN NS ns.cs.colorado.edu.
cs.colorado.edu. IN NS anchor.cs.colorado.eud.
cs.colorado.edu. IN NS ns.cs.utah.edu.
也可以这样:
IN NS ns.cs.colorado.edu.
IN NS anchor.cs.colorado.edu.
IN NS ns.cs.utah.edu.
A记录: A记录是DNS数据库的核心,它们提供了以前在/etc/hosts文件中指定的主机名到IP地址的映射,一个主机必须为它的每个接网络接口得到一条A记录.
anchor IN A 123.128.81.90
PRT记录:格式:
90 IN PRT anchor.cs.colorado.edu. (90相对于81.128.123.in-addr.apra.)
MX记录:
xterm1 IN MX 10 mailhub
IN MX 20 anchor
IN MX 50 boulder.colorado.edu. (注意coulder的域名必须是完整的,因为它不是默任域的成员(这是是cs.colorado.edu.)
[email=user@domail]user@domail[/email]
域本身应该有一条到邮件枢纽机器的MX记录,以便于发送到
[email=user@domai]user@domai[/email]
的邮件能被收到,如,为了能向 evi@cs.colorado.edu
发送邮件,我们需要一台名为cs的机器,或在cs.colorado.edu的MX记录,或可能两者都要.
cs IN MX 10 mailhub.cs.colorado.edu.
IN MX 20 anchor.cs.colorado.edu.
IN MX 50 boulder.colorado.edu.
CNAME记录: ftp IN CNAME anchor kb IN CNAME kibblesnbits
通常您可以给主机的真实名字及其昵称都用A记录,从而彻底避免用CNAME记录.