Bind 仅在本地起作用 - Ping 在本地起作用,在外部不起作用

Bind 仅在本地起作用 - Ping 在本地起作用,在外部不起作用

我在 Centos 6.5 服务器上使用 Bind 将子域解析为 IP。

我有 *.ddns.example.com 和 ddns.example.com 通过 A 记录指向我的服务器。我为此添加了一个区域,请参阅 named.conf:

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

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

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
        };

logging {
    channel default_debug {
            file "data/named.run";
            severity dynamic;
    };
};


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

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";




zone "ddns.example.com" {
        type master;
        file "/var/named/ddns.example.com.hosts";
        };

这是我的 ddns.example.com.hosts 文件:

$ttl 38400
ddns.example.com.    IN      SOA     ns1.digitalocean.com. [email protected]. (
                    1414575123
                    10800
                    3600
                    604800
                    38400 )
ddns.example.com.    IN      NS      ns1.digitalocean.com.
bob.ddns.example.com.        IN      A       8.8.8.8

我已重新启动命名服务,在 ping 域 bob.ddns.example.com 时,我收到了来自 8.8.8.8 的回复,因此从本地服务器 ping 时记录工作正常。但是,在服务器外部(即另一个网络)ping 时,子域 bob.ddns.example.com 仍解析为配置了 bind 的服务器的 IP。

我已经完全停止了 iptables 以排除这种情况,但结果是一样的,Bind 服务器的 IP 是从子域解析的,而不是预期的 8.8.8.8。我已按照其他一些帖子的建议设置了以下选项:

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

我是否需要设置其他选项来允许从外部进行解析?或者我是否完全忽略了一些东西?

该域实际上是一个.es域,因此我将在此处如此引用它。

以下是一个例子dig +trace bob.ddns.example.es

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> +trace bob.ddns.example.es
;; global options: +cmd
.                       518304  IN      NS      e.root-servers.net.
.                       518304  IN      NS      b.root-servers.net.
.                       518304  IN      NS      f.root-servers.net.
.                       518304  IN      NS      i.root-servers.net.
.                       518304  IN      NS      d.root-servers.net.
.                       518304  IN      NS      g.root-servers.net.
.                       518304  IN      NS      h.root-servers.net.
.                       518304  IN      NS      m.root-servers.net.
.                       518304  IN      NS      l.root-servers.net.
.                       518304  IN      NS      k.root-servers.net.
.                       518304  IN      NS      c.root-servers.net.
.                       518304  IN      NS      j.root-servers.net.
.                       518304  IN      NS      a.root-servers.net.
;; Received 228 bytes from 127.0.0.1#53(127.0.0.1) in 608 ms

es.                     172800  IN      NS      ns1.cesca.es.
es.                     172800  IN      NS      ns-ext.nic.cl.
es.                     172800  IN      NS      ns15.communitydns.net.
es.                     172800  IN      NS      ns3.nic.fr.
es.                     172800  IN      NS      sns-pb.isc.org.
es.                     172800  IN      NS      a.nic.es.
es.                     172800  IN      NS      f.nic.es.
;; Received 461 bytes from 192.36.148.17#53(192.36.148.17) in 1540 ms

example.es.                 86400   IN      NS      ns1.tsohost.co.uk.
example.es.                 86400   IN      NS      ns2.tsohost.co.uk.
;; Received 84 bytes from 192.134.0.49#53(192.134.0.49) in 120 ms

bob.ddns.example.es.      1       IN      A       178.62.171.XXX
;; Received 51 bytes from 95.142.155.4#53(95.142.155.4) in 20 ms

以下是命令 dig @127.0.0.1 bob.ddns.example.es 的输出

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> @127.0.0.1 bob.ddns.example.es
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11646
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;bob.ddns.example.es.               IN      A

;; ANSWER SECTION:
bob.ddns.example.es.        1       IN      A       8.8.8.8

;; AUTHORITY SECTION:
ddns.example.es.            1       IN      NS      ns1.digitalocean.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 30 04:55:19 2014
;; MSG SIZE  rcvd: 83

以下是该命令的输出dig @8.8.8.8 bob.ddns.example.es

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> @8.8.8.8 bob.ddns.example.es
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35748
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;bob.ddns.example.es.               IN      A

;; ANSWER SECTION:
bob.ddns.blu.es.        0       IN      A       178.62.171.XXX

;; Query time: 55 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Oct 30 04:56:48 2014
;; MSG SIZE  rcvd: 49

还请注意,该域名是在 Godaddy 注册的。在 Godaddy 上,我们将 ns1.tsohost.co.uk 设置为名称服务器。在这里,我们在 tsohost 托管包上提供网站(即 example.es 和 www.example.es)。在 tso 上,我们为 ddns.example.es 和 *.ddns.example.es 创建了一条 A 记录,以转到数字海洋服务器,即 178.62.171.XXX,我们希望在此服务器上操纵这些域的 IP 地址。

