DNS 基礎與實務
DNS 基礎與實務

DNS(Domain Name System)是網際網路的電話簿。它把人類看得懂的網域名稱(如 google.com)翻譯成電腦看得懂的 IP 位址(如 142.250.185.14)。
為什麼需要 DNS?
電腦之間的通訊靠 IP 位址,但人類記不住一堆數字。DNS 就是中間的翻譯層。
你輸入: google.com
DNS 查詢: google.com → 142.250.185.14
瀏覽器連接: 142.250.185.14:443
就像打電話:你記的是聯絡人名字(網域),手機幫你查出電話號碼(IP),再撥出去。
DNS 查詢流程
當你在瀏覽器輸入 example.com,背後發生了什麼?
你輸入 example.com
↓
┌──────────────────┐
│ 1. 瀏覽器快取 │ → 之前查過嗎?有就直接用
└────────┬─────────┘
↓ 沒有
┌──────────────────┐
│ 2. OS 快取 │ → 作業系統也有一層快取
└────────┬─────────┘
↓ 沒有
┌──────────────────┐
│ 3. 路由器 / ISP │ → 你的電信公司 DNS Server
│ DNS Server │
└────────┬─────────┘
↓ 沒有
┌──────────────────────────────────────────┐
│ 4. 遞迴查詢(一層層問到底) │
│ │
│ Root Server: 「.cc 去問 TLD Server」 │
│ ↓ │
│ TLD Server: 「rainbow-monkey.cc 去問 │
│ Authoritative NS」 │
│ ↓ │
│ Authoritative NS: 「= 203.0.113.10」 │
└────────┬─────────────────────────────────┘
↓
結果回傳,每一層都快取起來(TTL 時間內不用再問)
常見 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 Server | example.com → ns1.cloudflare.com |
買一個網域,擁有自己的網站
你現在看到的 1xam.rainbow-monkey.cc 就是透過 DNS 運作的。流程其實不難:
1. 買網域
去網域註冊商(Namecheap、Cloudflare Registrar、GoDaddy)買一個你喜歡的名字。例如我們公司買了 rainbow-monkey.cc。
2. 設定 DNS 指向你的伺服器
買到網域後,在 DNS 管理介面設定 A 記錄,指向你的伺服器 IP:
rainbow-monkey.cc A 203.0.113.10
這樣別人輸入 rainbow-monkey.cc 就會連到你的伺服器。
3. 用子網域切分不同服務
一個網域可以建立多個子網域,每個指向不同的服務:
rainbow-monkey.cc → 公司官網
1xam.rainbow-monkey.cc → 這個學習平台
api.rainbow-monkey.cc → API 服務
mail.rainbow-monkey.cc → 郵件伺服器
staging.rainbow-monkey.cc → 測試環境
每個子網域都是一筆獨立的 DNS 記錄。可以指向不同的 IP,甚至不同的雲端服務:
1xam.rainbow-monkey.cc CNAME 1xam.pages.dev
api.rainbow-monkey.cc A 203.0.113.20
子網域不用另外花錢買,有主網域就能免費建立。
4. 加上 HTTPS
用 Cloudflare 或 Let's Encrypt(Certbot)免費取得 SSL 憑證。使用者連到你的網站時就會看到鎖頭圖示。
實務操作
查詢 DNS 記錄
# 查詢 A 記錄
dig example.com A
# 查詢所有記錄
dig example.com ANY
# 使用特定 DNS Server 查詢
dig @8.8.8.8 example.com
# 追蹤完整查詢過程
dig +trace example.com
# Windows 用 nslookup
nslookup example.com
設定自己的網域
購買網域後,通常需要設定:
1. 設定 NS 記錄 → 指向你的 DNS 提供商(如 Cloudflare)
2. 設定 A 記錄 → 指向你的伺服器 IP
3. 設定 CNAME → www 指向主網域
4. 設定 MX → 郵件伺服器位址
5. 設定 TXT → SPF/DKIM 防止郵件被當成垃圾郵件
TTL(Time To Live)
TTL 決定 DNS 記錄被快取多久。
- TTL = 300(5 分鐘):變更後 5 分鐘內全球生效,但查詢量大
- TTL = 86400(24 小時):變更後最多等 24 小時才全球生效,但快取效率高
建議:平時用長 TTL(3600 秒),準備換 IP 前先改短(300 秒),等舊快取過期後再換 IP。
CDN 與 DNS
CDN(Content Delivery Network)利用 DNS 做智慧路由:
使用者在台北 → DNS 回傳台灣節點 IP → 從最近的伺服器取得內容
使用者在紐約 → DNS 回傳美國節點 IP → 從最近的伺服器取得內容
Cloudflare、AWS CloudFront 等 CDN 都靠 DNS 的 GeoDNS 或 Anycast 技術,讓使用者連到最近的節點。
作業
作業 1:查詢 DNS 記錄
用 dig 或 nslookup 查詢以下網域的 DNS 記錄,記錄結果:
dig 1xam.rainbow-monkey.cc A
dig google.com MX
dig github.com CNAME
dig cloudflare.com NS
回答:
1xam.rainbow-monkey.cc指向哪裡?是 A 還是 CNAME?- Google 的郵件伺服器是什麼?
- Cloudflare 用了哪些 NS?
作業 2:規劃一個網域
假設你買了 你的名字.dev,規劃 DNS 設定:
- 主網域放個人網站
blog.你的名字.dev放部落格api.你的名字.dev放後端 API- 設定郵件(MX 記錄)
畫出 DNS 記錄表,標明每筆記錄的類型、值和 TTL。