Domain-Name-System

在 BIND 中超過 32 rpz 區域限制的替代方法?…無需執行 BIND 一千次

  • December 13, 2021

使用 BIND RPZ 為我提供了我正在尋找的更改查詢的確切內容。但是,數百個客戶端正在使用我的遞歸 DNS 伺服器,我正在尋找一種方法來允許每個客戶端進行某種程度的自定義。客戶可能希望啟用數百個區域,以實現數千種不同的可能組合。

看來我僅限於 32 個 RPZ 區域(看似無限長),但僅此一項是行不通的——每個使用者都需要選擇加入特定區域的能力。即使每個客戶端都有大量區域,它仍然會達到 32 個限制。

我已經簡要地查看了 Unbound,它似乎具有類似的具有本地數據透明度的 RPZ 設置,但是當尋找一種將事物分成視圖的方法時,樂趣似乎已經結束,因此我只能將它們提供給特定的客戶。

當然有一種方法可以在不重新發明輪子的情況下實現這一目標?我看到商業提供商提供類似的設置,例如 OpenDNS,成千上萬的客戶可以在其中切換各種列表。秘方是什麼?

首先,它有助於理解為什麼存在限制。

https://kb.isc.org/docs/aa-01121

RPZ 機制在 BIND 9.10 中沒有改變。知識庫文章 AA-00525(使用響應策略區域 (RPZ) 建構 DNS 防火牆)中的文件幾乎是最新的。BIND 9.10 中的變化是現在可以在單個實例中使用多達 32 個單獨的 RPZ 文件BIND,並且 BIND 並沒有因為 RPZ 的大量使用而顯著減慢。這 32 個策略區域文件中的每一個都可以根據需要為盡可能多的不同域指定策略。32 的限制是獨立指定的策略集合的數量和而不是他們指定策略的區域數量。

在實現 RPZ 的早期版本的 BIND 中,擁有多個 RPZ 區域文件需要 BIND 在每個策略區域中執行單獨的查找以查看是否存在匹配項。在 BIND 9.10 中,策略資訊儲存在基數樹中,其中所有策略區域的同時查找可以在與最大集合(RPZ 區域)中策略語句數量的對數大致成比例的亞線性時間內執行)。

Vernon Schryver 和 Paul Vixie 為 BIND 9.10 提供了改進的 RPZ 實現。它更快,因為它的策略大小為 O(log n),並且因為它可以並行查找多個數據項。32 的新限制是由於使用 32 位位域來標識影響查詢的策略區域。RPZ 以前的實現是 O(n) 而不是 O(log n)。

我已經強調了相關的措辭。更改 32 限制的唯一方法是更新算法以使用更大的位域,或完全刪除優化程式碼。即使您將位域的大小加倍為 64(或重新加倍為 128 等),您仍然要處理基數樹優化所施加的靜態限制。由於我不熟悉這個算法的內部結構,我也不能說這種嘗試一開始會有多有效。

您可以通過使用與您的個人客戶相匹配的視圖來解決此問題,這將為您提供每個客戶 32 個 RPZ 區域,但這是您在不深入研究原始碼的情況下所能達到的範圍。

引用自:https://serverfault.com/questions/787963