DNS 完整知識指南

深入理解 DNS 域名系統的運作原理、記錄類型、解析流程與實務應用

目錄

  1. 什麼是 DNS
  2. DNS 記錄類型
  3. DNS 解析流程
  4. 實戰範例
  5. 最佳實踐
  6. 常見問題
  7. 總結

什麼是 DNS

DNS 基礎概念

DNS (Domain Name System) 是網際網路的「電話簿」,將人類可讀的域名(如 www.example.com)轉換為機器可讀的 IP 位址(如 192.0.2.1)。

DNS 層級結構

根域名 (Root)
頂級域名 (TLD) - .com, .org, .net, .tw
二級域名 (SLD) - example.com
子域名 (Subdomain) - www.example.com, api.example.com

DNS 伺服器類型

  • 權威 DNS 伺服器 (Authoritative DNS): 儲存實際的 DNS 記錄
  • 遞迴解析器 (Recursive Resolver): 幫助用戶查詢 DNS 記錄
  • 根伺服器 (Root Server): DNS 層級的最頂層
  • TLD 伺服器: 管理特定頂級域名

DNS 記錄類型

1. A Record (Address Record)

用途: 將域名映射到 IPv4 位址

語法:

example.com.    IN    A    192.0.2.1

實際範例:

www.google.com    →    142.250.185.46
blog.mysite.com   →    203.0.113.50

使用場景:

  • 網站主機位址
  • 指向伺服器的直接連接
  • 負載平衡器的前端 IP

限制:

  • 只支援 IPv4
  • 每次更改 IP 需要手動更新
  • TTL 過期前無法立即生效

2. AAAA Record (IPv6 Address Record)

用途: 將域名映射到 IPv6 位址

語法:

example.com.    IN    AAAA    2001:0db8:85a3:0000:0000:8a2e:0370:7334

實際範例:

www.example.com    →    2606:2800:220:1:248:1893:25c8:1946
ipv6.google.com    →    2607:f8b0:4004:c07::64

使用場景:

  • IPv6 網路環境
  • 雙棧配置 (與 A Record 同時存在)
  • 現代化網路基礎設施

3. CNAME Record (Canonical Name Record)

用途: 將一個域名指向另一個域名(別名)

語法:

www.example.com.    IN    CNAME    example.com.

實際範例:

blog.example.com        →  CNAME  →  hosting.provider.com
shop.example.com        →  CNAME  →  shopify.example.net
cdn.example.com         →  CNAME  →  d111111abcdef8.cloudfront.net
www.example.com         →  CNAME  →  example.github.io
mail.example.com        →  CNAME  →  ghs.google.com

使用場景:

  • CDN 配置 (CloudFront, Cloudflare)
  • 第三方服務整合 (GitHub Pages, Shopify)
  • 簡化多個子域名管理
  • 實現服務遷移的靈活性

重要限制: ❌ CNAME 不能與其他記錄共存

# 錯誤示例
example.com    IN    CNAME    target.com.
example.com    IN    MX       mail.example.com.  # ← 衝突!

根域名不能使用 CNAME

# 錯誤
example.com    IN    CNAME    target.com.

# 正確
www.example.com    IN    CNAME    target.com.

A Record vs CNAME 比較:

特性 A Record CNAME
指向 IP 位址 域名
根域名 ✅ 可以 ❌ 不可以
與其他記錄共存 ✅ 可以 ❌ 不可以
靈活性
DNS 查詢次數 1 次 2+ 次

4. MX Record (Mail Exchange Record)

用途: 指定處理電子郵件的伺服器

語法:

example.com.    IN    MX    10    mail1.example.com.
example.com.    IN    MX    20    mail2.example.com.

優先級數字: 數字越小優先級越高

實際範例:

# Google Workspace
example.com    MX    1     aspmx.l.google.com.
example.com    MX    5     alt1.aspmx.l.google.com.
example.com    MX    5     alt2.aspmx.l.google.com.
example.com    MX    10    alt3.aspmx.l.google.com.
example.com    MX    10    alt4.aspmx.l.google.com.

# Microsoft 365
example.com    MX    0     example-com.mail.protection.outlook.com.

使用場景:

  • 企業郵件系統 (Google Workspace, Microsoft 365)
  • 郵件伺服器冗餘備援
  • 負載平衡郵件流量

5. TXT Record (Text Record)

用途: 儲存任意文字資訊,常用於驗證和配置

語法:

example.com.    IN    TXT    "v=spf1 include:_spf.google.com ~all"

實際範例:

SPF (Sender Policy Framework) - 防止郵件偽造:

