close

DNS 服務器

在現實世界中,當您進行閱覽新聞、在線下單、下載文件或觀看直播時,您需要通過訪問域名來訪問目標網站,例如 youtube.com、google.com 等。您只需記住這些網站的名稱,而非它們的 IP 地址,因為與網站名稱相比,IP 地址是很難記住的。因此,您需要一個作為 DNS 服務器的網站/域名地址本。

DNS 在日常生活中非常重要。每個在線的人都需要訪問它,但同時,這對它來說也是一個非常大的挑戰。如果 DNS 服務器出現故障,整個 Internet 網絡都將關閉。

另外,上網的人分布在世界各地,如果每個人都去同一個地方訪問某個服務器,延遲會非常大。因此,DNS 服務器必須設置為高可用、高並發和分布式的。

因此,它應具有如下樹狀層次結構

圖片

根 DNS 服務器:返回頂級域 DNS 服務器的 IP 地址。
頂級域 DNS 服務器:返回權威 DNS 服務器的 IP 地址。
權威 DNS 服務器:返回對應主機的 IP 地址。
DNS 解析過程

為了提高 DNS 解析性能,許多網絡會根據位置部署 DNS 緩存服務器。DNS 解析過程如下:(這裡以訪問 google.com 為例)

客戶端會發出 DNS 請求,詢問 google.com 的 IP 是什麼,它會先在瀏覽器緩存中查找 google.com 的 IP 地址。

然後請求將被發送到本地 DNS 服務器。本地 DNS 服務器由您的網絡服務供應商 (ISP, Internet Service Provider) 自動分配,這通常是您的 ISP 提供的路由器。

本地 DNS 服務器收到來自客戶端的 DNS 請求,它會在其緩存中查找 google.com 的 IP 地址。如果它可以找到對應的條目,它將直接將 IP 地址返回給客戶端。否則,本地 DNS 服務器會詢問它的根域名服務器:「你能告訴我 google.com 的 IP 地址嗎」?根域名服務器作為最高級別的 DNS 服務器,全球共 13 台。它不會直接解析域名,而起到一個「指路」的作用。

根 DNS 服務器收到本地 DNS 的請求,發現要查找域名的後綴是 .com,然後告訴本地 DNS 服務器:「好的,你要找的既然是 .com 後綴的域名,它是由 .com 管理的。這裡是 .com 區域的頂級域 DNS 服務器的 IP 地址,去找它問吧」。

本地 DNS 服務器轉向 .com 區域的頂級域名服務器,並請求 google.com 的 IP 地址。頂級 .com 區域 DNS 服務器再次為該請求指明了方向。它提供了負責 google.com 的權威 DNS 服務器的 IP 地址。

本地 DNS 服務器然後轉向了權威 DNS 服務器並詢問 google.com 的 IP 地址。這次,google.com 的權威 DNS 服務器是域名解析結果的原始來源。它會將 google.com 的 IP 地址直接返回到本地 DNS 服務器。

然後本地 DNS 服務器將 IP 返回給客戶端並將其緩存。至此,DNS 解析完成。

總結一下,我畫了下面這張圖

圖片DNS 負載均衡內部負載均衡

DNS 服務器首先進行內部負載均衡。比如,應用要訪問數據庫,應該在應用中配置數據庫的 IP 地址,還是應該配置數據庫的域名呢?

很明顯,應該配置域名,因為一旦數據庫因為某種原因換到另一台機器上,如果多個應用都配置了這個數據庫,一旦 IP 地址改變了,所有這些應用都需要重新修改。

但是,如果配置了域名,只要在 DNS 服務器中將域名映射到一個新的 IP 地址就完成了這項工作,如此大大簡化了運維工作。

在此基礎上,我們可以走得更遠。例如,如何在訪問它的多個應用程序之間進行負載均衡?只需將其配置為域名即可。在域名解析中,我們只需要配置策略,這次返回第一個 IP,下次返回第二個 IP,就可以實現負載均衡了。

全局負載均衡

為了保證我們的應用程序的高可用性,它們經常被部署在多個計算機數據中心,而每個地方都會有自己的 IP 地址。

當用戶訪問一個域名時,這個 IP 地址可以輪詢多個數據中心。如果某個數據中心由於某種原因宕機了,只要在 DNS 服務器中刪除該數據中心對應的 IP 地址即可。這樣就可以實現一定程度的高可用。

另外,我們肯定希望紐約的用戶訪問紐約的數據中心,西雅圖的用戶訪問西雅圖的數據中心,這樣客戶體驗會非常好,訪問速度會超級快。這就是全局負載均衡的概念。

我們來看看它是如何工作的,假設全國有多個地區,每個地區都有三個可用區域。

圖片

當客戶端要訪問 app.metaleap.com 時,需要將域名轉換為 IP 地址才能訪問,所以需要請求本地 DNS 解析器。

本地 DNS 解析器首先檢查本地緩存是否有此記錄。如果有,直接使用。

如果沒有本地緩存,則需要請求本地 DNS 服務器。

本地 DNS 服務器也需要檢查本地是否有緩存,如果有則返回。

如果沒有本地 DNS,需要從根 DNS 服務器遞歸查找 .com 的頂級域名服務器,直到找到 metaleap.com 的權威 DNS 服務器,交給本地 DNS 服務器。權威 DNS 服務器通常會返回真實 IP 地址。

對於不需要全局負載均衡的簡單應用,metaleap.com 的權威 DNS 服務器可以直接將域名 app.metaleap.com 解析為一個或多個 IP 地址,然後客戶端可以使用多個 IP 地址進行輪詢來實現簡單的負載均衡。

但是對於複雜的應用,尤其是跨區域、跨數據中心的大型應用,需要更複雜的全局負載均衡機制,這需要專門的設備或服務器來做這件事——全局負載均衡器(GSLB,Global Load Balancer)。

在 metaleap.com 的 DNS 服務器中,一般通過配置 CNAME,給 app.metaleap.com 起一個別名,如 app.vip.metaleap.com,然後告訴本地 DNS 服務器去請求 GSLB 來解析域名,GSLB 在解析這個域名的過程中,可以通過自己的策略來實現負載均衡。

圖中繪製了兩層 GSLB,分別為數據中心和區域。我們希望不同數據中心的客戶可以訪問同一數據中心的資源,以提高吞吐量並減少延遲。

結論

DNS 是網絡世界的通訊錄,可以通過域名搜索地址,因為域名服務器是按樹狀結構組織的,所以域名搜索採用遞歸的方式,通過緩存來提升性能。

在域名和 IP 的映射過程中,應用程序有機會進行基於域名的負載均衡,可以是簡單的負載均衡,也可以是基於地址、數據中心和區域的全局負載均衡。

註:如有侵權請聯繫刪除

熱文推薦

藍隊應急響應姿勢之Linux

通過DNSLOG回顯驗證漏洞

記一次服務器被種挖礦溯源

內網滲透初探 | 小白簡單學習內網滲透

實戰|通過惡意 pdf 執行 xss 漏洞

免殺技術有一套(免殺方法大集結)(Anti-AntiVirus)

內網滲透之內網信息查看常用命令

關於漏洞的基礎知識

任意賬號密碼重置的6種方法

乾貨 | 橫向移動與域控權限維持方法總匯

手把手教你Linux提權

歡迎關注LemonSec


覺得不錯點個「贊」、「在看」

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()