答案1

根据显示的dig +trace输出,最可能的原因是到达面向互联网的 IP 的数据包没有被您认为的服务器进程接收。这可以通过以下CHAOS查询明确证明,该查询表明面向互联网的 IP 由 PowerDNS 守护程序管理。

$ dig @95.142.155.4 chaos txt version.bind

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @95.142.155.4 chaos txt version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24158
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;version.bind.                  CH      TXT

;; ANSWER SECTION:
version.bind.           5       CH      TXT     "PowerDNS Authoritative Server 3.3.1     ([email protected] built 20131217140448 [email protected])"

;; Query time: 97 msec
;; SERVER: 95.142.155.4#53(95.142.155.4)
;; WHEN: Sat Nov  1 08:57:18 2014
;; MSG SIZE  rcvd: 158

除非您在其中一个包含文件中定义自定义version.bind字符串(这种可能性极小),否则互联网上的查询根本不会到达您的 BIND 服务器。


更进一步说,以下评论让我怀疑您可能没有正确配置以实现预期目的:

还请注意,该域名是在 Godaddy 注册的。在 Godaddy 上,我们将 ns1.tsohost.co.uk 设置为名称服务器。在这里,我们在 tsohost 托管包上提供网站(即 example.es 和 www.example.es)。在 tso 上,我们为 ddns.example.es 和 *.ddns.example.es 创建了一条 A 记录,以转到数字海洋服务器,即 178.62.171.XXX,我们希望在此服务器上操纵这些域的 IP 地址。

粗体强调是我的。如果您的目标是让面向互联网的 DDNS 正常工作,您需要使用记录NS而不是A记录指向您的 Digital Ocean 服务器。NS记录会告诉服务器,控制权ddns.example.es已委托给您的 BIND 名称服务器。会dig +trace遵循该引用并停在您的 BIND 名称服务器上,但显然并非如此。

附注:NS记录必须指向名称,而不是 IP 地址,因此A除了这些记录之外,您还需要为这些名称服务器创建记录NS

答案2

上述示例,至少在撰写本文时,显示出了相互矛盾的结果。我假设您正在更改主机名和 IP 地址以保护您的身份?这很好,但使得诊断问题变得非常困难。

因此,我的建议如下。首先确保您的 DNS 记录设置正确。

验证您的域名是否已在根服务器和 .es 域根服务器上正确注册。这显示在上面的第一次 dig +trace 结果中。据此,您的 dns 服务器

example.es.                 86400   IN      NS      ns1.tsohost.co.uk.
example.es.                 86400   IN      NS      ns2.tsohost.co.uk.

如果这些不正确,那么您的域名注册很可能有错误的名称服务器,因此您必须修复此问题。如果这些是正确的,那么当您查询它们时它们是否返回正确的答案?在您上面的 dig +trace 中,它们返回的是

bob.ddns.example.es.      1       IN      A       178.62.171.XXX

这是正确的吗? 我也会特别检查它们两个:

dig bob.ddns.blu.es @ns1.tsohost.co.uk +norecurse
dig bob.ddns.blu.es @ns2.tsohost.co.uk +norecurse

这将告诉您问题出在哪里。对于另外两个示例:

dig @127.0.0.1 bob.ddns.example.es
dig @8.8.8.8 bob.ddns.example.es

我不知道您从哪个主机运行它们(即在名称服务器还是其他主机上运行?),所以我帮不上什么忙。但是,当您运行 dig 时,请使用 +trace 选项,这样您就可以准确地知道哪里出了问题。

还请注意,该域名是在 Godaddy 注册的。在 Godaddy 上,我们将 ns1.tsohost.co.uk 设置为名称服务器。在这里,我们在 tsohost 托管包上提供网站(即 example.es 和 www.example.es)。在 tso 上,我们为 ddns.example.es 和 *.ddns.example.es 创建了一条 A 记录,以转到数字海洋服务器,即 178.62.171.XXX,我们希望在此服务器上操纵这些域的 IP 地址。

正如 AndrewB 注意到而我却没有注意到的,这看起来像是你的问题。如果你在 tsohost 名称服务器上有一个指向你的数字海洋服务器的 A 记录,那么你就是告诉它其 A 记录查询的最终答案是数字海洋名称服务器。DNS 将不会进一步查询数字海洋服务器 - 它已经得到了答案。相反,从 tsohost 中删除该 A 记录并告诉它将子域的请求委托给你的其他名称服务器。通过添加另一个委托给你的子域的原点和 NS 记录来执行此操作:

; sub-domain definitions
; zone fragment for ddns.example.com
$ORIGIN ddns.example.com.
; we define two name servers for the sub-domain
@             IN      NS     <name of your dns server>.

请注意,您的 DNS 服务器也必须专门在 GO DADDY 或您的注册商处注册为 DNS 服务器。 如何进行子域名委派

相关内容