经过几天的测试设置,终于将DNS上线啦。通过在网上找资料,发现N多的资料都是相互抄呀,自己也不做测试。RHEL5 DNS 测试的几点心得:
1、RHEL5中 /etc/named.conf这个文件不存在。
不过,你可以将/usr/share/doc/bind-xx/sample/var/etc中的文拷内到/etc/下。将..../var/named下的文件拷到/var/named下
这种方式有点麻烦。
2 在RHEL5中,默认不安装named.caching-xxx ,在RHEL5的光盘中有named.caching--xxx,可以通过
rpm -ivh
named.caching--xxx来安装,安装完毕之后,你会发现在/etc下多了named.caching-nameserver.conf
和named.rfc1912.zones (将以前版本的named.conf分成了两个文件)
不需要将named.caching-nameserver.conf文件改名为named.conf文件.
3 如果你使用VIEW功能,需要注意的是:zone文件必须全都在named.caching-nameserver.conf中,这一点
一定要注意,否则会走很多弯路和犯一些不必要的错误.
以下是常识及一些例子:
1、cache-dns only
編輯主要設定檔
/etc/named.conf
- 註解資料是以兩條斜線『 // 』來作設定的!
- 每個段落之後都需要以『 ; 』來做為結尾!
root@linux ~]# vi /etc/named.conf
// 雖然 CentOS 將這個檔案放置到
/var/named/chroot/etc 當中,
//
不過他很好心的幫我們作了個連結,所以你還是可以直接編輯這個檔案啦!
options {
directory
"/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
pid-file
"/var/run/named/named.pid";
forward only; //只允許 forward!
forwarders {
168.95.1.1; //我這裡使用 hinet 的 DNS
!
139.175.10.20; //這個是 seednet
的 DNS !
};
};
include "/etc/rndc.key";
forwarders
(不要忘記那個 s
喔!)就是要設定往前尋找的那個『合法』的 DNS 囉!每一個 forward 的主機之 IP 都需要有『 ; 』來做為結尾!
forward
only
這個設定可以讓您的 DNS 主機僅進行 forward 而已!是 Cache-Only
主機最常見的設定了!
特別說明:Forwarders 的好處與問題分析 (不過可以知道的是,如果上層的 DNS 速度很快的話,那麼他被設定為 forwarder
時,或許真的可以增加不少效能哩)
DNS 主機的詳細設定:
好了,經過上面的說明後,我們大概知道 DNS 的幾個小細節是這樣的:
- 主要設定檔是 /etc/named.conf;
- 每個正解、反解都需要一個檔案,而檔案的檔名是由 /etc/named.conf 所設定;
- 目前的 bind 程式已經進行 chroot 了,可以參考 /etc/sysconfig/named ;
- 當 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. 要追蹤時是由 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 |
正解資料庫檔案的設定
就如同案例設定當中提到的,我們共有兩個正解檔,分別是針對 localhost 以及 vbird.tsai 這兩個領域名稱。
在正反解的設定檔當中可以簡單的分成幾部分來觀察:
- 關於本領域的基礎設定方面:例如快取記憶時間 (TTL) 、領域名稱 (ORIGIN) 等等;
- 關於 master/slave 的認證方面 (SOA);
- 關於本領域的領域名稱伺服器所在主機名稱與 IP 對應 (NS, A, PTR);
[root@linux ~]# vi /var/named/chroot/var/named/named.localhost
; 1. 首先是主機相關的設定
$TTL 600
; 2. 關於 master/slave 的授權內容,如果沒有 slave 主機,依舊要設定喔!
@ IN SOA localhost. root.localhost. (
2006102001 ; Serial 僅作為序號而已
28800 ; Refresh slave 伺服器的更新時間 1-6个小时
14400 ; Retry 當 slave 主機更新失敗,多久再重新更新一次 20-60分钟
720000 ; Expire 重複 retry 多久後就宣告不治....不再更新 1周到1个月
86400 ) ; Minimum 可視為 TTL ,尤其是你沒有設定 $TTL 時 1-6个小时
; 3. 本領域的 DNS 伺服器的主機名稱與 IP 的對應
@ IN NS localhost. ; 特別留意最後面的那個小數點!
localhost. IN A 127.0.0.1
; 4. 其他 RR 可以加入的地方。
其他正反解相關的資源記錄 (RR)。
$TTL |
還記得圖三的流程吧?當有外部 DNS 伺服器對你的 DNS 的這個領域進行查詢時,這一筆記錄會放置在對方 DNS
伺服器內幾秒鐘的意思。 |
$ORIGIN |
這個設定值可以重新指定 zone 的定義。在預設的情況下, 這個正反解資料庫檔案中的 zone 是由 /etc/named.conf 所指定的,就是
zone 那個參數的功能。 不過,這個 zone 是可以改的,就是用 $ORIGIN
來修訂就是了。通常這個設定值不會用到的。 |
當你的某個領域名稱內的主機對應常常變動時,則這個 $TTL 應該要設定小一點, 免得你的變動總是無法被查詢到
(因為對方可能會快取住你之前舊的資料!)。而如果你的 DNS 內容已經很穩定了, 那麼這個數值可以設定大一點 (例如 86400 或三天),如此一來外部的
DNS 才不會常常對你的 DNS 要求, 而造成你的 DNS 忙碌的問題
注意的是,底下開始每一行的設定都會是這樣的:
[主機或領域名稱] [TTL] IN [RR]
[RR 內容]
@ |
這個符號代表 zone 的意思!
以上面的 named.local 來說, 這個檔案由 /etc/named.conf 定義出 zone 為 localhost. ,因此在本檔案的 @ 就代表
localhost. 囉! |
. |
這個點 (.) 很重要!因為他代表一個完整主機名稱 (FQDN) 而不是僅有 hostname 而已。舉例來說,如果你在本設定檔上面規範一個主機名稱為
www 時,那部主機的 FQDN 為 www.localhost. 如果你寫出 www.localhost 時,由於末了沒有那個小數點,則 zone
會主動加入該主機名稱, 所以最終的 FQDN 會變成 www.localhost.localhost. 喔! |
SOA |
Start of Authority 的意思。 這個標誌代表著 master/slave 相關的認證、授權資料。 不論你的 DNS 系統有沒有設定
master/slave 的架構,都需要含有這個設定才好。 SOA 後面共帶有三個參數,所以該行為:
[zone] IN SOA [主機名] [管理員 email]
([五組更新時間參數]) 每個設定項目你可以這樣看:
- 主機名:就是 master DNS 的主機名稱,通常填寫本身主機名即可。還是要注意那個小數點的存在與否喔!非常重要!
- 管理員 email:本來應該是 "root@localhost." 的,不過因為 @ 已經被作為特殊代號 (zone), 所以就用小數點來取代,因此
email 就成為 "root.localhost." 囉!
- (五組數字):這五個數字分別代表 serial, refresh, retry, expire, ttl。
至於那五個數字的意義是這樣的:
- Serial :只是一個序號,但這個序號可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序號為 100
但 slave 序號為 90 時,那麼這個 zone file 的資料就會被傳送到 slave 來更新了。
由於這個序號代表新舊資料,通常我們建議你可以利用日期來設定!舉例來說,上面的資料是鳥哥在 2006/10/20 所寫的第一次,所以鳥哥用 2006102001
作為序號代表!
- Refresh :除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 命令 slave
多久進行一次主動更新;
- Retry :如果到了 Refresh 的時間,但是 slave 卻無法連接到 master 時, 那麼在多久之後,slave
會再次的主動嘗試與主機連線;
- Expire :如果 slave 一直無法與 master 連接上,那麼經過多久的時間之後, 則命令 slave 不要再連接 master
了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理員處理完畢後, 再重新來到 slave DNS 重新啟動 bind
吧!
- Minimun :這個就有點像是 TTL 啦!
另外,這幾個數字的大小是有限制的!你必需要瞭解喔:
- Serial <= 2^32 = 4294967296
- Refresh >= Retry * 2
- Refresh + Retry < Expire
- Expire >= Retry * 10
- Expire >= 7Days
|
DNS 自己的領域之名稱解析器 |
符號與 RR |
說明 |
NS |
就是 name server 的縮寫,這個標誌的參數是:
注意喔, NS 後面接的一定是主機名稱喔!代表的意思是說:『這個 zone
的查詢請向後面這部主機要求』的意思。 所以,如果你這個 zone 有兩部以上的 DNS 伺服器負責時,那就必需要寫兩個 NS 了!而 NS
後面接的主機名稱必需要有 IP 的對應啊!因此就需要 A 這個標誌了! |
A |
是正解的符號,參數是:
意思是說該部主機的 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
這個使用者可以寫入的狀態!這很重要喔!
- /etc/hosts :剛剛上面就提過了,這個是最早的 hostname 對應 IP 的檔案;
- /etc/resolv.conf :這個重要!就是 DNS 主機的 IP;
- /etc/nsswitch.conf:這個檔案則是在『決定』先要使用 /etc/hosts 還是 /etc/resolv.conf 的設定!
DNS 的查詢指令: host, nslookup,
dig
測試 DNS 的程式有很多,我們先來使用最簡單的 host 吧!然後還有 nslookup 及 dig 哩!
host
語法:
[root@linux ~]# host [-a] [FQDN] [server]
[root@linux ~]# host -l [domain] [server]
參數說明:
-a :代表列出該主機所有的相關資訊,包括 IP、TTL 等等
-l :若後面接的那個 domain 設定允許 allow-transfer 時,則列出該 domain
所管理的所有主機名稱對應資料!
server:這個參數可有可無,當想要利用非 /etc/resolv.conf 內的 DNS 主機
來查詢主機名稱與 IP 的對應時,就可以利用這個參數了!
範例一:強制以 192.168.1.254 這部 DNS 主機來查詢
[root@linux ~]# host www.vbird.tsai 192.168.1.254
Using domain server:
Name: 192.168.1.254
Address: 192.168.1.254#53 <==這裡重要!告知這筆記錄是哪部 DNS 伺服器去找的!
Aliases:
www.vbird.tsai is an alias for linux.vbird.tsai.
linux.vbird.tsai has address 192.168.1.254
|
有注意到上面輸出的特殊字體部分嗎?很多朋友在測試自己的 DNS 時,常常會『指定到錯誤的 DNS
查詢主機』了~ 因為他們的 /etc/reslov.conf 忘記改,所以老是找不到自己設定的資料庫 IP 資料。所以你要仔細看啊!
範例二:找出我們自己這個 vbird.tsai 領域的所有主機對應
[root@linux ~]# host -l vbird.tsai 192.168.1.254
Using domain server:
Name: 192.168.1.254
Address: 192.168.1.254#53
Aliases:
vbird.tsai name server linux.vbird.tsai.
vbird.tsai name server slave.vbird.tsai.
linux.vbird.tsai has address 192.168.1.254
slave.vbird.tsai has address 192.168.1.150
....後面省略....
|
上面的資訊可就熟悉多了吧?!沒錯!那就是我們在 named.vbird.tsai
裡面的設定值啊! 不過,並不是所有的 domain 都可以作這樣的事情~舉例來說,如果我們下達:
[root@linux ~]# host -l yahoo.com
Host yahoo.com not found: 5(REFUSED)
; Transfer failed.
|
這樣的回應是因為在對方的 /etc/named.conf 裡面並沒有設定
allow-transfer 那個設定選項的原因啊! 至於 host -a 的輸出資訊與 dig 是一模一樣的,所以我們先不介紹,在 dig
處再詳細說明。
nslookup
語法:
[root@linux ~]# nslookup [FQDN] [server]
[root@linux ~]# nslookup
參數說明:
1. 可以直接在 nslookup 加上待查詢的主機名稱或者是 IP ,[server] 可有可無;
2. 如果在 nslookup 後面沒有加上任何主機名稱或 IP ,那將進入 nslookup 的查詢功能
在 nslookup 的查詢功能當中,可以輸入其他參數來進行特殊查詢,例如:
set type=any :列出所有的資訊『正解方面設定檔』
set type=mx :列出與 mx 相關的資訊!
範例一:直接搜尋 winxp.vbird.tsai 的 IP 資訊
[root@linux ~]# nslookup winxp.vbird.tsai 192.168.1.254
Server: 192.168.1.254
Address: 192.168.1.254#53 <==同樣的,請注意搜尋的 DNS IP 喔!
Name: winxp.vbird.tsai
Address: 192.168.1.100
|
nslookup 可單純的將 hostname 與 IP 對應列出而已,不過,還是會將查詢的
DNS 主機的 IP 列出來的! 如果想要知道更多詳細的參數,那可以直接進入 nslookup 這個軟體的操作畫面中,如下範例:
[root@linux ~]# nslookup <==進入 nslookup 查詢畫面
> 192.168.1.254 <==執行反解的查詢
> www.vbird.tsai <==執行正解的查詢
# 上面這兩個僅列出正反解的資訊,沒有啥了不起的地方啦!
> tw.yahoo.com <==執行非本機上的查詢
Server: 192.168.1.254
Address: 192.168.1.254#53
Non-authoritative answer:
# 注意這邊,因為不是自己的資料庫,所以是未認證過的資料(可能是快取)
tw.yahoo.com canonical name = tw.yahoo-ap1.akadns.net.
tw.yahoo-ap1.akadns.net canonical name = vip1.tw.tpe.yahoo.com.
Name: vip1.tw.tpe.yahoo.com
Address: 202.43.195.52
> set type=any <==變更查詢,不是僅有 A,全部資訊都列出來
> sun.vbird.tsai
Server: 192.168.1.254
Address: 192.168.1.254#53
Name: sun.vbird.tsai
Address: 192.168.1.200
sun.vbird.tsai text = "The sun solaris OS" <==看吧!更多資訊跑出來!
sun.vbird.tsai hinfo = "Celeron 1G" "Solaris 10"
> exit <==離開吧!皮卡丘
|
在上面的案例當中,請注意,如果您在 nslookup 的查詢畫面當中,輸入 set
type=any 或其他參數, 那麼就無法再進行反解的查詢了!這是因為 any 或者是 mx 等等的標誌都是記錄在正解 zone
當中的緣故!
dig
語法:
[root @test root]# dig [@server] [FQDN] [type]
參數說明:
@server :如果不想以 /etc/resolv.conf 來作為 DNS 主機,則可在此填入其他的 IP
type :預設是查詢 A 標誌,你可以在這裡入其他的標誌,如 mx, ns 等。
此功能亦可使用 [-t type] 來處理。
範例一:查詢 linux.vbird.tsai 吧!
[root@linux ~]# dig @192.168.1.254 linux.vbird.tsai
; <<>> DiG 9.2.4 <<>> @192.168.1.254 linux.vbird.tsai
; (1 server found)
;; global options: printcmd
;; Got answer:
;; -;>>HEADER<<- opcode: QUERY, status: NOERROR, id: 8977
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; QUESTION SECTION:
;linux.vbird.tsai. IN A
;; ANSWER SECTION:
linux.vbird.tsai. 600 IN A 192.168.1.254
;; AUTHORITY SECTION:
vbird.tsai. 600 IN NS slave.vbird.tsai.
vbird.tsai. 600 IN NS linux.vbird.tsai.
;; ADDITIONAL SECTION:
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:34:23 2006
;; MSG SIZE rcvd: 100
|
在這個範例當中,我們可以看到整個顯示出的訊息包括有幾個部分:
- HEADER(標題):顯示查詢的內容有哪些,包括一個 query, 一個 answer 及兩個驗證部分。
- QUESTION(問題):顯示所要查詢的內容,因為我們是查詢 linux.vbird.tsai 所以這裡自然就是顯示這個訊息。
- ANSWER(回應):依據剛剛的 QUESTION 去查詢所得到的結果,因為在我們的設定當中僅有設定了 A 的標籤,所以這裡自然就....
- AUTHORITY(驗證):由這裡我們可以查閱 vbird.tsai 這個領域是由 linux.vbird.tsai 及
slave.vbird.tsai 來設定的~裡面那個 600 是什麼呢?很簡單,他就是我們所設定的 ttl 那個數值啦!
範例二:查詢 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<<- opcode: QUERY, status: NOERROR, id: 3390
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;vbird.tsai. IN MX <==瞧!要求的資料不一樣了喔!
;; 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.)
user@domail 域本身应该有一条到邮件枢纽机器的MX记录,以便于发送到user@domai的邮件能被收到,如,为了能向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记录.
RHEL5:
[root@dnsggv ~]# rpm -qa
bind*
bind-libs-9.3.3-7.el5
bind-utils-9.3.3-7.el5
bind-9.3.3-7.el5
bind-chroot-9.3.3-7.el5
[root@dnsggv
~]#
在安装
caching-nameserver-9.3.3-7.el5 之前,需要将named.conf copy到/etc下
(在rhel5下,named.conf
在/etc下是不存在的,需要从/usr/share/doc/bind-9.3.3/sample/etc/named.conf
考过来,否则,你在安装caching-nameserver-9.3.3-7.el5 之后,启动DNS的时候,会报错.)
开始安装RHEL5
# rpm -ivh caching-nameserver-9.3.3-7.el5
安装好之后,会在/etc下产生一个文件named.caching-nameserver.conf)
#cp -p named.caching-nameserver.conf named.conf 会提示覆盖,选择Y,覆盖就可以啦.
#ll
[root@dnsggv etc]# ll
total 24
-rw-r--r-- 1 root root 163 Apr 27
13:38 localtime
-rw-r----- 1 root named 1100 Jan 17 2007
named.caching-nameserver.conf
-rw-r--r-- 1 root named 1100 Apr 27 16:57
named.conf
-rw-r----- 1 root named 955 Jan 17 2007
named.rfc1912.zones
-rw-r--r-- 1 root named 113 Apr 27 13:37
rndc.key
[root@dnsggv etc]# vi named.conf
//
// named.caching-nameserver.conf
//
// Provided by Red Hat
caching-nameserver package to configure the
// ISC BIND named(8) DNS server
as a caching only nameserver
// (as a localhost DNS resolver
only).
//
// See /usr/share/doc/bind*/sample/ for example named
configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind
or an editor
// to create named.conf - edits to this file will be lost
on
// caching-nameserver package upgrade.
//
options {
listen-on port 53 { 127.0.0.1; }; 改为: listen-on port 53 { any;
};
listen-on-v6 port 53 { ::1; };
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";
forwarders { 168.95.1.1; 139.175.10.20; }; // 如果域名服务器无法解析时,将请求交由168.95.1.1;
139.175.10.20来解析
allow-transfer { none; }; //指定允许接受区域传送请求的主机,说明白一点就是辅DNS定义,比如辅DNS的IP是192.168.139.5,那么可以这样定义{ 192.168.139.5;
},要不然主辅DNS不能同步,当然,{}里的也可以用下面提到的ACL。
query-source port
53;
query-source-v6 port 53;
allow-query { localhost; }; 改为 allow-query { any; };
};
logging { //指定服务器日志记录的内容和日志信息来源
channel
default_debug {
file "data/named.run";
severity dynamic;
};
};
// 这里定义一个acl列表
acl "acl1" {
192.168.139.0/200; 192.168.1.0/200
};
view localhost_resolver {
//定义一个视图
match-clients { localhost; }; 改为: match-clients { any;
}; //查询者的源地址,any表示localhost_resolver视图对任何主机开放,如果写成{ acl1;
},那么就只有acl1表里的IP可以递归查询了
match-destinations { localhost; };
改为: match-destinations { any; }; //查询者的目标地址,这里也可以写成{ localhost; acl1;
}
recursion yes; //设置进行递归查询
include
"/etc/named.rfc1912.zones"; //包含文件,这里也就是载入/etc/named.rfc1912.zones
};
~
~
~