將 GeoIP 與 bind9 一起使用是否有任何限制
我在 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
向您的權威伺服器發出額外請求的情況下請求它。