☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
網路 中級

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 內容分發網路,讓使用者從最近的節點取得資料

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