example.com    TXT    "v=spf1 ip4:192.0.2.0/24 include:_spf.google.com ~all"

DKIM (DomainKeys Identified Mail) - 郵件簽名驗證:

default._domainkey.example.com    TXT    "v=DKIM1; k=rsa; p=MIGfMA0GCS..."

DMARC (Domain-based Message Authentication) - 郵件驗證政策:

_dmarc.example.com    TXT    "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"

域名驗證:

# Google Search Console
example.com    TXT    "google-site-verification=1234567890abcdef"

# SSL 證書驗證 (Let's Encrypt)
_acme-challenge.example.com    TXT    "xxxxxxxxxxxxxxxxxxxxxxxxxxx"

使用場景:

  • 郵件安全配置 (SPF, DKIM, DMARC)
  • 域名所有權驗證
  • 服務整合驗證
  • 安全政策聲明

6. NS Record (Name Server Record)

用途: 指定負責該域名的權威 DNS 伺服器

語法:

example.com.    IN    NS    ns1.nameserver.com.
example.com.    IN    NS    ns2.nameserver.com.

實際範例:

# Cloudflare
example.com    NS    aron.ns.cloudflare.com.
example.com    NS    dana.ns.cloudflare.com.

# AWS Route 53
example.com    NS    ns-123.awsdns-12.com.
example.com    NS    ns-456.awsdns-34.net.
example.com    NS    ns-789.awsdns-56.org.
example.com    NS    ns-012.awsdns-78.co.uk.

# 子域名委派
subdomain.example.com    NS    ns1.subdomain-host.com.
subdomain.example.com    NS    ns2.subdomain-host.com.

使用場景:

  • 指定 DNS 託管服務商
  • 子域名委派給其他 DNS 伺服器
  • DNS 遷移

7. SOA Record (Start of Authority Record)

用途: 定義 DNS 區域的核心資訊

語法:

example.com.    IN    SOA    ns1.example.com. admin.example.com. (
    2024111101  ; Serial (版本號)
    7200        ; Refresh (更新間隔)
    3600        ; Retry (重試間隔)
    1209600     ; Expire (過期時間)
    86400       ; Minimum TTL
)

欄位說明:

  • Primary NS: 主要名稱伺服器
  • Admin Email: 管理員郵箱 (. 代表 @)
  • Serial: 版本號,通常使用 YYYYMMDDnn 格式
  • Refresh: 次要伺服器檢查更新的間隔
  • Retry: 更新失敗後重試的間隔
  • Expire: 次要伺服器在無法更新時保留資料的時間
  • Minimum TTL: 否定回應的快取時間

實際範例:

example.com.    IN    SOA    ns1.dns-provider.com. hostmaster.example.com. (
    2024111101  ; Serial - 今天第 1 次更新
    3600        ; Refresh - 1 小時
    900         ; Retry - 15 分鐘
    604800      ; Expire - 1 週
    86400       ; Min TTL - 1 天
)

8. PTR Record (Pointer Record)

用途: 反向 DNS 查詢,將 IP 位址映射回域名

語法:

1.2.0.192.in-addr.arpa.    IN    PTR    mail.example.com.

實際範例:

IPv4 反向查詢:

# IP: 192.0.2.1 → 域名
1.2.0.192.in-addr.arpa.    PTR    mail.example.com.

# IP: 203.0.113.50 → 域名
50.113.0.203.in-addr.arpa.    PTR    server1.example.com.

IPv6 反向查詢:

# IP: 2001:db8::1 → 域名
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.    PTR    ipv6.example.com.

使用場景:

  • 郵件伺服器驗證 (避免被標記為垃圾郵件)
  • 日誌記錄和網路診斷
  • 安全審計

設定位置: 通常由 ISP 或 IP 位址提供商配置


9. SRV Record (Service Record)

用途: 定義特定服務的位置(主機和端口)

語法:

_service._proto.name.    IN    SRV    priority weight port target.

實際範例:

XMPP (Jabber) 聊天服務:

_xmpp-client._tcp.example.com.    SRV    5 0 5222 xmpp.example.com.
_xmpp-server._tcp.example.com.    SRV    5 0 5269 xmpp.example.com.

SIP (VoIP) 服務:

_sip._tcp.example.com.    SRV    10 60 5060 sipserver1.example.com.
_sip._tcp.example.com.    SRV    10 40 5060 sipserver2.example.com.

Microsoft Active Directory:

_ldap._tcp.dc._msdcs.example.com.    SRV    0 100 389 dc1.example.com.
_kerberos._tcp.dc._msdcs.example.com.    SRV    0 100 88 dc1.example.com.

