两个 DNS 服务器之间的查询

两个 DNS 服务器之间的查询

我一直在努力理解 BIND9 的 DNS。

我使用了两台机器 A 和 B,它们通过 LAN 连接,并不供全球使用。

A 正在运行一个管理“example”域和名为“www”的 Web 服务器的名称服务器。

B 正在运行一个名称服务器,该名称服务器管理“sub.example”域作为子域,并由 A 委派,并且也管理名为“www”的 Web 服务器。

配置文件如下。

机器 A 上的“named.conf”为“示例”。

options {
            directory "C:\dns\etc"; 
            recursion yes; 
            version "XXX DNS Server 1.0X";

};
logging {
        channel my_file {
        file "c:\dns\etc\named.run" versions 5 size 1m;
        severity debug 0;
        print-category yes;
        print-severity yes;
        print-time yes;
        };
        category default {my_file;};
        category queries {my_file;};
        category lame-servers {my_file;};
        category config {my_file;};
};


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

zone "localhost" {
            type master;
            file "localhost/fwd";
            allow-update { none; };

};
zone "0.0.127.in-addr.arpa" {
            type master;
            file "localhost/rev";
            allow-update { none; };
};
zone "example" {
            type master;
            file "example/fwd";
            allow-update { none; };  

};
zone "72.11.16.172.in-addr.arpa" {
            type master;
            file "example/rev";
            allow-update { none; };
};

机器 A 上的“区域文件”作为“示例”。

$TTL 1H
@ 1H    IN SOA example. postmaster.example. (
    200508291  ; Serial
          15M  ; Refresh
           5M  ; Retry
           1D  ; Expire
          15M) ; TTL

        IN  NS  ns.example.
        IN  A   172.16.11.72
ns      IN  A   172.16.11.72
www     IN  A   172.16.11.72

sub     IN  NS  ns.sub.example.
ns.sub.example. IN  A   172.16.10.37

机器 B 上的“named.conf”为“示例”。

options {
            directory "C:\dns\etc"; 
            recursion yes; 
            version "unknown";
            allow-transfer {172.16.11.72; };

};
logging {
        channel my_file {
        file "c:\dns\etc\named.run" versions 5 size 1m;
        severity debug 0;
        print-category yes;
        print-severity yes;
        print-time yes;
        };
        category default {my_file;};
        category queries {my_file;};
        category lame-servers {my_file;};
        category config {my_file;};
};



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

zone "localhost" {
            type master;
            file "localhost/fwd";
            allow-update { none; };

};
zone "0.0.127.in-addr.arpa" {
            type master;
            file "localhost/rev";
            allow-update { none; };
};
zone "sub.example" {
            type master;
            file "example/fwd";
            allow-update { none; };
};
zone "37.10.16.172.in-addr.arpa" {
            type master;
            file "example/rev";
            allow-update { none; };
}; 
zone "example" {
    type forward;
    forward only;
    forwarders {
        172.16.11.72;
    };
};

机器 B 上的“sub.example”的“区域文件”。

$TTL 1H
@ 1H    IN SOA sub.example. postmaster.sub.example. (
    200508291  ; Serial
          15M  ; Refresh
           5M  ; Retry
           1D  ; Expire
          15M) ; TTL

        IN  NS  ns.sub.example.
        IN  A   172.16.10.37
ns      IN  A   172.16.10.37
www     IN  A   172.16.10.37

现在我在两台机器上有四台服务器,如下所示。

"ns.example"  and "www.example"   in machine A.

"ns.sub.example" and  "www.sub.example" in machine B.

我可以解析来自 A 的“www.example”和来自 B 的“www.sub.example”。

但是我无法解析来自 A 的“www.sub.example”和来自 B 的“www.example”。

dig 命令显示的消息和写入 BIND 日志的消息位于底部。

A 和 B 都响应“SERVFAIL”或“连接超时;无法访问服务器”,但 BIND 的日志中没有错误消息。

实际上它们是 Windows2008 服务器,我已经更改了 Windows 防火墙过​​滤器以相互接受 UPD 53 端口。

奇怪的是,防火墙日志 A 和 B 中都没有 DROP 消息,甚至也没有 ALLOW 消息。

我的意思是,如果我从 AI 挖掘“www.example”,可以看到 ALLOW 消息,但如果我挖掘“www.sub.exaple”,我看不到 ALLOW 和 DROP 消息。

我想我必须将此问题归类为由 BIND 引起或由 Windows 防火墙引起。

我首先要做什么?

例如,我猜想 DNS 查询无法发送到名称服务器的另一台机器。这就是 dig 显示“无法访问任何服务器”消息的原因。

我如何检查 DNS 查询是否已发送以及未发送的原因?

在机器 A 处挖掘。

C:\dns\bin>dig www.sub.example

; <<>> DiG 9.9.2-P1 <<>> www.sub.example
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 1777
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.sub.example.               IN      A

;; Query time: 0 msec
;; SERVER: 172.16.11.72#53(172.16.11.72)
;; WHEN: Wed Mar 13 08:42:04 2013
;; MSG SIZE  rcvd: 44

C:\dns\bin>dig @172.16.10.37 www.sub.example. a

