前言
DNS(Domain Name Service)主要目地為解決 Domain Name 與 IP Address 之間相互的對應問題,在網路世界間中溝通其實就是使用 IP Address 來溝通(就像是人類使用的身份證),但一連串的數字這樣對人類來說太過於麻煩,因此便出現 Domain Name Service 服務來將 IP Address 轉換成人類可方便閱讀的 Domain Name。簡單來說就是例如: 您輸入的 Yahoo 網址 http://tw.yahoo.com 轉成 IP Address 以便連結到 Yahoo 的網頁伺服器,下列為 DNS 運作流程說明:
- 用戶端要求解析 www.abc.com.tw. 的 IP 位址。
- 指定的DNS伺服器向根網域的 DNS 伺服器詢問 www.abc.com.tw. 的 IP 位址。
- 根網域的DNS伺服器告知 .tw. 的 DNS 伺服器的 IP 位址。
- 指定的DNS伺服器向管轄 .tw. 的 DNS 伺服器詢問 www.abc.com.tw. 的 IP 位址。
- 管轄 .tw. 的 DNS 伺服器告知 com.tw. 的 DNS 伺服器的 IP 位址。
- 指定的 DNS 伺服器向管轄 com.tw.的 DNS 伺服器詢問 www.abc.com.tw. 的 IP 位址。
- 管轄 com.tw. 的 DNS 伺服器告知 abc.com.tw. 的 DNS 伺服器的 IP 位址。
- 指定的 DNS 伺服器向管轄 abc.com.tw. 的 DNS 伺服器詢問 www.abc.com.tw. 的 IP位址。
- 管轄 abc.com.tw. 的 DNS 伺服器告知 www.abc.com.tw. 的 DNS 伺服器的 IP 位址。
- 指定的 DNS 伺服器解析出 www.abc.com.tw 的 IP 位址,並傳回給用戶端。
FQDN (Fully Qualified Domain Name): 指網際網路上伺服器名稱的完全表示方式,俗稱 Domain Name。
- 每個名稱間以點 (.) 隔開 (ex. www.weithenn.org.)。
- 每個 FQDN 就像 IP Address 一樣具有 唯一 性。
- FQDN 最多只能支援到 127 層 (ex. weithenn.org >> 2 層)。
- 每個分支最長支援 63 字元(a-z,0-9,-)。
- 總長 255 字元。
名稱伺服器類型: 可分為權威主機 (Authoritative) 或快取主機 (Cache-Only)
- 權威主機 (Authoritative):能 管理 或 回應 其負責網域名稱之權威回答 (Authoritative Answer) 稱之
- Master 主機所管理的 DNS 資料是從 檔案 (Zone File) 來的
- Slave 主機所管理的 DNS 資料是從 轄區傳送 (Zone Transfer) 來的
- 快取主機 (Cache-Only): 僅 負責 查詢 與 回應 並將結果快取下來以備使用 (ex. 台灣最大快取主機 168.95.1.1)
權威主機 (Authoritative)運作原理
- 當 DNS 用戶端 (DNS Client) 端詢問到權威主機 (DNS Server) 所管理的網域名稱時,此時會直接回應給 DNS 用戶端 (此一回應動作稱為 權威回答(Authoritative Answer))。
- 當 DNS 用戶端 (DNS Client) 端詢問到 非 權威主機 (DNS Server) 所管理的網域名稱時,會檢查自身的 DNS Cache 看是不是有相關的資料,若 DNS Cache 有的話你會看到回應是 非權威回答(Non-Authoritative Answer)。
- 若在 DNS Cache 內也沒發現資料,則會向 Root 伺服器查詢 (.) 然後 Root 伺服器會回應管理該域名的授權伺服器 (.tw.)。
- 本地伺服器會向其中一台授權伺服器查詢並將這些伺服器名單存到記憶體中,以備使用 (減少再向 Root 伺服器查詢)。
- 遠方伺服器回應查詢。
- 本地伺服器回應查詢結果給 DNS 用戶端 (DNS Client),同時會將結果儲存一份在自已的快取內以便使用 (減少再向遠方伺服器查詢)。
Master / Slave: 主要與次要 DNS 伺服器
- DNS 實際運作上並沒有 主 要與 次 要 DNS 伺服器之分,也就是說並非都先訪問主要 DNS 伺服器。
- 因此若 Master DNS 掛點,則 Client 端僅有 50% 能正確解析到 Domain Name。
- 若 Master DNS 掛點超過所設定的 SOA Expiry 時間後仍未活起來則 Slave DNS 會因為超過最大 Retry Master Dns 時間而停止 Zone 解析。
- 注意 DNS Slave 主機記得禁止 Zone Transfer (allow-transfer {none;};)。
- Master DNS 記得改資料時一定要更改 Serial 值否則 Slave DNS 將不會同步新的記錄。
- 可於設定檔內加注 notify 能改善 Master / Slave 同步問題 (Bind 8.3、bind 9.x 中預設即啟動)。
正 / 反 向解析之意義與原理
正向解析 (Forward Domain): 機器名稱 (Hostname) 對應 IP Address (ex. dns.hinet.net -> 168.95.1.1)。反向解析 (Reverse Domain): IP Address 對應網域名稱 (ex. 61.219.38.89 -> www.hinet.net)
- 事實上在網際網路的 DNS 運作上反向解析的 DNS Query 遠比正解高出許多 (約 60% 為反向解析其次 40% 才為正向解析)。
- 因為至少要擁有一個 C Class 才能作反向解析,所以一般我們申請的 ADSL 或專線都要請 ISP 幫我們作反向解析的動作。
- 目前有使用正反解對應來減少 SPAM 的機制足可見 DNS 反向解析設定之重要性。
DNS 設定檔說明 (named.conf)
此設定檔為 BIND 環境主要設定檔,大致分為五個部份作說明(1) Options: 定義 named 功能選項
- directory: 指定 zone file 檔案存放路徑。
- pid-file: 指定 DNS 服務啟動時行程代號 (PID) 路徑。
- allow-transfer: 指定哪些 IP Adress 可與此部 DNS 做轄區傳送 (Zone Transfer,簡稱 AXFR)。
- options 下的 allow-transfer: 定義此部 DNS 允許哪些 IP Address 可與此部 DNS 做 AXFR (套用到管理的所有 Zone 下)。
- zone 下的 allow-transfer: 定義此 Zone 允許哪些 IP Address 可與此部 DNS 做 AXFR。
(2) Forwarders: 定義 Forwarders Server 位置
當此部 DNS 主機遇到非本機負責 Zone 之查詢請求的時候,不會直接去向 Root Server 查詢 Zone 而把請求轉交給指定的 Forwarders (一台或多台) 主機代為查詢 (另外一種 DNS 機制來減低網路流量) 例如指向國內最大 DNS Cache 主機 168.95.192.1、168.95.1.1。(3) Zone ".": 定義 Root Server 位置
- 所有 DNS 伺服器必須要知道 Root Server 位置(因為是 DNS 查詢的起源)。
- 一台 DNS 僅能有一個 hint type。
- Root Server 列表檔案 就是 named.root 檔案的內容。
(4) Zone "weithenn.org": 定義正解網域 (Forward Domain)
- type: 指定為 master / slave DNS 伺服器。
- file: 指定 zone file 存放路徑 (未指定就套用 directory 所指定的路徑)。
- allow-transfer: 指定哪些 IP Address 可與此 Zone 做轄區傳送 (Zone Transfer,簡稱 AXFR)。
(5) Zone "59.60.61.in-addr.arps": 定義反解網域 (Reverse Domain)
- type: 指定為 master / slave DNS 伺服器(你要有一個 C Class 才有意義)。
- in-addr: 為 Internet Address 縮寫用於 IPv4 反解,若是 IPv6 則為 ip6。
- apra: 為反解起源之 TLD。
設定檔注意事項及常犯錯誤
- options 此 s 別忘了加上
- 定義的功能選項前後要用 { } 括起來
- 指定的檔案或路徑前後要加 "" 號
- 每一個描述的結尾要加 ; 號
- 加入的 IP 後結尾要加 ; 號
- pid-file 指定的路徑要注意權限問題
- Zone Transfer 記得要設定否則將允許任何 IP 轄區傳送你管理的 Domain Zone File
- 若想當 Cache-Only 主機如何設定? 只要將 正、反解 設定拿掉即可 (即保留 options/root/localhost)
Zone File 說明
設定完 named.conf 後會指定該 Zone 的 Zone File 而此內容為許多的 資源記錄(RR,Resource Record) 組合而成,內容大致為 SOA、NS、A、AAAA、PTR、CNAME、MX,一筆資源記錄包含五個值 (fqdn,ttl,class,type,rdata) 下列為舉例一筆 A RR。- FQDN: Domain Name。
- TTL: 快取時間 (TTL,Time To Live),最多可設為 2 的 31 次方秒 (2147483648 秒約 68 年)。
- Class: 網路類別 (IN,Internet),Bind 8 一定要寫 IN,若為 Bind 9 可不寫。
- Type: 資料類型此例為 A RR。
- Rdata: 答案,也就是對應的 IP。
www.weithenn.org 3600 IN A 61.60.59.58
(FQDN) (TTL) (Class) (Type) (Rdata)
SOA,Start Of Authority
用於本機主機代表為權威主機,並描述此 Zone 資料及提供 DNS Slave 資料。- serial: zone file 版本(不可大於 2 的 31 次方)。
- refresh: DNS Slave 進行 Zone Transfer 時間 (會先檢查 Serial 值才決定是否進行 Zone Transfer)。
- retry: 若 DNS Slave 進行 Zone Transfer 失敗時會在指定時間重試。
- expire: 若重試 Zone Transfer 超過時間仍為成功則停止重試。
- Min TTL/Negative Cache: 依 Bind 8 或 Bind 9 意義不同。
- Minimum TTL: Bind 8 使用代表將此 TTL 套用給下面每一筆 RR TTL 值。
- Negative Cache: Bind 9 使用代表無效快取時間,即在指定時間內若有 DNS 查尋為無效記錄時則 Cache 住,當在指定 Cache 時間內再有相同的 DNS 查尋,則直接回答為無效 DNS 記錄。
NS,Name Server
用於 DNS 的搜尋與 A,Address 搭配使用。- 每個 Zone File 皆需要有 NS RR 一般放於 SOA 之後。
- 在 Twnic 設定解析該 Domain 為 DNS 模式時,此時 Zone File 內的 NS RR 要與 Twnic 設定一致 (上下層 NS 記錄要一致)。
- NS RR 的 Rdata 記錄需為 FQDN 記錄 (不可使用 IP、CNAME) 此為 RFC 規範。
- NS 記錄的取用順序是 隨機 決定的而不是照順序從第一筆至最後一筆。
- NS 記錄所指定的 IP Address 不可為 Private/Loopbak/Multi-Cast IP Address。
A,Address
將 DNS 網域名稱對應到 IPv4 的 32 位元位址,若為 AAAA 則對應到 IPv6 的 128 位元位址。PTR,Pointer
定義某個 IP Address 對應的 Domain Name,即將 IP 位址轉換成主機的 FQDN (反向解析)。- 欲進行 DNS 反解先決條件必須管理 1 Class C 才能自已進行反解設定,否則是無效的。
- 向所屬 ISP 進行反解申請 (因為大都沒有管理 1 Class C)。
- DNS Query 正向解析約佔 40%,反向解析佔 60% (可見反向解析之重要)。
CNAME,Canonical Name
同一部主機設定許多別名與 A Address 搭配使用。- 建議使用 A 記錄來取代 CNAME。
- 設定不良將造成 NS、MX 出現問題。
- CNAME Chain (即 A CNAME B、B CNAME C...) 雖然沒有禁止,但會導致效率變差甚至錯誤。