Domain 和 DNS
Domain
Section titled “Domain”Domain 是一個網路上的名稱,讓人們可以更容易地記住和訪問網站。它就像是一個地址,指向一個特定的網站或服務。當你在瀏覽器中輸入一個域名時,DNS 會將這個域名轉換成對應的 IP 地址,讓你的電腦能夠找到並連接到該網站。
Domain 的結構
Section titled “Domain 的結構”Domain 的中文是「網域」,它是由 unicode 字元組成的字串,讓搭大家可以輕鬆的連線網站。
Domain 是多層次的架構,越往右層級越高、也越粗略,而越往左則越詳細。
以 cpp.doong.me 為例:
-
.me是頂級域名(TLD),是由 ICANN 分配給蒙特內哥羅國家及地區頂級域管理的。 -
.doong是二級域名,我透過 Cloudflare 向.me註冊局註冊的域名。 -
.cpp是三級域名,是由我創建的子域名,用來指向 C++ Here。 -
也可以繼續往左創建更多的子域名,例如
blog.cpp.doong.me,www.blog.cpp.doong.me等等。
只要擁有一個域名,就可以對它創建並管理子域名。
例如:
.com.tw是.tw的子域名google.com是.com的子域名www.google.com是google.com的子域名。
要購買一個域名,你需要找到一個域名註冊商(Registrar),這些公司負責管理域名的註冊和維護。你可以在註冊商的網站上搜尋想要的域名,看看它是否可用。如果可用,就可以購買它了!
以下是一些常見的域名註冊商和我個人給他的評分:
- Cloudflare:夯,用批發價賣,不加價,唯一的限制是不能換 Name Server。
- Namecheap:頂級,送了我一年的 doong.me,但之後續費會比 Cloudflare 貴一點,網站有點不好用。
所以我用了一年免費就轉移到 Cloudflare 了。 - Name.com:頂級,雖然沒用過,但他有提供學生免費域名的服務,聽說不錯。
- Dynadot:人上人,雖然沒用過,但聽說功能齊全,價格合理,網站好用。
- GoDaddy:拉完了,會用超便宜的第一年價格吸引你購買,但續費會非常貴,還會想辦法讓你難以轉移到別家,還出過客服意外轉移網域所有權的問題。
DNS 是一個分散式的系統,用於將域名轉換成 IP 地址。當你輸入一個域名時,DNS 會查找對應的 IP 地址,然後將你的請求發送到該地址上的伺服器。這樣,你就可以訪問你想要的網站了。
他的原理是從右到左逐層解析,從根域名伺服器開始,然後是頂級域名伺服器,最後是權威域名伺服器,直到找到對應的 IP 地址為止。
例如解析 cpp.doong.me 的過程如下:
-
向 根域名伺服器 查詢
.me頂級域名的域名伺服器是誰。 -
向
.me頂級域名伺服器 查詢doong.me二級域名的域名伺服器是誰。 -
向
doong.me域名伺服器(目前我交給 Cloudflare 管理)查詢cpp.doong.me的 IP 位置。
這也是為什麼擁有一個域名就能管理子域名的原因,因為 DNS 是分層的架構,每一層都可以管理下一層的子域名。
我們可以使用 dig 命令來驗證這個查詢過程,看看每一步的結果:
dig +trace cpp.doong.me
DNS record
Section titled “DNS record”DNS record 是用來定義域名記載的資訊,有許多種類型
以下是一些常見的類型:
| 類型 | 說明 | 常見用途 |
|---|---|---|
| A | 將域名指向一個 IPv4 地址 | 在自己的伺服器上架設服務 |
| AAAA | 將域名指向一個 IPv6 地址 | 在自己的伺服器上架設服務 |
| CNAME | 將一個域名指向另一個域名 | 在 Github Pages、Cloudflare Pages 或 Vercel 等平台上使用自訂域名 |
| MX | 定義郵件交換伺服器,用於處理電子郵件 | 將電子郵件導向至郵件伺服器 |
| TXT | 用於存儲任意文本資訊,常用於驗證和安全相關的設定 | 驗證網域所有權,常用於 Github Pages、Google Search Console、SPF / DKIM 等服務 |
| NS | 定義域名伺服器,指定哪個伺服器負責管理該域名的 DNS 記錄 | 將子域名委託給特定 DNS 伺服器管理;或授予子域名獨立的管理權限 (例如我把 doong.me 交給 Cloudflare 管理,.me 中 doong 的 NS 記錄就會指向 Cloudflare) |
遞迴解析器與權威伺服器
Section titled “遞迴解析器與權威伺服器”DNS 查詢涉及兩種不同角色的伺服器:
權威伺服器(Authoritative DNS Server):是真正存著答案的伺服器。每個域名都有自己的權威伺服器,裡面存著該域名所有的 DNS record。例如 doong.me 的權威伺服器是 Cloudflare,只有它才知道 cpp.doong.me 的 IP 是多少。
遞迴解析器(Recursive Resolver):是幫你去問答案的中間人。你的電腦不會自己去問根域名伺服器,而是把問題丟給遞迴解析器,由它代替你走完整個查詢流程,最後把答案帶回來,並快取起來供之後使用。(例如 Cloudflare 的 1.1.1.1 或 Google 的 8.8.8.8)其實都是遞迴解析器。
TTL(Time to Live)是每筆 DNS record 都有的一個數值,單位是秒,用來告訴遞迴解析器「這筆記錄可以快取多久」。
例如 TTL 設為 3600,代表遞迴解析器可以把這筆記錄快取 1 小時,在這段時間內不需要重新查詢權威伺服器,直接從快取回傳結果。
為什麼重要?
Section titled “為什麼重要?”當你修改 DNS record 時,並不是所有人都會立刻看到新的結果。遞迴解析器會繼續使用快取中的舊記錄,直到 TTL 過期才會重新查詢。這個過程叫做 DNS 傳播(DNS Propagation),可能需要幾分鐘到幾小時不等,取決於你原本設定的 TTL 值。
因此,如果預計要修改 DNS record(例如要換伺服器),建議提前幾天將 TTL 調低(例如調成 300,即 5 分鐘),等修改完成後再調回去。這樣可以大幅縮短傳播時間,減少服務中斷的影響。
DNSSEC
Section titled “DNSSEC”DNSSEC 是一種安全擴展,用於保護 DNS 系統免受偽造和欺騙攻擊。它透過使用數位簽章來驗證 DNS 記錄的真實性,確保使用者獲取到的 DNS 資訊是正確的,沒有被篡改或偽造。
他和網域解析系統一樣都是層層簽署的架構,每一層都有一對金鑰,用自己的私鑰簽署下一層的公鑰,形成信任鏈:
-
根域名 (.) → 簽署
.me的公鑰 -
.me→ 簽署doong.me的公鑰 -
doong.me→ 簽署cpp.doong.me的記錄
上一層用 DS 記錄存放下一層公鑰的雜湊值,作為「我認可這把鑰匙」的證明
查詢結果附帶數位簽章,讓查詢方可以驗證資料沒被竄改
DNSSEC 可以有效防止 DNS 欺騙攻擊,保護用戶免受惡意網站的攻擊,並增強整個 DNS 系統的安全性。
我們可以用 delv 或是 DNS Viz 來觀察這個簽章的驗證過程。
直接開啟: https://dnsviz.net/
delv +vtrace cpp.doong.me
然後最近德國頂級域名 .de 的 DNSSEC 才剛出事。
隱私與監管疑慮
Section titled “隱私與監管疑慮”DNS 查詢在設計上是明文傳輸的,這帶來幾個值得注意的問題:
- ISP 可以記錄你的查詢紀錄:你造訪了哪些網站,ISP 都看得到,並可能用於廣告投放或提交給政府機關
- DNS 可以被用於審查:政府或 ISP 可以透過竄改 DNS 回應來封鎖特定網站,這也是許多地區網路審查的常見手段
- DNS 污染:攻擊者或審查機構可以偽造 DNS 回應,將你導向錯誤的 IP 地址
為了改善這些問題,目前有幾種加密 DNS 協議被廣泛推廣,例如 DoH(DNS over HTTPS) 和 DoT(DNS over TLS),可以防止第三方竊聽或竄改查詢內容。
因此,十分推薦使用支援加密 DNS 的服務,例如 Cloudflare 的 1.1.1.1,不但可以加快 DNS 查詢速度,還能增強隱私保護。
反向 DNS
Section titled “反向 DNS”DNS 是把網址轉成 IP,反向 DNS(Reverse DNS,rDNS)則是將 IP 轉回網址。
反向 DNS 使用一種特殊的域名格式:將 IP 地址反轉後加上 .in-addr.arpa。
例如查詢 168.95.1.1(中華電信 HiNet DNS)對應域名的過程如下:
-
將 IP 位址反轉後加上
.in-addr.arpa,組成查詢域名1.1.95.168.in-addr.arpa。 -
從 根域名伺服器 一路查詢下去,找到負責管理
in-addr.arpa的域名伺服器,得知由 IANA(網際網路號碼分配局)負責。。 -
向
in-addr.arpa域名伺服器(IANA) 查詢168.in-addr.arpa的域名伺服器是誰,得知由 ARIN(美洲網際網路號碼註冊管理機構)負責。 -
向
168.in-addr.arpa域名伺服器(ARIN) 查詢95.168.in-addr.arpa的域名伺服器是誰,得知由 中華電信負責。 -
向
95.168.in-addr.arpa域名伺服器(中華電信) 查詢1.95.168.in-addr.arpa的域名伺服器是誰,得知由 中華電信負責。 -
向
1.95.168.in-addr.arpa域名伺服器(中華電信) 查詢1.1.95.168.in-addr.arpa的 PTR 記錄,得到dns.hinet.net。
為什麼要反轉?
Section titled “為什麼要反轉?”因為 DNS 是從右到左解析的,要重粗略到詳細的順序,所以 IP 地址也要反轉才能符合這個解析流程。
怎麼設定反向 DNS?
Section titled “怎麼設定反向 DNS?”通常是由 IP 地址的擁有者(例如 ISP 或雲端服務提供商)來管理的,你需要向他們申請設定 PTR 記錄,指向你想要的域名。
反向 DNS 的用途
Section titled “反向 DNS 的用途”- 郵件伺服器驗證:許多郵件伺服器會檢查寄件方 IP 是否有 PTR 記錄,沒有的話可能被當成垃圾郵件
- 網路除錯:
traceroute等工具會用反向 DNS 將路由路徑上的 IP 顯示為可讀的域名 - 日誌可讀性:伺服器 log 中顯示域名比 IP 更容易辨識來源