DNS 與網域名稱系統
什麼是 DNS?
DNS(Domain Name System)負責把人類看得懂的網域名稱轉換成電腦看得懂的 IP 位址。
💡 比喻:電話簿 你記得朋友的名字「小明」,但打電話需要號碼 0912-345-678。 DNS 就像一本超大的電話簿:
- 你說:「我要找 google.com」
- DNS 回答:「他的號碼是 142.250.185.78」
- 瀏覽器就用這個 IP 去連線
DNS 解析流程
你的瀏覽器輸入 www.example.com
|
↓
1. 瀏覽器快取 → 之前查過嗎?查過就直接用
|(沒有)
↓
2. 作業系統快取 → OS 記得嗎?
|(沒有)
↓
3. DNS Resolver(ISP 提供)→ 幫你去問
|
↓
4. Root DNS → 「.com 要去問 .com 的 DNS」
|
↓
5. TLD DNS(.com)→ 「example.com 在這個 NS」
|
↓
6. Authoritative DNS → 「www.example.com = 93.184.216.34」
|
↓
瀏覽器拿到 IP,開始連線!
DNS 記錄類型
常見記錄一覽
記錄類型 用途 範例
──────────────────────────────────────────────────────
A 網域 → IPv4 位址 example.com → 93.184.216.34
AAAA 網域 → IPv6 位址 example.com → 2606:2800:220:1::
CNAME 網域別名(指向另一個網域) www.example.com → example.com
MX 郵件伺服器 example.com → mail.example.com
TXT 文字記錄(驗證用) 用於 SPF、DKIM、網域驗證
NS 指定 DNS 伺服器 example.com → ns1.provider.com
實際設定範例
; 這是 DNS Zone 設定檔範例
; A 記錄:把網域指向伺服器 IP
example.com. A 93.184.216.34
; CNAME:www 子網域指向主網域
www.example.com. CNAME example.com.
; MX:郵件伺服器設定(數字越小優先級越高)
example.com. MX 10 mail.example.com.
; TXT:SPF 記錄,指定哪些伺服器可以寄信
example.com. TXT "v=spf1 include:_spf.google.com ~all"
; NS:指定管理此網域的 DNS 伺服器
example.com. NS ns1.cloudflare.com.
DNS 傳播與 TTL
TTL(Time To Live)
TTL = 快取保留時間(秒)
TTL=300 → 快取 5 分鐘(變更後 5 分鐘生效)
TTL=3600 → 快取 1 小時
TTL=86400 → 快取 1 天
建議:
├── 平常用較長 TTL(3600+)→ 減少查詢次數,加快速度
└── 要改 DNS 時先降低 TTL(300)→ 讓變更快速生效
DNS 傳播
你修改了 DNS 記錄...
時間線
├── 0 分鐘 → 你的 DNS 提供商已更新
├── 5 分鐘 → 部分 ISP 的 DNS 已更新
├── 1 小時 → 大部分地區已更新
└── 24-48 小時 → 全球完全傳播完成
為什麼要這麼久?
因為全球各地的 DNS 伺服器都有快取,
要等舊快取過期(TTL 到期)才會去查新記錄
DNS 查詢工具
nslookup
# 查詢 A 記錄(最基本的查詢)
nslookup example.com
# 指定查詢類型為 MX(郵件伺服器)
nslookup -type=MX example.com
# 使用 Google 的 DNS 伺服器(8.8.8.8)來查詢
nslookup example.com 8.8.8.8
# 查詢 CNAME 記錄
nslookup -type=CNAME www.example.com
dig(Linux/macOS)
# 查詢 A 記錄(詳細輸出)
dig example.com
# 只顯示簡短結果
dig +short example.com
# 查詢 MX 記錄
dig MX example.com
# 追蹤完整的 DNS 解析過程(從 Root DNS 開始)
dig +trace example.com
# 查詢特定 DNS 伺服器
dig @8.8.8.8 example.com
CDN 基礎概念
💡 比喻:7-11 物流系統 如果所有商品都從台北總倉出貨,花蓮的客人要等很久。 所以 7-11 在各地都有物流中心(節點),把商品預先放好。 CDN 也一樣:
- Origin Server(原始伺服器) = 台北總倉
- CDN Edge Node(邊緣節點) = 各地物流中心
- 使用者 = 各地的客人(從最近的節點取貨)
CDN 運作流程
使用者(高雄)
|
↓ 請求 www.example.com/image.jpg
|
CDN 邊緣節點(高雄)
|
├── 有快取?→ 直接回傳(超快!)
|
└── 沒快取?→ 去 Origin Server 拿
↓
Origin Server(美國)
↓
拿到後存一份在高雄節點
↓
下次高雄的人要就直接給
常見 CDN 服務
服務 特色
───────────────────────────────────
Cloudflare 免費方案、自帶 DNS 和 DDoS 防護
AWS CloudFront 和 AWS 深度整合
Azure CDN 和 Azure 深度整合
Akamai 老牌 CDN,企業級
🤔 我這樣寫為什麼會錯?
❌ 錯誤 1:改了 DNS 但網站沒有馬上生效
問題:我改了 A 記錄指向新伺服器,但網站還是連到舊的?
原因:DNS 快取還沒過期(TTL 還沒到)
✅ 正確做法:
1. 修改 DNS 之前,先把 TTL 降低到 300(5 分鐘)
2. 等舊 TTL 過期後再修改 A 記錄
3. 確認生效後,把 TTL 調回 3600
4. 本機可以清除 DNS 快取來立即看到變更
# Windows 清除 DNS 快取
ipconfig /flushdns
# macOS 清除 DNS 快取
sudo dscacheutil -flushcache
# Linux 清除 DNS 快取(systemd-resolved)
sudo systemd-resolve --flush-caches
❌ 錯誤 2:CNAME 和 A 記錄搞混
問題:我想讓 www.example.com 指向 example.com
❌ 錯誤:設定 A 記錄指向另一個網域名稱
www.example.com A example.com (A 記錄只能指向 IP!)
✅ 正確:用 CNAME 記錄指向另一個網域
www.example.com CNAME example.com. (CNAME 才能指向網域)
或者:用 A 記錄指向 IP
www.example.com A 93.184.216.34 (A 記錄指向 IP 也可以)
❌ 錯誤 3:沒有設定 MX 記錄導致收不到信
問題:買了網域 example.com 但收不到 info@example.com 的信
原因:沒有設定 MX 記錄,郵件系統不知道信要送到哪裡
✅ 正確做法:設定 MX 記錄指向郵件伺服器
example.com. MX 10 mail.example.com.
example.com. MX 20 backup-mail.example.com.
; 數字越小優先級越高,10 比 20 優先
💡 重點整理
| 概念 | 說明 |
|---|---|
| DNS | 把網域名稱轉換成 IP 位址的系統 |
| A 記錄 | 網域 → IP 位址 |
| CNAME | 網域別名 → 另一個網域 |
| MX | 郵件伺服器指向 |
| TTL | DNS 快取保留時間(秒) |
| CDN | 內容分發網路,讓使用者從最近的節點取得資料 |