; <<>> DiG 9.9.2-P1 <<>> @172.16.10.37 www.sub.example. a
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

在机器 B 处挖掘。

C:\dns\bin>dig www.example

; <<>> DiG 9.9.2-P1 <<>> www.example
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 39790
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:
;www.example.                   IN      A

;; Query time: 4015 msec
;; SERVER: 172.16.10.37#53(172.16.10.37)
;; WHEN: Wed Mar 13 09:40:31 2013
;; MSG SIZE  rcvd: 40

C:\dns\bin>dig @172.16.11.72 www.example. a

; <<>> DiG 9.9.2-P1 <<>> @172.16.11.72 www.example
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

BIND 的日志在 A。

13-Mar-2013 14:43:22.624 general: info: managed-keys-zone: loaded serial 0
13-Mar-2013 14:43:22.624 general: info: zone 72.11.16.172.in-addr.arpa/IN: loaded serial 200508291
13-Mar-2013 14:43:22.624 general: info: zone 0.0.127.in-addr.arpa/IN: loaded serial 200508291
13-Mar-2013 14:43:22.624 general: info: zone example/IN: loaded serial 200508291
13-Mar-2013 14:43:22.624 general: info: zone localhost/IN: loaded serial 200508291
13-Mar-2013 14:43:22.624 general: notice: all zones loaded
13-Mar-2013 14:43:22.624 general: notice: running
13-Mar-2013 14:43:22.624 notify: info: zone example/IN: sending notifies (serial 200508291)
13-Mar-2013 14:43:22.624 notify: info: zone 72.11.16.172.in-addr.arpa/IN: sending notifies (serial 200508291)
13-Mar-2013 14:44:34.515 queries: info: client 172.16.11.72#58221 (www.sub.example): query: www.sub.example IN A +E (172.16.11.72)
13-Mar-2013 14:44:39.515 queries: info: client 172.16.11.72#58221 (www.sub.example): query: www.sub.example IN A +E (172.16.11.72)
13-Mar-2013 14:44:44.515 queries: info: client 172.16.11.72#58221 (www.sub.example): query: www.sub.example IN A +E (172.16.11.72)

BIND 在 B 处的日志

13-Mar-2013 14:38:27.281 general: info: managed-keys-zone: loaded serial 0
13-Mar-2013 14:38:27.281 general: info: zone 0.0.127.in-addr.arpa/IN: loaded serial 200508291
13-Mar-2013 14:38:27.281 general: info: zone 37.10.16.172.in-addr.arpa/IN: loaded serial 200508291
13-Mar-2013 14:38:27.281 general: info: zone sub.example/IN: loaded serial 200508291
13-Mar-2013 14:38:27.281 general: info: zone localhost/IN: loaded serial 200508291
13-Mar-2013 14:38:27.296 general: notice: all zones loaded
13-Mar-2013 14:38:27.296 general: notice: running
13-Mar-2013 14:38:27.296 notify: info: zone sub.example/IN: sending notifies (serial 200508291)
13-Mar-2013 14:38:27.296 notify: info: zone 37.10.16.172.in-addr.arpa/IN: sending notifies (serial 200508291)
13-Mar-2013 14:46:08.984 queries: info: client 172.16.10.37#58326 (www.sub.example): query: www.sub.example IN A +E (172.16.10.37)
13-Mar-2013 14:46:11.250 queries: info: client 172.16.10.37#58330 (www.example): query: www.example IN A +E (172.16.10.37)
13-Mar-2013 14:46:17.250 queries: info: client 172.16.10.37#58330 (www.example): query: www.example IN A +E (172.16.10.37)

答案1

有几件事我可以提出建议。

首先,您在失败的挖掘中得到的返回代码是 SERVFAIL。这可能有多种原因,但您首先要排除的是某些东西阻止了机器之间的名称查询。我知道您说您已经关闭了端口 53 UDP 的 Windows 防火墙规则,但我建议您(至少向自己)演示机器 B 可以执行“dig @machine-a www.example. a”并得到您期望的答案。然后检查机器 A 是否可以查询机器 B 上的服务器。

除此之外,查看您的 named.conf 和命名正在记录的任何消息将非常有帮助。向我们显示 named.conf 将使我们能够检查您的区域是否正确指定(区域文件中的大多数 RR 都与区域原点相关,因此查看区域的加载方式很重要,这样我们才能知道原点到底是什么......)并将帮助我们确定其中一台或两台机器是否应该执行递归。

请提供更多信息;这将使我们更容易确定发生了什么。

编辑:

您提供的 dig 输出确实听起来像服务器没有接收来自其他机器的请求:

; <<>> DiG 9.9.2-P1 <<>> @172.16.10.37 www.sub.example. a
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

; <<>> DiG 9.9.2-P1 <<>> @172.16.11.72 www.example
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

这看上去很重要,你不觉得吗?

答案2

假设两个域名都没有正确注册,因为您说它们不用于“全球使用”,我会说您的服务器彼此不认识,并且它们也没有有关域名和子域名的信息。

您必须在 A 上创建一个委托子句,以告知 DNS 的位置sub.example。并在 B 上创建一个转发子句,以将查询重定向到example

相关内容