為什麼你要運行自己的 DNS 伺服器?
使得 DNS 難以理解的事情之一是它是 分散式的。有成千上萬(也許是幾十萬?我不知道!)的 權威性域名伺服器 ,以及至少 1000 萬個解析器。而且它們正在運行許多不同的軟體!不同伺服器運行著不同的軟體意味著 DNS 的工作方式有很多不一致的地方,這可能導致各種令人沮喪的問題。
但是,與其談論這些問題,我更感興趣的是弄清楚 —— 為什麼 DNS 是分散式的是一件好事?
為什麼 DNS 是分散式的是件好事?
一個原因是 可擴展性 —— DNS 的分散式設計使其更容易擴展,對故障的恢復能力更強。我發現,儘管 DNS 已經有近 40 年的歷史,但它的擴展性仍然很好,這真是令人驚訝。這一點非常重要,但這並不是這篇文章的主題。
相反,我想說的是,它是分散式的意味著你可以 控制 你的 DNS 的工作方式。你可以向巨大而複雜的 DNS 伺服器中添加更多的伺服器!添加你控制的伺服器!
昨天我 在 Twitter 上問 為什麼你要運行自己的 DNS 伺服器,我得到了很多很好的答案,我想在這裡總結一下。
你可以運行 2 種類型的 DNS 伺服器
你可以運行 2 種主要類型的 DNS 伺服器:
- 如果你擁有一個域名,你可以為該域名運行一個 權威名稱伺服器
- 如果你有一台電腦(或一個有很多電腦的公司),你可以運行一個 解析器 來為這些電腦解析 DNS。
DNS 不是靜態資料庫
我經常看到 DNS 的 「電話簿」 比喻,域名就像人名,IP 地址就像電話號碼。
這是一個不錯的思維模型。但是,「電話簿」 思維模型可能會使你認為,如果你對 google.com
進行 DNS 查詢,你將永遠得到相同的結果。而這是不正確的。
你在 DNS 查詢中得到的記錄可能取決於:
- 你在世界的哪個地方(也許你會得到一個離你更近的伺服器的 IP 地址)
- 你是否在企業網路里(你可以在其中解析內部域名)
- 該域名是否被你的 DNS 解析器認為是 「壞」 的(它可能被封鎖!)
- 之前的 DNS 查詢(也許 DNS 解析器正在做基於 DNS 的負載平衡,每次給你一個不同的 IP 地址)
- 你是否在使用機場 Wi-Fi 專屬門戶(機場 Wi-Fi 會在你登錄前以不同的方式解析 DNS 記錄,它會給你發送一個特殊的 IP 來重定向你)
- 隨便什麼
你可能想控制你自己的伺服器的很多原因都與 DNS 不是一個靜態資料庫這一事實有關 —— 對於如何處理 DNS 查詢,你可能會有不同的選擇(無論是為你的域名還是為你的組織)。
運行權威性名稱伺服器的理由
這些原因並沒有任何特定的順序。
對於其中一些原因,你不一定必須要運行你自己的權威名稱伺服器,你只需選擇提供了該功能的權威名稱伺服器服務就行了。
要明確的是:有很多理由 不 運行自己的權威名稱伺服器 —— 我就沒有運行,我也不想說服你應該這樣做。它需要時間來維護,你的服務可能不那麼可靠,等等。
原因:安全
[存在] 攻擊者通過你的 DNS 供應商的客戶支持人員獲得 DNS 變更許可權的風險,客服本來只應該提供幫助。他們可以被你的 DNS 阻止(也許就是因為缺少這個)。內部可能更容易審計和驗證內容。
原因:你喜歡運行 bind/nsd
有幾個人提到的一個原因是:「我習慣於編寫區域文件和運行 bind
或 nsd
,對我來說這樣做更容易。」
如果你喜歡 bind/nsd 的方式,但又不想運維自己的伺服器,有幾個人提到,你也可以通過運行一個 「隱藏的主伺服器」 來獲得 bind 的優勢,該伺服器存儲記錄,但從一個 「輔助」 伺服器提供所有的實際 DNS 查詢。這裡有一些我發現的關於配置輔助 DNS 的網頁,以 NS1、cloudflare 和 Dyn 作為示例。
我真的不知道什麼是最佳的權威 DNS 伺服器。我想我只在工作中使用過 nsd。
原因:你可以使用新的記錄類型
並非所有的 DNS 服務都支持某些較新的 DNS 記錄類型,但如果你運行你自己的 DNS,你就可以支持任何你想要的記錄類型。
原因:用戶界面
你可能不喜歡你正在使用的 DNS 服務的用戶界面(或 API,或乾脆沒有 API)。這與 「你喜歡運行 BIND 」的原因差不多,也許你喜歡編寫區域文件的方式。
原因:你可以自己修復問題
當問題出現時,能夠自己解決,有一些明顯的優點和缺點(優點:你可以解決問題,缺點:你必須解決問題)。
原因:做一些奇怪的、自定義的事情
你可以寫一個 DNS 伺服器,做任何你想做的事情,它不一定要只返回一組靜態記錄。
有幾個例子:
- Replit 有一篇博文介紹了 為什麼他們編寫自己的權威性 DNS 伺服器來處理路由
- nip.io 將 10.0.0.1.nip.io 映射為 10.0.0.1
- 我為 亂用 dns 而寫了一個自定義 DNS 伺服器
原因:省錢
權威名稱伺服器似乎一般按每百萬次 DNS 查詢收費。比如,似乎 Route 53 每百萬次查詢收費 0.5 美元,NS1 每百萬次查詢收費約 8 美元。
我對一個大型網站的權威 DNS 伺服器實際需要解決多少次查詢沒有概念(哪些類型的網站會對其權威 DNS 伺服器進行 10 億次 DNS 查詢?可能是很多,但我沒有這方面的經驗)。但是有幾個人在回復中提到成本是一個原因。
原因:你可以改變你的註冊商
如果你為你的域名使用一個單獨的權威名稱伺服器,而不是你的註冊商的名稱伺服器,那麼當你轉移到一個不同的註冊商時,你所要做的就是把你的權威 DNS 伺服器設置為正確的值,從而使你的 DNS 恢復正常。你不需要遷移你所有的 DNS 記錄,那非常痛苦。
但你不需要為此而運行你自己的名字伺服器。
原因:地理 DNS
你可能想根據客戶的位置為你的域名返回不同的 IP 地址,給他們一個離他們很近的伺服器。
這是很多權威的域名伺服器服務所提供的服務,你不需要為此而專門運行名字伺服器。
原因:避免針對他人的拒絕服務攻擊
許多權威 DNS 伺服器是共享的。這意味著,如果有人攻擊 google.com
或其他的 DNS 伺服器,而你恰好在使用同一個權威 DNS 伺服器,你可能會受到影響,即使攻擊不是針對你。例如,2016 年的這次 對 Dyn 的 DDoS 攻擊。
原因:把所有的配置放在一個地方
有一個人提到,他們喜歡把所有的配置(DNS 記錄、let's encrypt、nginx 等)放在一台伺服器上的同一個地方。
另類原因:把 DNS 當作 VPN 使用
顯然,iodine 是一個可以讓你通過 DNS 隧道傳輸流量的權威 DNS 伺服器,它可以讓你像 VPN 一樣與外界聯繫,
運行解析器的原因
原因:隱私
如果有人能看到你所有的 DNS 查詢,他們就有你(或你組織中的每個人)正在訪問的所有域名的完整列表!你可能更願意保持這種隱私。你可能更願意保持這種隱私。
原因:阻止惡意網站
如果你運行你自己的解析器,你可以(通過不返回任何結果)拒絕解析你認為 「壞」 的域名的 DNS 查詢。
幾個你可以自己運行(或只是使用)的解析器的例子:
- Pi-Hole 阻止廣告商
- Quad9 阻止做惡意軟體/網路釣魚/間諜軟體的域名。 Cloudflare 似乎有一個 類似的服務
- 我想也有一些企業安全軟體會阻止那些託管惡意軟體的域名的 DNS 查詢
- DNS 不是靜態資料庫。它是非常動態的,答案往往實時取決於查詢的 IP 地址、內容伺服器的當前負載等。除非你將這些記錄的服務委託給做出這些決定的實體,否則很難實時實現。
- DNS 委派控制使訪問控制非常簡單。從區域中切下的部分都由控制委派伺服器的人控制,所以對一個主機名的責任是隱含在 DNS 委派中的。
原因:在 nginx 中獲得動態代理
這裡有一個很酷的故事,來自 這條推文:
我在一個應用程序中寫了一個 DNS 伺服器,然後把它設置為 nginx 的解析器,這樣我就可以獲得動態的後端代理,而不需要 nginx 運行 lua。Nginx 嚮應用程序發送 DNS 查詢,應用程序查詢 Redis 並作出相應的反應。這對我正在做的事情來說,效果非常好。
原因:避免惡意解析器
一些 ISP 運行的 DNS 解析器會做一些不好的事情,比如把不存在的域名指向他們控制的 IP,向你顯示廣告或他們控制的奇怪的搜索頁面。
使用你控制的解析器或你信任的另一個解析器可以幫助你避免這種情況。
原因:解析內部域名
你可能有一個內部網路,其域名(比如 blah.corp.yourcompany.com
)並不在公共互聯網上。為內部網路中的機器運行你自己的解析器,就有可能訪問這些域名。
無論是訪問只在本地的服務,還是為公共互聯網上的服務獲得本地地址,你都可以在家庭網路中做同樣的事情。
原因:避免你的 DNS 查詢被中間人劫持
有一個人 說:
我在我的區域網路由器上運行了一個解析器,它的上游使用了基於 HTTPS 的 DNS(DoH),所以物聯網和其他不支持 DoH 或 DoT 的設備不會在外面噴射明文 DNS 查詢。
就是這樣
對我來說,探索 DNS 的 「原因」 感覺很重要,因為它是一個如此複雜凌亂的系統,我認為大多數人如果不理解為什麼這些複雜的東西是有用的,就很難有動力去學習這麼複雜的主題。
感謝 Marie 和 Kamal 對這篇文章的討論,也感謝 Twitter 上提供這些原因的所有人。
via: https://jvns.ca/blog/2022/01/05/why-might-you-run-your-own-dns-server-/
作者:Julia Evans 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive