Skip to content

Domain 和 DNS

Domain 是一個網路上的名稱,讓人們可以更容易地記住和訪問網站。它就像是一個地址,指向一個特定的網站或服務。當你在瀏覽器中輸入一個域名時,DNS 會將這個域名轉換成對應的 IP 地址,讓你的電腦能夠找到並連接到該網站。

Domain 的中文是「網域」,它是由 unicode 字元組成的字串,讓搭大家可以輕鬆的連線網站。

Domain 是多層次的架構,越往右層級越高、也越粗略,而越往左則越詳細。 以 cpp.doong.me 為例:

  1. .me 是頂級域名(TLD),是由 ICANN 分配給 蒙特內哥羅國家及地區頂級域 管理的。

  2. .doong 是二級域名,我透過 Cloudflare 向 .me 註冊局註冊的域名。

  3. .cpp 是三級域名,是由我創建的子域名,用來指向 C++ Here。

  4. 也可以繼續往左創建更多的子域名,例如 blog.cpp.doong.mewww.blog.cpp.doong.me 等等。

只要擁有一個域名,就可以對它創建並管理子域名。

例如:

  • .com.tw.tw 的子域名
  • google.com.com 的子域名
  • www.google.comgoogle.com 的子域名。

要購買一個域名,你需要找到一個域名註冊商(Registrar),這些公司負責管理域名的註冊和維護。你可以在註冊商的網站上搜尋想要的域名,看看它是否可用。如果可用,就可以購買它了!

以下是一些常見的域名註冊商和我個人給他的評分:

  • Cloudflare:夯,用批發價賣,不加價,唯一的限制是不能換 Name Server。
  • Namecheap:頂級,送了我一年的 doong.me,但之後續費會比 Cloudflare 貴一點,網站有點不好用。所以我用了一年免費就轉移到 Cloudflare 了。
  • Name.com:頂級,雖然沒用過,但他有提供學生免費域名的服務,聽說不錯。
  • Dynadot:人上人,雖然沒用過,但聽說功能齊全,價格合理,網站好用。
  • GoDaddy:拉完了,會用超便宜的第一年價格吸引你購買,但續費會非常貴,還會想辦法讓你難以轉移到別家,還出過客服意外轉移網域所有權的問題。

DNS 是一個分散式的系統,用於將域名轉換成 IP 地址。當你輸入一個域名時,DNS 會查找對應的 IP 地址,然後將你的請求發送到該地址上的伺服器。這樣,你就可以訪問你想要的網站了。

他的原理是從右到左逐層解析,從根域名伺服器開始,然後是頂級域名伺服器,最後是權威域名伺服器,直到找到對應的 IP 地址為止。

例如解析 cpp.doong.me 的過程如下:

  1. 根域名伺服器 查詢 .me 頂級域名的域名伺服器是誰。

  2. .me 頂級域名伺服器 查詢 doong.me 二級域名的域名伺服器是誰。

  3. doong.me 域名伺服器(目前我交給 Cloudflare 管理)查詢 cpp.doong.me 的 IP 位置。

這也是為什麼擁有一個域名就能管理子域名的原因,因為 DNS 是分層的架構,每一層都可以管理下一層的子域名。

我們可以使用 dig 命令來驗證這個查詢過程,看看每一步的結果:

Terminal window
dig +trace cpp.doong.me
dig

DNS record 是用來定義域名記載的資訊,有許多種類型

以下是一些常見的類型:

類型說明常見用途
A將域名指向一個 IPv4 地址在自己的伺服器上架設服務
AAAA將域名指向一個 IPv6 地址在自己的伺服器上架設服務
CNAME將一個域名指向另一個域名Github PagesCloudflare PagesVercel 等平台上使用自訂域名
MX定義郵件交換伺服器,用於處理電子郵件將電子郵件導向至郵件伺服器
TXT用於存儲任意文本資訊,常用於驗證和安全相關的設定驗證網域所有權,常用於 Github PagesGoogle Search ConsoleSPF / DKIM 等服務
NS定義域名伺服器,指定哪個伺服器負責管理該域名的 DNS 記錄將子域名委託給特定 DNS 伺服器管理;或授予子域名獨立的管理權限
(例如我把 doong.me 交給 Cloudflare 管理,.medoong 的 NS 記錄就會指向 Cloudflare)

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 小時,在這段時間內不需要重新查詢權威伺服器,直接從快取回傳結果。

當你修改 DNS record 時,並不是所有人都會立刻看到新的結果。遞迴解析器會繼續使用快取中的舊記錄,直到 TTL 過期才會重新查詢。這個過程叫做 DNS 傳播(DNS Propagation),可能需要幾分鐘到幾小時不等,取決於你原本設定的 TTL 值。

因此,如果預計要修改 DNS record(例如要換伺服器),建議提前幾天將 TTL 調低(例如調成 300,即 5 分鐘),等修改完成後再調回去。這樣可以大幅縮短傳播時間,減少服務中斷的影響。

ttl

DNSSEC 是一種安全擴展,用於保護 DNS 系統免受偽造和欺騙攻擊。它透過使用數位簽章來驗證 DNS 記錄的真實性,確保使用者獲取到的 DNS 資訊是正確的,沒有被篡改或偽造。

他和網域解析系統一樣都是層層簽署的架構,每一層都有一對金鑰,用自己的私鑰簽署下一層的公鑰,形成信任鏈:

  1. 根域名 (.) → 簽署 .me 的公鑰

  2. .me → 簽署 doong.me 的公鑰

  3. doong.me → 簽署 cpp.doong.me 的記錄

上一層用 DS 記錄存放下一層公鑰的雜湊值,作為「我認可這把鑰匙」的證明

查詢結果附帶數位簽章,讓查詢方可以驗證資料沒被竄改

DNSSEC 可以有效防止 DNS 欺騙攻擊,保護用戶免受惡意網站的攻擊,並增強整個 DNS 系統的安全性。

我們可以用 delv 或是 DNS Viz 來觀察這個簽章的驗證過程。

直接開啟: https://dnsviz.net/

dnsviz

然後最近德國頂級域名 .de 的 DNSSEC 才剛出事

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

DNS 是把網址轉成 IP,反向 DNS(Reverse DNS,rDNS)則是將 IP 轉回網址。

反向 DNS 使用一種特殊的域名格式:將 IP 地址反轉後加上 .in-addr.arpa

例如查詢 168.95.1.1(中華電信 HiNet DNS)對應域名的過程如下:

  1. 將 IP 位址反轉後加上 .in-addr.arpa,組成查詢域名 1.1.95.168.in-addr.arpa

  2. 根域名伺服器 一路查詢下去,找到負責管理 in-addr.arpa 的域名伺服器,得知由 IANA(網際網路號碼分配局)負責。。

  3. in-addr.arpa 域名伺服器(IANA) 查詢 168.in-addr.arpa 的域名伺服器是誰,得知由 ARIN(美洲網際網路號碼註冊管理機構)負責。

  4. 168.in-addr.arpa 域名伺服器(ARIN) 查詢 95.168.in-addr.arpa 的域名伺服器是誰,得知由 中華電信負責。

  5. 95.168.in-addr.arpa 域名伺服器(中華電信) 查詢 1.95.168.in-addr.arpa 的域名伺服器是誰,得知由 中華電信負責。

  6. 1.95.168.in-addr.arpa 域名伺服器(中華電信) 查詢 1.1.95.168.in-addr.arpaPTR 記錄,得到 dns.hinet.net

因為 DNS 是從右到左解析的,要重粗略到詳細的順序,所以 IP 地址也要反轉才能符合這個解析流程。

通常是由 IP 地址的擁有者(例如 ISP 或雲端服務提供商)來管理的,你需要向他們申請設定 PTR 記錄,指向你想要的域名。

  • 郵件伺服器驗證:許多郵件伺服器會檢查寄件方 IP 是否有 PTR 記錄,沒有的話可能被當成垃圾郵件
  • 網路除錯traceroute 等工具會用反向 DNS 將路由路徑上的 IP 顯示為可讀的域名
  • 日誌可讀性:伺服器 log 中顯示域名比 IP 更容易辨識來源