我有一个bind9docker 容器为我的家庭实验室提供 DNS 服务。它.lan
为本地设备提供域名,为我的内部服务提供私有域名。但是,出于某种原因,解析任何外部 DNS 条目都非常慢(即使在同一台设备上也是如此)。DNS 解析耗时 1.2 秒,太荒谬了。我附上了 DNS 基准测试的屏幕截图以及我的配置。除了谷歌之外,我还尝试了其他各种上游解析器,所有解析器都得到了类似的结果。我的内部域解析速度都超快,DNS 的缓存响应也很快。有人有什么想法吗?
命名配置文件
options {
directory "/var/cache/bind";
allow-query {any;};
recursion yes;
dnssec-validation no;
allow-transfer { none; };
forwarders {
8.8.8.8;
8.8.4.4;
};
};
zone "my_internal_domain_hidden" IN {
type master;
file "/etc/bind/my_internal_domain_hidden.db";
};
zone "lan" IN {
type master;
file "/etc/bind/lan.db";
};
logging {
category default { null; };
};
my_internal_domain_hidden.db
$TTL 1h;
$ORIGIN my_internal_domain_hidden.
@ IN SOA ns.my_internal_domain_hidden. info.my_internal_domain_hidden. (
18092023 ; serial
12h ; refresh
15m ; retry
3w ; expire
2h ; minimum ttl
)
IN NS ns.my_internal_domain_hidden.
ns IN A my_dns_ip
; dns records
some_service IN A some_ipv4_add3
局域网数据库
$TTL 1h;
$ORIGIN lan.
@ IN SOA ns.lan. info.lan. (
18092023 ; serial
12h ; refresh
15m ; retry
3w ; expire
2h ; minimum ttl
)
IN NS ns.lan.
ns IN A my_dns_ip
; dns records
some_device IN A some_lan_ipv4
答案1
这种设置最常见的问题是
forwarders {
8.8.8.8;
8.8.4.4;
};
很多教程都会建议使用,而不是使用绑定原生分辨率。转发所有查询并不是一个好的做法。
删除这些名称服务器并让 Bind9 完成其工作,若要解决此问题,请删除它们。
- 使用 TLD-(根)名称服务器将主机名解析为 IP
维基百科对此有很好的解释: https://en.wikipedia.org/wiki/Domain_Name_System
地址解析机制 域名解析器通过从最右边(顶级)域标签开始的一系列查询来确定负责该域名的域名服务器。
实现 RFC 1034 所规定的迭代方法的 DNS 解析器;在这种情况下,解析器会咨询三个名称服务器来解析完全限定域名“www.wikipedia.org”。为了使域名解析器正常运行,网络主机配置了根名称服务器已知地址的初始缓存(提示)。管理员会通过从可靠来源检索数据集来定期更新这些提示。
假设解析器没有缓存记录来加速该过程,解析过程从对其中一个根服务器的查询开始。在典型操作中,根服务器不会直接回答,而是通过转介到更权威的服务器来响应,例如,对“www.wikipedia.org”的查询被转介到 org 服务器。解析器现在查询所引用的服务器,并反复重复此过程,直到收到权威答案。该图说明了由完全合格域名“www.wikipedia.org”命名的主机的此过程。
如果互联网上的每一次解析都需要从根开始,这种机制将给根服务器带来巨大的流量负担。实际上,DNS服务器使用缓存来减轻根服务器的负担,因此,根名称服务器实际上只涉及所有请求的一小部分。