DNS 的歷史與必要性#

早期網路使用 /etc/hosts 進行主機名稱與 IP 的對應,但隨著 Internet 爆發式成長,單一檔案無法應付。柏克萊大學因此開發了 BIND(Berkeley Internet Name Domain),建立了「分散式、階層式主機名稱管理架構」,成為現今全球最廣泛使用的 DNS 系統。

FQDN 與階層式結構#

DNS 採用樹狀目錄架構,從最上層的 .(root)開始向下分層。每個完整主機名稱(FQDN)格式為:

hostname.domain.

末尾的點代表根域名。每一層 DNS 伺服器只需管理其下一層的資訊,無需知道全球所有主機。

DNS 查詢流程#

使用者查詢主機名稱時,系統進行分層遞迴查詢

  1. 向根域名伺服器查詢頂級域名(如 .com)的位置
  2. 向頂級域名伺服器查詢次級域名的位置
  3. 逐層向下直到取得目標 IP
  4. 結果快取起來,後續查詢直接使用

授權是 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主機別名
PTRIP 反解對應主機名稱

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 的高可用性是首要任務。