Minecraft 伺服器:

_minecraft._tcp.example.com.    SRV    0 5 25565 play.example.com.

欄位說明:

  • Priority: 優先級 (越小越優先)
  • Weight: 相同優先級下的權重 (負載平衡)
  • Port: 服務端口號
  • Target: 提供服務的主機名稱

10. CAA Record (Certification Authority Authorization)

用途: 指定允許為該域名簽發 SSL/TLS 證書的憑證機構

語法:

example.com.    IN    CAA    0 issue "ca.example.net"

實際範例:

# 允許 Let's Encrypt 簽發證書
example.com    CAA    0 issue "letsencrypt.org"

# 允許 DigiCert 簽發證書
example.com    CAA    0 issue "digicert.com"

# 禁止所有 CA 簽發證書
example.com    CAA    0 issue ";"

# 允許 Let's Encrypt 簽發萬用字元證書
example.com    CAA    0 issuewild "letsencrypt.org"

# 證書簽發問題通知郵箱
example.com    CAA    0 iodef "mailto:security@example.com"

標籤類型:

  • issue: 允許簽發一般證書
  • issuewild: 允許簽發萬用字元證書
  • iodef: 證書簽發異常通知聯絡方式

使用場景:

  • 防止未授權的證書簽發
  • 增強域名安全性
  • 符合安全合規要求

DNS 解析流程

完整的 DNS 查詢過程

用戶輸入 www.example.com
1. 檢查本機 DNS 快取
    ↓ (未找到)
2. 查詢遞迴解析器 (ISP DNS)
    ↓ (未找到)
3. 查詢根 DNS 伺服器 (.)
4. 查詢 TLD DNS 伺服器 (.com)
5. 查詢權威 DNS 伺服器 (example.com)
6. 返回 IP 位址
7. 快取結果 (根據 TTL)
用戶連接到目標伺服器

查詢類型

遞迴查詢 (Recursive Query):

  • 解析器負責完成整個查詢過程
  • 返回最終結果或錯誤

迭代查詢 (Iterative Query):

  • 每次查詢返回下一個查詢目標
  • DNS 伺服器之間的查詢方式

TTL (Time To Live)

TTL 的作用:

  • 控制 DNS 記錄的快取時間
  • 單位:秒

常見 TTL 設定:

300     # 5 分鐘 - 即將變更時使用
3600    # 1 小時 - 一般網站
86400   # 1 天 - 穩定服務

TTL 策略:

  • 遷移前: 降低 TTL (300-600 秒)
  • 穩定期: 使用較長 TTL (3600-86400 秒)
  • 動態服務: 使用較短 TTL

實戰範例

範例 1:基本網站架設

# 主域名指向網站
example.com              A        192.0.2.1
example.com              AAAA     2001:db8::1

# www 子域名
www.example.com          CNAME    example.com

# 郵件伺服器
example.com              MX       10 mail.example.com
mail.example.com         A        192.0.2.10

# 郵件安全
example.com              TXT      "v=spf1 mx ~all"

範例 2:使用 CDN (Cloudflare)

# 根域名
example.com              A        104.21.x.x
example.com              A        172.67.x.x

# www 通過 CDN
www.example.com          CNAME    example.com

# 靜態資源 CDN
cdn.example.com          CNAME    dist.cloudfront.net
static.example.com       CNAME    d111111abcdef8.cloudfront.net

範例 3:微服務架構

# API 服務
api.example.com          A        192.0.2.20
api.example.com          AAAA     2001:db8::20

# 子服務
auth.api.example.com     A        192.0.2.21
payment.api.example.com  A        192.0.2.22
user.api.example.com     A        192.0.2.23

# 負載平衡器
lb.example.com           A        192.0.2.100
api.example.com          CNAME    lb.example.com

範例 4:GitHub Pages 部署

# 自訂域名指向 GitHub Pages
www.example.com          CNAME    username.github.io

# 根域名使用 A 記錄
example.com              A        185.199.108.153
example.com              A        185.199.109.153
example.com              A        185.199.110.153
example.com              A        185.199.111.153

範例 5:企業郵件 (Google Workspace)

# MX 記錄
example.com              MX       1  aspmx.l.google.com
example.com              MX       5  alt1.aspmx.l.google.com
example.com              MX       5  alt2.aspmx.l.google.com

# SPF 記錄
example.com              TXT      "v=spf1 include:_spf.google.com ~all"

# DKIM 記錄
google._domainkey.example.com  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCS..."

# DMARC 記錄
_dmarc.example.com       TXT      "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"

