Bind 似乎收到了查询的响应,但随后却没有对其执行任何操作

Bind 似乎收到了查询的响应,但随后却没有对其执行任何操作

基本上,

我正在尝试设置一个指向另外两个内部 DNS 服务器的 DNS 服务器。

内部 DNS 服务器:192.168.0.4 // 192.168.0.5 我的盒子:192.168.97.6 .. 名称是 kerrigan.zipp

我已经配置了绑定,客户端可以访问内部地址,但似乎无法获取任何外部地址。

[root@zeratul ~]# ping kerrigan.zipp
-- Ping succeeds --

[root@zeratul ~]# ping google.com
ping: unknown host google.com

在对 Kerrigan.zipp 执行 tcpdump 时,我可以看到对 google.com 的请求正在向 dns1 (192.168.0.4) 发出,并且返回了答复。

15:30:37.775949 IP kerrigan.zipp.50825 > dns1.internal.box.domain: 13756+ A? google.com. (28)
15:30:37.776383 IP dns1.internal.box.domain > kerrigan.zipp.50825: 13756 4/13/8 A 72.14.204.99, A 72.14.204.103, A 72.14.204.104, A 72.14.204.147 (491)

看起来好像 kerrigan.zipp 收到了回复,但没有对它们做任何事情。如果我使用 dns1 返回的 ip 地址,我可以毫无问题地 ping 它。

[root@zeratul ~]# ping 72.14.204.99
-- Ping succeeds --

有什么想法吗?哦,为了确保万无一失,我关闭了防火墙。端口 53 tcp/udp 已打开。

dig 命令的结果.. 这些表明我可以从我的正向 DNS 获取它,但不能从我的新本地 DNS 获取它:

[root@kerrigan named]# dig @192.168.0.4 google.com

; <<>> DiG 9.7.3-RedHat-9.7.3-1.fc14 <<>> @192.168.0.4 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33681
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 13, ADDITIONAL: 8

;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     256 IN  A   72.14.204.104
google.com.     256 IN  A   72.14.204.147
google.com.     256 IN  A   72.14.204.99
google.com.     256 IN  A   72.14.204.103

;; Query time: 1 msec
;; SERVER: 192.168.0.4#53(192.168.0.4)
;; WHEN: Wed Mar  2 16:33:26 2011
;; MSG SIZE  rcvd: 491

[root@kerrigan named]# dig @127.0.0.1 google.com

; <<>> DiG 9.7.3-RedHat-9.7.3-1.fc14 <<>> @127.0.0.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 61769
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.            IN  A

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Mar  2 16:33:36 2011
;; MSG SIZE  rcvd: 28

答案1

尝试使用 host 命令查看服务器返回的内容。该命令host google.com dns1.internal.box.domain将告诉您dns1.internal.box.domain相信的地址google.com是什么。(Google 应该有多个地址,大多数网站都有一个。)在您的每个 DNS 服务器上尝试此操作。

也可以尝试getent hosts google.com。这将提供 google.com 地址的解析器版本。您应该会得到所有四个命令大致相同的结果。

编辑:要运行主机命令,您可能需要安装bind9-host包以获取host命令。但是,它通常由其他包安装。

EDIT2:如果其中一个 DNS 服务器未向您返回结果,请检查其安全设置。您可能还想暂时启用 DNS 服务器上的日志记录。以下是我在绑定服务器上使用的日志记录规范块。

记录 {
        通道查询.log {
                文件“/var/log/query.log”;

                // 将严重性设置为动态以查看所有调试消息。
                严重性调试 3;
        };

        // 选择性地启用日志记录
        类别默认 { query.log; };
        类别一般 { query.log; };
        类别客户端 { query.log; };
        类别不匹配 { query.log; };
        类别网络 { query.log; };
        类别查询 { query.log; };
        类别安全 { query.log; };
        类别调度 { query.log; };
        类别仅委托 { query.log; };
};

答案2

嗯,我明白了。

/var/log/messages 显示以下内容:

Mar  2 21:35:32 kerrigan named[8138]: error (broken trust chain) resolving 'google.com/A/IN': 192.168.0.4#53

所以我认为 dnssec 出了问题。之前我已将其注释掉;我在 /etc/named.conf 中将其明确设置为“no”

dnssec-enable no;
dnssec-validation no;

我的客户端可以访问管道间并 ping 我的绑定服务器的主区域。>:3

答案3

最常见的原因是信任链断裂是您的机器上的时间明显错误。BIND 的作者选择默认打开 DNSSEC,因此最好修复时间问题,而不是关闭 DNSSEC。因此:

  • date -s通过使用或手动设置服务器上的日期来临时解决问题ntpdate <ip-address>
  • 如果你没有安装、配置 NTP 并将其设置为开机启动,请立即执行
  • 如果你这样做了但你的时钟仍然不对,请找出原因。

如果您已使用通过 DNS 名称访问的时间源配置了 NTP,并且您的 NTP 使用出现故障的 DNS 服务器作为其 DNS,那么您最终会陷入恶性循环,即 DNS 因时间错误而出现故障,而 NTP 因 DNS 故障而无法更正时间。例如,当我重新启动家用 Raspberry Pi 路由器时,/var/log/daemon.log 中会出现以下内容:

Oct 20 05:23:00 pirouter ntpd_intres[579]: host name not found: 2.debian.pool.ntp.org

你可以:

  • 如果你的 Pi 没有 RTC 模块,请添加一个(默认情况下没有),允许它在关闭时保持时间(最便宜、最可靠的方法)
  • 为你的服务器添加一个 GPS 时间源(非常令人满意)
  • 选择一个上游时间源并通过 IP 引用它(只要该时间源保持其 IP 即可)

相关内容