我在一台 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
对我来说,您的配置似乎没问题,并且完全遵循view
Zytrax 的子句示例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
无需向您的权威服务器发出额外请求。