绑定DNS递归缓慢


9

我们刚刚使用绑定9.10的最新稳定版本设置了递归DNS服务器。

我们发现递归DNS查找非常慢。1-3秒之间的任何时间。一旦在缓存中查找,DNS就会按预期在几毫秒内解决。

我们将ROOT提示用于递归查找,这似乎是缓慢的原因。如果我们配置了转发器,则DNS解析会降低到100-300ms的合理递归时间。

对于我们要设置的服务,我不想依赖转发器,而是希望使用root提示。

这是我们named.conf文件的主要配置。任何有助于提高性能的指标都将非常有用。

options{
allow-recursion  { any; };
allow-query-cache  { any; };
allow-query  { any; };

listen-on  port 53  { any; };
listen-on-v6  port 53  { any; };

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

zone-statistics yes;
max-cache-ttl 3600;
max-ncache-ttl 3600;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";

directory  "/var/named";
dump-file  "/var/named/data/cache_dump.db";
statistics-file  "/var/named/stats/named_stats.txt";
memstatistics-file  "/var/named/stats/named_mem_stats.txt";

rate-limit {
    responses-per-second 10;
    log-only yes;
};

prefetch 5;};

zone "." {
type hint;
file "named.ca";};

include "/var/named/conf/logging.conf";

5
我将使用tcpdump来查看缓慢请求期间的实际情况。
yoonix

日志中有什么?
哈坎·林奎斯特

Answers:


6

我们发现了问题。这是一个NIC硬件卸载问题。

运行中tcpdump -vvv -s 0 -l -n port 53发现[bad udp cksum 6279!]每个DNS查询都有一些错误。

在Google上进行的一点浏览就为我指明了正确的方向。事实证明,由于我们的CentOS系统在XenServer上作为VM运行(与VMWare等类似的问题报告),默认情况下启用了NIC硬件卸载。

运行ethtool -k eth0 | grep on显示以下内容

x-checksumming: on
tx-checksum-ipv4: on
scatter-gather: on
tx-scatter-gather: on
tcp-segmentation-offload: off
tx-tcp-segmentation: off
tx-tcp-ecn-segmentation: off
tx-tcp6-segmentation: off
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
tx-gso-robust: on [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]

运行ethtool -K eth0 tx off rx off禁用的TCP TX卸载。我已很好地重新启动了网络服务

service network restart

并测试了BIND。现在,BIND的响应时间非常快

dig centos.org

; <<>> DiG 9.10.2-P4-RedHat-9.10.2-P4.el6 <<>> centos.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61933
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;centos.org.INA

;; ANSWER SECTION:
centos.org.60INA85.12.30.227

;; Query time: 268 msec
;; SERVER: 192.168.10.25#53(192.168.10.25)
;; WHEN: Thu Sep 17 08:25:39 AEST 2015
;; MSG SIZE  rcvd: 55

2

我在物理CentOS 7 BIND服务器上进行非常慢的递归查询时遇到了相同的问题,发现了这个答案(TX卸载)以及围绕各个线程的许多面向IPv6的修复程序,但这些都不对我有用。

事实证明,所讨论服务器的位置具有较旧的Cisco ASA防火墙,该防火墙将UDP响应数据包的大小限制为512字节。如今,DNS查询的UDP响应似乎通常要大得多,最多约2000个字节。这里有一个关于它的页面:

为什么通过UDP的DNS限制为512字节?

我将ASA配置为允许较大的UDP响应数据包(对此有一个特定的fixup命令),从而解决了该问题:

https://supportforums.cisco.com/t5/getting-started-with-lans/dns-dropped-because-packets-to-big-for-configured-512/td-p/861718

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.