1. 程式人生 > >鳥哥的Linux私房菜(伺服器)- 第十九章、主機名控制者: DNS 伺服器

鳥哥的Linux私房菜(伺服器)- 第十九章、主機名控制者: DNS 伺服器

既然 DNS 最早之前的目的就是要從主機名去找到 IP,所以就讓我們先從正解 zone 來談起吧。既然要談正解, 那麼就應該要了解正解檔案記錄的資訊有哪些吧?在這個小節裡面,我們就先來談談正解 zone 常常記錄的資料有哪些吧。

  • 正解檔案資源記錄 (resource record, RR) 格式

我們從前面幾個小節的 dig 指令輸出結果中,可以發現到一個有趣的咚咚,那就是輸出的資料格式似乎是固定的! 舉例來說,查詢 www.ksu.edu.tw 的 IP 時,輸出的結果為:

[[email protected] ~]# 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 的話,就是這樣查:

[[email protected] ~]# 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 才行喔!舉例如下:

[[email protected] ~]# 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) 的標誌了。先來瞧瞧崑山科大的設定是怎樣:

[[email protected] ~]# 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 為何?發生問題可以聯絡這個管理員。要注意的是, 由於 @ 在資料庫檔案中是有特別意義的,因此這裡就將 [email protected] 改寫成 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 時,你會發現這樣:

[[email protected] ~]# 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 主機名上頭才是。先看看昆大的資料:

[[email protected] ~]# 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 部這樣的伺服器呢!