Linux

將 GeoIP 與 bind9 一起使用是否有任何限制

  • July 4, 2018

我在 Ubuntu 16.04 機器上有一個 DNS 伺服器(BIND 9.10.3-P4-Ubuntu)。我有一個包含兩個 A 記錄(IP1、IP2)的域,它指示兩個單獨的 Web 伺服器(Wserver1、Wserver2)。我希望 DNS 伺服器響應來自 IP1 的國家 A 和來自 IP2 的其他國家的查詢。我創建了一個名為 GeoIP.acl 的文件並將其包含在綁定配置中,並將我的 A 記錄添加到綁定服務的相關文件中。

命名的.conf:

   include "/etc/bind/named.conf.options";
   include "/etc/bind/named.conf.default-zones";
   include "/etc/bind/GeoIP-AA.acl";

命名.conf.options:

   options {
       recursion no;
       // Put files that named is allowed to write in the data/ directory:
       directory                "/var/cache/bind";
       dnssec-validation auto;
       auth-nxdomain no;    # conform to RFC1035
       allow-query     { any; };
   };
logging {
       channel default_log {
               file "/var/log/named/named.log" versions 5 size 128M;
               print-time yes;
               print-severity yes;
               print-category yes;
               severity warning;
       };
       channel query_log {
               file "/var/log/named/query.log";
               severity debug 3;
               print-severity yes;
               print-time yes;
       };
       category queries { query_log; };
       category default { default_log; };
       category general { default_log; };
};

named.conf.default-zones

view "Country A" {
 match-clients { AA; };
 recursion no;
 additional-from-cache no;
zone "test.com" IN {
   type master;
   file "/var/cache/bind/test-AA.com.db";
   allow-update { none; };
   allow-query { any; };
   notify yes;
 };

view "Other" {
 match-clients { any; };
 recursion no;
 additional-from-cache no;

 zone "test.com" IN {
   type master;
   file "/var/cache/bind/test.com.db";
   allow-update { none; };
   allow-query { any; };
   notify yes;
 };

GeoIP-AA.acl:

acl "AA" {
       x1.x2.0.0/16;
       y1.y2.0.0/22;
       z1.z2.0.0/22;
       w1.w2.0.0/8;
};

test-AA.com.db 有 IP1 作為 A 記錄, test.com.db 有 IP2 作為 A 記錄。通過這些配置,我希望來自 A 國的所有客戶端都接收 IP1,而其他客戶端接收 IP2 作為站點 IP 地址。似乎一切正常,除了我在日誌中看到一些從錯誤客戶端重定向的 IP 地址!我的意思是當我檢查 Wserver2 的網路伺服器日誌時,我可以看到一些位於 GeoIP-AA.acl IP 地址範圍內的 IP,並收到 IP2 作為網站 IP 地址。文件 GeoIP-AA.acl 有 6000 條記錄。我想知道在 bind9 中使用 GeoIP ACL 是否有任何限制?我認為綁定中沒有檢查所有 IP 地址範圍,否則會發生其他情況,例如 ACL 記錄數量的限制。任何幫助表示讚賞

對我來說,您的配置似乎沒問題,並且完全遵循view例如 Zytrax DNS BIND view Clause中的子句範例。

不要專注於 Web 伺服器日誌並停止將它們與您的 ACL 進行比較:

  • 客戶端不會直接使用您的權威名稱伺服器,而是通過它們的遞歸名稱伺服器。
  • 查詢的結果總是被記憶體TTL幾秒鐘,所以不要期望立即得到結果。

相反,通過向 BIND 添加更詳細的日誌記錄來進行調試,即為 category queries

logging {
   channel queries_file {
       file "/var/log/named/queries.log" versions 3 size 5m;
       severity debug 6;
       print-time yes;
       print-severity yes;
   };
   category queries { queries_file; };
}

如果您看到任何屬於您的 ACL 視圖的查詢,它可能正在工作。您可以通過隨機檢查匹配的查詢view "Other"是否沒有與您的 ACL 匹配的 IP 地址來確保這一點,反之亦然。ACL 大小沒有記錄在案的限制,也沒有理由相信。

目前(來自評論)大約 25% 的 DNS 查詢屬於view "Country A",這似乎很合理。您不應該認為 DNS 級別的統計資訊與實際 Web 服務客戶端的數量有任何關係,因為結果再次為TTL. 從客戶端較少的國家/地區獲得更多 DNS 查詢是很自然的,因為客戶端分佈在多個 ISP 之間,而單個國家/地區的遞歸 DNS 伺服器較少。一旦遞歸 DNS 伺服器記憶體了記錄,許多客戶端就可以在TTL向您的權威伺服器發出額外請求的情況下請求它。

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