最佳實踐

1. 安全性

使用 DNSSEC: 防止 DNS 劫持和欺騙

# 啟用 DNSSEC 簽名
example.com    DNSKEY    257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+KkxLbxILfDLUT0rAK9iUzy1L53eKGQ==

設定 CAA 記錄: 限制證書簽發機構

example.com    CAA    0 issue "letsencrypt.org"

配置郵件安全: SPF + DKIM + DMARC

example.com    TXT    "v=spf1 mx ~all"
_dmarc.example.com    TXT    "v=DMARC1; p=quarantine"

2. 可靠性

使用多個 NS 記錄: 至少 2-4 個名稱伺服器

example.com    NS    ns1.provider.com
example.com    NS    ns2.provider.com
example.com    NS    ns3.provider.com

設定合理的 TTL:

  • 變更前: 300-600 秒
  • 穩定期: 3600-86400 秒

配置多個 MX 記錄: 郵件備援

example.com    MX    10    mail1.example.com
example.com    MX    20    mail2.example.com

3. 效能

使用 CDN: 減少 DNS 查詢跳轉

www.example.com    CNAME    dist.example.cdn.com

優化記錄數量: 避免過多的 CNAME 鏈

# ❌ 不好的做法
a.example.com    CNAME    b.example.com
b.example.com    CNAME    c.example.com
c.example.com    CNAME    target.com

# ✅ 好的做法
a.example.com    CNAME    target.com

使用 ALIAS/ANAME 記錄 (部分 DNS 提供商支援):

# 允許根域名使用類似 CNAME 的功能
example.com    ALIAS    target.com

4. 管理

版本控制: 使用 Infrastructure as Code

# Terraform 示例
resource "aws_route53_record" "www" {
  zone_id = aws_route53_zone.primary.zone_id
  name    = "www.example.com"
  type    = "A"
  ttl     = 300
  records = ["192.0.2.1"]
}

定期審查: 清理無用記錄

文檔化: 記錄每個 DNS 記錄的用途


常見問題

問題 1:如何診斷 DNS 問題

使用命令列工具檢查 DNS

nslookup (適用於 Windows/Mac/Linux):

# 查詢 A 記錄
nslookup example.com

# 查詢特定類型記錄
nslookup -type=MX example.com
nslookup -type=TXT example.com

# 使用特定 DNS 伺服器
nslookup example.com 8.8.8.8

dig (適用於 Mac/Linux,功能更強大):

# 查詢 A 記錄
dig example.com

# 查詢特定類型
dig example.com MX
dig example.com TXT

# 查詢完整的 DNS 路徑 (+trace)
dig example.com +trace

# 簡潔輸出
dig example.com +short

# 反向查詢
dig -x 192.0.2.1

host (簡單快速):

# 基本查詢
host example.com

# 查詢特定類型
host -t MX example.com
host -t TXT example.com

問題 2:DNS 錯誤排除

❌ NXDOMAIN (域名不存在):

  • 檢查域名拼寫
  • 確認 DNS 記錄已正確新增
  • 等待 DNS 傳播 (最多 48 小時)

❌ SERVFAIL (伺服器錯誤):

  • 檢查 NS 記錄是否正確
  • 確認權威 DNS 伺服器正常運作

❌ 快取問題:

# 清除本機 DNS 快取

# Windows
ipconfig /flushdns

# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# Linux (Ubuntu/Debian)
sudo systemd-resolve --flush-caches

總結

DNS 記錄類型快速參考:

記錄類型 用途 常見場景
A 域名 → IPv4 網站、伺服器
AAAA 域名 → IPv6 IPv6 網路
CNAME 域名 → 域名 CDN、子域名、服務別名
MX 郵件伺服器 企業郵箱、郵件服務
TXT 文字資訊 SPF、DKIM、驗證
NS 名稱伺服器 DNS 託管、子域名委派
SOA 區域資訊 DNS 區域管理
PTR IP → 域名 反向查詢、郵件驗證
SRV 服務位置 VoIP、XMPP、遊戲伺服器
CAA 證書授權 SSL/TLS 安全

關鍵要點:

  1. A/AAAA 用於直接 IP 映射,CNAME 用於域名別名
  2. CNAME 不能用於根域名,也不能與其他記錄共存
  3. MX + SPF + DKIM + DMARC 組合保護郵件安全
  4. 合理設定 TTL 平衡更新速度與快取效率
  5. 使用多個 NS 記錄確保可靠性

參考資源:


建立日期:2025-10-28 最後更新:2025-11-18

🔗相關文章