DNS A 記錄可以擁有的最大 IP 數是多少?
我有一個奇怪的想法——讓多個人/組織託管同一個應用程序,並讓他們的所有節點都可以通過一個域名訪問。這是為了擁有一個真正分佈式的社交網路,其中不犧牲可用性(即使用者不必記住不同的提供者網址,然後當一個提供者出現故障時,切換到另一個提供者)
為此,我認為可以使用具有多個 IP 的 DNS 記錄。
那麼,一條 DNS A 記錄可以保存多少個 IP?這個答案說它大約是 30,但那裡的案例不同。對於上述情況,我不在乎給定的 ISP 是否只記憶體 30 個,只要另一個 ISP 記憶體另外 30 個,依此類推。
免責聲明:沒有冒犯,但這是一個非常糟糕的主意。我不建議任何人在現實生活中這樣做。
但是如果你給一個無聊的 IT 人一個實驗室,有趣的事情就會發生!
在本實驗中,我使用了在 Server 2012 R2 上執行的 Microsoft DNS 伺服器。由於在 Active Directory 中託管 DNS 區域的複雜性,我創建了一個名為 testing.com 的新主要區域,它不是AD 集成的。
使用此腳本:
$Count = 1 for ($x = 1; $x -lt 256; $x++) { for ($y = 1; $y -lt 256; $y++) { for ($z = 1; $z -lt 256; $z++) { Write-Host "1.$x.$y.$z`t( $Count )" $Count++ dnscmd . /RecordAdd testing.com testing A 1.$x.$y.$z } } }
我繼續為 name 創建 65025 個主機記錄,沒有錯誤,
testing.testing.com.
每個 IPv4 地址都從 1.1.1.1 到 1.1.255.255。然後,我想確保我可以無錯誤地突破 65536(2^16 位)的 A 記錄總數,並且我可以,所以我假設我可能一直到 16581375(1.1.1.1 到 1.255 .255.255,) 但我不想坐在這裡看這個腳本執行一整夜。
因此,我認為可以肯定地說,對於您可以在伺服器上為具有不同 IP 的同名區域添加的 A 記錄的數量沒有實際限制。
但從客戶的角度來看,它真的會起作用嗎?
以下是 Wireshark 從我的客戶那裡得到的資訊:
(在新的瀏覽器選項卡中打開圖像以獲得完整大小。)
如您所見,當我從客戶端使用 nslookup 或 ping 時,它會自動發出兩個查詢 - 一個 UDP 和一個 TCP。正如你已經知道的,我最多可以塞進一個 UDP 數據報是 512 字節,所以一旦超過這個限制(比如 20-30 個 IP 地址),就必須改用 TCP。但即使使用 TCP,我也只獲得了 testing.testing.com 的 A 記錄的一小部分。每個 TCP 查詢返回 1000 條記錄。A 記錄列表隨著每個連續查詢正確旋轉 1,就像您期望循環 DNS 的工作方式一樣。循環遍歷所有這些需要數百萬次查詢。
我不知道這將如何幫助您建立可大規模擴展、有彈性的社交媒體網路,但您的答案仍然存在。
**編輯:**在您的後續評論中,您問為什麼我認為這通常是一個壞主意。
- 假設我是一個普通的網際網路使用者,我想連接到您的服務。我在網路瀏覽器中輸入 www.bozho.biz。我電腦上的 DNS 客戶端返回 1000 條記錄。好吧,運氣不好,列表中的前 30 條記錄沒有響應,因為 A 記錄的列表沒有保持最新,或者可能是大規模中斷影響了大部分 Internet。假設我的網路瀏覽器在繼續嘗試下一個之前,每個 IP 有 5 秒的超時時間。所以現在我坐在這裡盯著一個旋轉的沙漏 2 分半鐘等待你的網站載入。是不是沒有人有時間。我只是假設我的網路瀏覽器或我用來訪問您的服務的任何應用程序甚至會嘗試超過前 4 或 5 個 IP 地址。它可能不會。
- 如果您使用自動清理並允許對 DNS 區域進行未經驗證或匿名的更新,以期使 A 記錄列表保持最新……想像一下那將是多麼不安全!即使您設計了一些系統,其中客戶端需要事先從您那裡獲得的客戶端 TLS 證書來更新區域,地球上任何地方的受感染客戶端都會啟動殭屍網路並破壞您的服務。如果沒有眾包,傳統 DNS 本身就非常不安全。
- 巨大的頻寬使用和浪費。如果每個 DNS 查詢都需要 32 KB 或更多的頻寬,那根本無法很好地擴展。
- DNS 循環不能替代適當的負載平衡。它無法從一個節點宕機或在中間變得不可用中恢復。如果他們連接的節點出現故障,您是否會指示您的使用者執行 ipconfig/flushdns?GSLB 和 Anycast 之類的東西已經解決了這類問題。
- 等等。