使用 GeoIP 和 bind9 有什么限制吗?

使用 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 {
        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; };
};

命名的.conf.默认区域

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 的 Web 服务器日志时,我可以看到一些 IP 在 GeoIP-AA.acl IP 地址范围内,并收到 IP2 作为网站 IP 地址。文件 GeoIP-AA.acl 有 6000 条记录。我想知道使用 GeoIP ACL 和 bind9 是否有任何限制?我认为 Bind 中没有检查所有 IP 地址范围,或者发生了其他事情,例如 ACL 记录数量限制。任何帮助都非常感谢

答案1

对我来说,您的配置似乎没问题,并且完全遵循viewZytrax 的子句示例DNS BIND 视图子句

不要关注 Web 服务器日志,也不要将其与 ACL 进行比较:

  • 客户不会使用你的权威性名称服务器直接递归名称服务器。
  • 查询结果总是会被缓存几TTL秒钟,所以不要指望立即得到结果。

相反,通过添加更详细的日志记录到您的 BIND,即类别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无需向您的权威服务器发出额外请求。

相关内容