## 19.4 DNS 服務器的詳細設定
好了,經過上面的說明后,我們大概知道 DNS 的幾個小細節是這樣的:
1. DNS 服務器的架設需要上層 DNS 的授權才可以成為合法的 DNS 服務器 (否則只是練功);
2. 配置文件位置:目前 bind 程序已進行 chroot,相關目錄可參考 /etc/sysconfig/named;
3. named 主要配置文件是 /etc/named.conf;
4. 每個正、反解領域都需要一個數據庫檔案,而文件名則是由 /etc/named.conf 所設定;
5. 當 DNS 查詢時,若本身沒有數據庫檔案,則前往 root (.) 或 forwarders 服務器查詢;
6. named 是否啟動成功務必要查閱 /var/log/messages 內的信息!
其中第一點很重要,因為我們尚未向上層 ISP 注冊合法的領域名,所以我們當然就沒有權利架設合法的 DNS 服務器了。 而由于擔心我們的 DNS 服務器會與外部因特網環境互相干擾,所以底下鳥哥將主要以一個 centos.vbird 的領域名來架設 DNS 服務器,如此一來咱們就可以好好的玩一玩自己局域網絡內的 DNS 啦!
* * *
### 19.4.1 正解文件記錄的數據 (Resource Record, RR)
既然 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 后面共會接七個參數,這七個參數的意義依序是:
1. Master DNS 服務器主機名:這個領域主要是哪部 DNS 作為 master 的意思。在本例中, dns1.ksu.edu.tw 為 ksu.edu.tw 這個領域的主要 DNS 服務器啰;
2. 管理員的 email:那么管理員的 email 為何?發生問題可以聯絡這個管理員。要注意的是, 由于 @ 在數據庫檔案中是有特別意義的,因此這里就將 abuse@mail.ksu.edu.tw 改寫成 abuse.mail.ksu.edu.tw ,這樣看的懂了嗎?
3. 序號 (Serial):這個序號代表的是這個數據庫檔案的新舊,序號越大代表越新。 當 slave 要判斷是否主動下載新的數據庫時,就以序號是否比 slave 上的還要新來判斷,若是則下載,若不是則不下載。 所以當你修訂了數據庫內容時,記得要將這個數值放大才行! 為了方便用戶記憶,通常序號都會使用日期格式『YYYYMMDDNU』來記憶,例如昆山科大的 2010080369 序號代表 2010/08/03 當天的第 69 次更新的感覺。不過,序號不可大于 2 的 32 次方,亦即必須小于 4294967296 才行喔。
4. 更新頻率 (Refresh):那么啥時 slave 會去向 master 要求數據更新的判斷? 就是這個數值定義的。昆山科大的 DNS 設定每 1800 秒進行一次 slave 向 master 要求數據更新。那每次 slave 去更新時, 如果發現序號沒有比較大,那就不會下載數據庫檔案。
5. 失敗重新嘗試時間 (Retry):如果因為某些因素,導致 slave 無法對 master 達成聯機, 那么在多久的時間內,slave 會嘗試重新聯機到 master。在昆山科大的設定中,900 秒會重新嘗試一次。意思是說,每 1800 秒 slave 會主動向 master 聯機,但如果該次聯機沒有成功,那接下來嘗試聯機的時間會變成 900 秒。若后來有成功,則又會恢復到 1800 秒才再一次聯機。
6. 失效時間 (Expire):如果一直失敗嘗試時間,持續聯機到達這個設定值時限, 那么 slave 將不再繼續嘗試聯機,并且嘗試刪除這份下載的 zone file 信息。昆山科大設定為 604800 秒。意思是說,當聯機一直失敗,每 900 秒嘗試到達 604800 秒后,昆山科大的 slave 將不再更新,只能等待系統管理員的處理。
7. 快取時間 (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 部這樣的服務器呢!
* * *
### 19.4.2 反解文件記錄的 RR 數據
講完了正解來談談反解吧!在講反解之前,先來談談正解主機名的追蹤方式。以 www.ksu.edu.tw. 來說,整個網域的概念來看, 越右邊出現的名稱代表網域越大!舉例來說,.(root) > tw > edu 以此類推。因此追蹤時,是由大范圍找到小范圍, 最后,我們就知道追蹤的方向如[圖 19.1-4](#fig19.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 就是了! 這樣絕對不會有問題! ^_^

* * *
### 19.4.3 步驟一:DNS 的環境規劃:正解、反解 zone 的預先定義案例說明
現在假設鳥哥的區網環境中想要設定 DNS 服務器,鳥哥的區網原本規劃的域名就是 centos.vbird,且搭配的 IP 網段為 192.168.100.0/24 這一段,因此主要的正解網域為 centos.vbird,而反解的網域則為 192.168.100.0/24, 鳥哥的這部 DNS 服務器想要自己找尋 .(root) 而不透過 forwarders 的輔助,因此還得要 . 的領域正解檔。 綜合起來說,鳥哥需要設定到的檔案就有這幾個:
1. named.conf (主要配置文件)
2. named.centos.vbird (主要的 centos.vbird 的正解檔)
3. named.192.168.100 (主要的 192.168.100.0/24 的反解檔)
4. named.ca (由 bind 軟件提供的 . 正解檔)
如果我還想要加入其他的領域,例如 niki.vbird 可不可以啊?當然可以啊!就再多一個數據庫正解檔案即可! 還有,鳥哥上頭這個設定資料為內部私有的,所以你可以完全照著玩!并不會影響到外部的因特網啦! 只是,因特網也查不到你的 DNS 設定就是了~反正是練功嘛!^_^
至于數據庫的正、反解對應上,依據實際的測試環境,規劃如下 (亦請參考第三章[圖 3.2-1](http://linux.vbird.org/linux_server/0120intranet.php#fig3.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 所提供,這很不好~因為可能會造成你的客戶端的不便~

* * *
### 19.4.4 步驟二:主配置文件 /etc/named.conf 的設置
這個配置文件較多的 options 參數我們已經在 [19.3.3](#named.conf_1) 里面談過,在我們目前的案例中, 則必須要將 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](#DNS_master_rr_re) 的解釋 |
為何檔名都是 named 開頭呢?這只是個習慣而已,你也可以依據自己的習慣來訂定檔名的。經過上面的說明,所以我們會知道,zone file 檔名都是透過 named.conf 這個配置文件來規范的啊!
* * *
### 19.4.5 步驟三:最上層 . (root) 數據庫檔案的設定
從 [圖 19.1-4](#fig19.1-4) 可以知道 . 的重要性!那么這個 . 在哪里呢?事實上,它是由 INTERNIC 所管理維護的,全世界共有 13 部管理 . 的 DNS 服務器呢!相關的最新設定在:
* [ftp://rs.internic.net/domain/named.root](ftp://rs.internic.net/domain/named.root)
要不要下載最新的資料隨你便,因為我們的 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](#DNS_master_rr) 去查詢,這里不再解釋。 比較特殊的是,由于考慮 IPv6 未來的流行性,因此很多部 . 服務器都加上 AAAA 的 IPv6 功能啰。 這個檔案的內容你不要修改啊~因為這個內容是 Internet 上面通用的數據,一般來說,也不會常常變動, 所以不需要更動他,將他放置到正確的目錄并改成你所指定的檔名即可啊!接下來可以看看其他正解檔案啦!
* * *
### 19.4.6 步驟四:正解數據庫檔案的設定
再來開始正解檔的設定吧!正解文件一定要有的 RR 標志有底下幾個喔:
* 關于本領域的基礎設定方面:例如快取記憶時間 (TTL)、領域名 (ORIGIN) 等;
* 關于 master/slave 的認證方面 (SOA);
* 關于本領域的領域名服務器所在主機名與 IP 對應 (NS, A);
* 其他正反解相關的資源記錄 (A, MX, CNAME 等)。
相關的 RR 意義請回 [19.4.1](#DNS_master_rr) 去查詢。此外,這個檔案的特殊符號也得跟大家報告一下:
| 字符 | 意義 |
| --- | --- |
| 一定從行首開始 | 所有設定數據一定要從行首開始,前面不可有空格符。若有空格符,代表延續前一個 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 <u>SOA master.centos.vbird. vbird.www.centos.vbird. (</u>
<u>2011080401 3H 15M 1W 1D )</u> ; 與上面是同一行
@ IN <u>NS master.centos.vbird.</u> ; DNS 服務器名稱
master.centos.vbird. IN <u>A 192.168.100.254</u> ; DNS 服務器 IP
@ IN <u>MX 10 www.centos.vbird.</u> ; 領域名的郵件服務器
# 針對 192.168.100.254 這部主機的所有相關正解設定。
www.centos.vbird. IN <u>A 192.168.100.254</u>
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
<u>win7 IN A 192.168.100.30</u> ; 這是簡化的寫法!
```
再次強調,一個正解的數據庫設定中,至少應該要有 $TTL, SOA, NS (與這部 NS 主機名的 A), 鳥哥將這些基本要用到的標志寫在上表的第一部份。至于其他的,則是相關的主機名正解設定啰。 如果這些設定值你看不懂,那么,可以肯定的是,請回 [19.4.1](#DNS_master_rr) 去瞧瞧吧! 底下強調一下之前沒有講到的設定值項目:
| 關于本領域的一些設定值 |
| --- | --- |
| 設定值 | 說明 |
| $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. 喔!
* * *
### 19.4.7 步驟五:反解數據庫檔案的設定
反解跟正解一樣,還都需要 TTL, SOA, NS 等等的,但是相對于正解里面有 A,反解里面則僅有 PTR 喔! 另外,由于反解的 zone 名稱是很怪 zz.yy.xx.in-addr.arpa. 的模樣,因此只要在反解里面要用到主機名時, 務必使用 FQDN 來設定啊!更多與反解有關的資料,請到 [19.4.2](#DNS_master_rr_re) 去查閱喔! 至于 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} 的主機名對應喔!
* * *
### 19.4.8 步驟六:DNS 的啟動、觀察與防火墻
DNS 的啟動也太簡單了吧?就直接利用系統提供的啟動 script 即可!
```
[root@www ~]# /etc/init.d/named restart <==也可能是需要 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
```
* * *
### 19.4.9 步驟七:測試與數據庫更新
在上面的設定都搞定,并且啟動之后,你的 DNS 服務器應該是已經妥當的在運作了。 那你怎么知道你的設定是否合理?當然要作測試喔!測試有兩種方式,一種是藉由 client 端的查詢功能, 目的是檢驗你的數據庫設定有無錯誤;另外你也可以連上底下這個網站:
* [http://thednsreport.com/](http://thednsreport.com/)
這個網站可以幫你檢驗你的 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 的對應呢!很簡單啦,通常這樣做就好了:
1. 先針對要更改的那個 zone 的數據庫檔案去做更新,就是加入 RR 的標志即是!
2. 更改該 zone file 的序號 (Serial) ,就是那個 SOA 的第三個參數 (第一個數字),因為這個數字會影響到 master/slave 的判定更新與否喔!
3. 重新啟動 named ,或者是讓 named 重新讀取配置文件即可。
就這么簡單啊!不過大家常常會忘記第二個步驟啦!就是將序號變大啊!如果序號沒有變大,那 master/slave 的數據庫可能不會主動的更新,會造成一些困擾喔!
* * *
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