目錄
什麼是 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 安全 |
關鍵要點:
- A/AAAA 用於直接 IP 映射,CNAME 用於域名別名
- CNAME 不能用於根域名,也不能與其他記錄共存
- MX + SPF + DKIM + DMARC 組合保護郵件安全
- 合理設定 TTL 平衡更新速度與快取效率
- 使用多個 NS 記錄確保可靠性
參考資源:
建立日期:2025-10-28 最後更新:2025-11-18