DNS 的歷史與必要性#
早期網路使用 /etc/hosts 進行主機名稱與 IP 的對應,但隨著 Internet 爆發式成長,單一檔案無法應付。柏克萊大學因此開發了 BIND(Berkeley Internet Name Domain),建立了「分散式、階層式主機名稱管理架構」,成為現今全球最廣泛使用的 DNS 系統。
FQDN 與階層式結構#
DNS 採用樹狀目錄架構,從最上層的 .(root)開始向下分層。每個完整主機名稱(FQDN)格式為:
hostname.domain.末尾的點代表根域名。每一層 DNS 伺服器只需管理其下一層的資訊,無需知道全球所有主機。
DNS 查詢流程#
使用者查詢主機名稱時,系統進行分層遞迴查詢:
- 向根域名伺服器查詢頂級域名(如
.com)的位置 - 向頂級域名伺服器查詢次級域名的位置
- 逐層向下直到取得目標 IP
- 結果快取起來,後續查詢直接使用
授權是 DNS 的核心概念。每個上層伺服器透過 NS 記錄將管理權委託給下層。「合法」的 DNS 伺服器必須獲得上層授權才能生效。
正解與反解#
- 正解:主機名稱 → IP(使用 A 或 AAAA 記錄)
- 反解:IP → 主機名稱(使用 PTR 記錄,採反轉 IP 格式加
.in-addr.arpa.)
反解的設定權限通常在 IP 擁有者(ISP)手中。個人用戶若無整個 Class C 以上的網段,通常無法自行設定反解。
主要資源記錄類型#
| 記錄類型 | 功能 |
|---|---|
| SOA | 領域起始權威資訊、序號、更新策略 |
| NS | 指定該領域的 DNS 伺服器 |
| A | 主機名稱對應 IPv4 位址 |
| AAAA | 主機名稱對應 IPv6 位址 |
| MX | 指定領域的郵件伺服器 |
| CNAME | 主機別名 |
| PTR | IP 反解對應主機名稱 |
Master/Slave 架構#
為確保 DNS 服務的連續性:
- Master:管理員手動維護 zone file
- Slave:自動從 Master 複製資料,透過比對 SOA 序號判斷是否需要更新
修改 zone 資料後必須增加 SOA 序號,否則 Slave 無法偵測到更新。這是最常見的 DNS 設定失誤之一。
快取與 TTL#
DNS 查詢結果在各級伺服器上快取,快取時間由 TTL(Time To Live)控制。TTL 到期後記錄從快取刪除,下次查詢需重新追蹤。TTL 設定是效能與即時性的權衡。
DNS 伺服器的多種角色#
- Cache-only:僅快取查詢結果,無自有 zone 資料
- Forwarding:將查詢轉給上層 DNS 處理
- Master:管理特定 zone 的主要伺服器
- Slave:複製 Master 的資料進行備援
安全性與進階功能#
- allow-transfer:限制 zone 檔案傳輸的來源 IP,防止整個 zone 被惡意下載
- RNDC:遠端管理 DNS 伺服器,避免頻繁重啟
- 動態 DNS(DDNS):允許用戶端透過認證金鑰自動更新 hostname 對應的 IP
- View 功能:根據查詢來源 IP 提供不同的回應(例如內外網返回不同 IP)
DNS 是幾乎所有網路服務的基礎。DNS 掛了,即使其他服務都正常,使用者也會認為「網路斷了」。確保 DNS 的高可用性是首要任務。