内部DNS配置困难

时间:2008-10-21 22:00:14

标签: dns bind dig

好吧,我将在前面说明这个问题可能过于复杂(细节数量不复杂)。但我认为这是最好的起点。

我正在尝试设置概念验证项目,而我的BIND配置是我的第一个重大障碍。我想在3个物理盒子上设置3个DNS服务器。这些框中的需要解析公共地址,这只是内部 。我已经阅读了如何在(大多数)优秀的DNS& BIND第5版。但我对他们的例子的翻译不起作用。所有IP都是RFC 1918不可路由的。

方框1将对 box1.bogus 域中的地址具有权威性,而方框2将对 box2.bogus 域上的地址具有权威性。框3将充当域 bogus 的内部根和TLD服务器。

目前尚未解决的问题:

  • 我在方框1和2上有一个提示文件,其中包含一个 NS 记录到根区域的NS定义。此外,还有一个 A 记录,可将NS转换为根的ip。如果我从方框1 dig .获得带有NS名称的权限部分,而不是答案其他记录部分。因此,我无法从方框1中实际解析根服务器的IP。

  • 如果我将/etc/resolv.conf从方框1直接指向根服务器并执行dig box1.bogus,我会收到ns.box1.bogus answer 记录附加部分中的翻译。但是在下一次迭代中(何时应该获得A记录)我得到dig: couldn't get address for ns.box1.bogus

显然我的配置正确。我没有看到将这些帖子附加到这篇文章的方法,所以如果人们想要逐步完成这一步,我会把它们加入到对这个问题的评论中。否则,我愿意与“DNS人”一起“离线”,以找出我错过了'。'的地方。或者有太多了!

我个人认为网络可以使用另一个不使用Movie-U示例的内部根示例。

好的,如果我们要这样做,那么我们应该使用一个具体的例子吗?我在私有VLAN上设置了3台机器来进行测试。作为一个完整性检查,我将所有相关配置配对,在能够时压缩,并重新部署2个名称服务器。我现在遗漏了Scratchy。与上述结果相同。这是配置和初始挖掘输出。


虚假

Machine Name: Bogus (I just realized I should change this...)  
Role:         Internal Root and TLD Nameserver  
IP:           10.0.0.1  
BIND:         9.5.0-16.a6.fc8  

的/etc/named.conf

// Controls who can make queries of this DNS server. Currently only the
// local test bed. When there is a standardized IP addr scheme, we can have
// those addr ranges enabled so that even if firewall rules get broken, the
// public internet can't query the internal DNS.
//
acl "authorized" {
        localhost;      // localhost
        10.0.0.0/24;          // Local Test
};

options {
    listen-on port 53 {
        127.0.0.1;
        10.0.0.1;
    };
    listen-on-v6 port 53 { ::1; };
    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";
    pid-file    "/var/run/named/named.pid";
    allow-query     { any; };
    recursion no;
};

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

//
// The fake root.
//
zone "." {
    type master;
    file "master/root";
    allow-query { authorized; };
};

//
// The TLD for testing
//
zone "bogus" {
    type master;
    file "master/bogus";
    allow-query { authorized; };
    allow-transfer { authorized; };
};

/ var / named / master / root

$TTL    3600
.                   SOA ns.bogustld. hostmaster.internal.bogus. (
                        2008101601  ; serial
                        1H      ; refresh
                        2H      ; retry
                        14D     ; expire
                        5M )        ; minimum
;
; Fake root zone servers defined.
;
.                   NS  ns.bogustld.
ns.bogustld.        A   10.0.0.1
;
; Testing TLD
;
bogus           NS  ns1.bogus.
ns1.bogus.              A   10.0.0.1

的/ var /名为/主/假

$TTL 3600
@           SOA ns1.internal.bogus. hostmaster.internal.bogus. (
                2008102201  ; serial date +seq
                1H      ; refresh
                2H      ; retry
                14D     ; expire
                5M)     ; min TTL
;
            NS  ns1.internal.bogus.
;
; Auth servers
;
ns1.internal.bogus. A   10.0.0.1
;
; Customer delegations each customer 2nd level domain has it's
; own zone file.
;
;Modified to be unique nameservers in the bogus domain
itchy           NS  ns1-itchy.bogus.
ns1-itchy.bogus.    A   10.0.0.2
;
scratchy        NS  ns1-scratchy.bogus.
ns1-scratchy.bogus. A   10.0.0.3

挖掘输出

; <<>> DiG 9.5.0-P2 <<>> .
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57175
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;.                              IN      A

;; AUTHORITY SECTION:
.                       300     IN      SOA     ns.bogustld. hostmaster.internal
.bogus. 2008101601 3600 7200 1209600 300

;; Query time: 1 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: Tue Oct 21 12:23:59 2008
;; MSG SIZE  rcvd: 88

来自dig + trace itchy.bogus

的输出
; <<>> DiG 9.5.0-P2 <<>> +trace itchy.bogus
;; global options:  printcmd
.                       3600    IN      NS      ns.bogustld.
;; Received 57 bytes from 10.0.0.1#53(10.0.0.1) in 1 ms

itchy.bogus.            3600    IN      NS      ns1-itchy.bogus.
;; Received 69 bytes from 10.0.0.1#53(ns.bogustld) in 0 ms

itchy.bogus.            3600    IN      A       10.0.0.2
itchy.bogus.            3600    IN      NS      ns1.itchy.bogus.
;; Received 79 bytes from 10.0.0.2#53(ns1-itchy.bogus) in 0 ms

发痒

Machine Name: Itchy   
Role:         SLD Nameserver (supposed to be owner of itchy.bogus) 
IP:           10.0.0.2  
BIND:         9.5.0-16.a6.fc8  

的/etc/named.conf

// Controls who can make queries of this DNS server. Currently only the
// local test bed. When there is a standardized IP addr scheme, we can have
// those addr ranges enabled so that even if firewall rules get broken, the
// public internet can't query the internal DNS.
//
acl "authorized" {
        localhost;      // localhost
        10.0.0.0/24;          // LAN Test
};

options {
    listen-on port 53 {
        127.0.0.1;
        10.0.0.2;
    };
    listen-on-v6 port 53 { ::1; };
    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";
    pid-file    "/var/run/named/named.pid";
    allow-query     { any; };
    recursion no;
};

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

zone "." IN {
    type hint;
    file "master/root.hint";
 };

zone "itchy.bogus" {
    type master;
    file "master/itchy.bogus";
    allow-query { authorized; };
    allow-transfer { authorized; };
};

/var/named/master/itchy.bogus

$TTL    3600
@       SOA     ns1.itchy.bogus. hostmaster.itchy.bogus. (
                2008102202  ; serial
                1H      ; refresh
                2H      ; retry
                14D     ; expire
                5M )        ; minimum
;
        A   10.0.0.2
        NS      ns1.itchy.bogus.
ns1     A   10.0.0.2

/var/named/master/root.hint

.                        3600000      NS    ns.bogustld.
ns.bogustld.         3600000       A    10.0.0.1
; End of File

的/etc/resolv.conf

nameserver 10.0.0.2

挖掘输出

; <<>> DiG 9.5.0-P2 <<>> .
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31291
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;.                              IN      A

;; AUTHORITY SECTION:
.                       3600000 IN      NS      ns.bogustld.

;; Query time: 0 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Tue Oct 21 17:09:53 2008
;; MSG SIZE  rcvd: 41

来自dig + trace itchy.bogus

的输出
; <<>> DiG 9.5.0-P2 <<>> +trace itchy.bogus
;; global options:  printcmd
.                       3600000 IN      NS      ns.bogustld.
;; Received 41 bytes from 10.0.0.2#53(10.0.0.2) in 0 ms

dig: couldn't get address for 'ns.bogustld': failure

8 个答案:

答案 0 :(得分:1)

通过使用@,您将定义itchy.bogus。然后,您无法使用itchy.bogus行在区域中进一步重新定义它。

试试这个:

@       SOA     ns1.itchy.bogus. hostmaster.itchy.bogus. (
                        2008102201      ; serial
                        1H              ; refresh
                        2H              ; retry
                        14D             ; expire
                        5M )            ; minimum
;
            NS      ns1
            A       10.0.0.2
    ns1     A       10.0.0.2

因为这是itchy.bogus的区域文件,所以应该做正确的事。

答案 1 :(得分:0)

假设您已经检查了所有明显的事情 - 例如确保主绑定配置文件是您认为的那样。首先检查您认为名称所使用的是正确的 - 有时可以很容易地编辑错误目录中的文件,并想知道为什么没有注意到更改。

您还使用了named-checkconf和named-checkzone

调试绑定很难,但是看不到配置文件几乎是不可能的,所以请将它们添加到原始帖子中。

(我已添加此作为对该问题的评论 - 我发布了答案,因为OP在这里是新的)。

答案 2 :(得分:0)

3台服务器中的每台服务器都需要具有相同的提示文件。它应该具有“。”的NS记录。使用根服务器的名称和该名称的A记录。

根服务器应该有“。”区域设置。 “。”区域需要具有“伪造”并具有自己的ns记录。然后它应该有一个box1.bogus的a记录转到box1,box2.bogus转到box2。

请注意,您不应将box1和box2用作主机名和二级域名。假设域名是zone1.bogus和zone2.bogus。

所以box1和box2应该在虚假区域,并且有A记录。 zone1和zone2应该是指向box1和box2的NS记录。

清除泥土? :)

答案 3 :(得分:0)

确定。我看到你已经给了你的配置。优异。

我会这样改变根区域:

;Should this be ns1.itchy.bogus or ns1.itchy.internal.bogus??
itchy                   NS      ns1-itchy.bogus.
ns1-itchy.bogus.    A   10.0.0.2
;
scratchy        NS      ns1-scratchy.bogus.
ns1-scratchy.bogus. A   10.0.0.3

我认为问题在于你是在委托itchy.bogus,所以你不能把名字放在那里。

我认为,“com”名称服务器使用提示,以便它们可以为委派区域的名称服务器提供A记录,但在您的情况下,确保所提供的任何给定区域仅具有子组的授权更为清晰 - 当前区域内的区域和主机。

答案 4 :(得分:0)

现在我的代表团问题看起来已经解决,但我仍然遇到根查找问题(我认为这很容易。)

我认为问题源于这样一个事实:当我从痒机器dig获得权威记录而不是答案记录时。我只是不确定我做了什么(或没有做到)。

如果您使用典型的互联网提示文件从机器上“挖掘[no args]”,您将获得根名称服务器和附加部分中的翻译的答案块。

如果我从虚假机器(root和TLD名称服务器)那样做,我得到

;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       3600    IN      NS      ns.bogustld.

;; ADDITIONAL SECTION:
ns.bogustld.            3600    IN      A       10.0.0.1

如果我从发痒的机器上做到这一点我

;; QUESTION SECTION:
;.                              IN      NS

;; AUTHORITY SECTION:
.                       3600000 IN      NS      ns.bogustld.

;; Query time: 0 msec

如果你尝试dig +trace .

,会更有趣

互联网盒

; <<>> DiG 9.5.0a6 <<>> +trace .
;; global options:  printcmd
.                       3005    IN      NS      C.ROOT-SERVERS.NET.
.                       3005    IN      NS      D.ROOT-SERVERS.NET.
.                       3005    IN      NS      E.ROOT-SERVERS.NET.
.                       3005    IN      NS      F.ROOT-SERVERS.NET.
.                       3005    IN      NS      G.ROOT-SERVERS.NET.
.                       3005    IN      NS      H.ROOT-SERVERS.NET.
.                       3005    IN      NS      I.ROOT-SERVERS.NET.
.                       3005    IN      NS      J.ROOT-SERVERS.NET.
.                       3005    IN      NS      K.ROOT-SERVERS.NET.
.                       3005    IN      NS      L.ROOT-SERVERS.NET.
.                       3005    IN      NS      M.ROOT-SERVERS.NET.
.                       3005    IN      NS      A.ROOT-SERVERS.NET.
.                       3005    IN      NS      B.ROOT-SERVERS.NET.
;; Received 500 bytes from 64.105.172.26#53(64.105.172.26) in 19 ms

.                       86400   IN      SOA     a.root-servers.net. nstld.verisi
gn-grs.com. 2008102201 1800 900 604800 86400
;; Received 92 bytes from 128.63.2.53#53(H.ROOT-SERVERS.NET) in 84 ms

我的内部根盒(Bogus)

; <<>> DiG 9.5.0-P2 <<>> +trace .
;; global options:  printcmd
.                       3600    IN      NS      ns.bogustld.
;; Received 57 bytes from 10.0.0.1#53(10.0.0.1) in 1 ms

.                       3600    IN      NS      ns.bogustld.
;; Received 72 bytes from 10.0.0.1#53(ns.bogustld) in 0 ms

发痒

; <<>> DiG 9.5.0-P2 <<>> +trace .
;; global options:  printcmd
.                       3600000 IN      NS      ns.bogustld.
;; Received 41 bytes from 10.0.0.2#53(10.0.0.2) in 0 ms

dig: couldn't get address for 'ns.bogustld': failure

为什么我面向互联网的机器会找到SOA,但我的内部机器都没有?

答案 5 :(得分:0)

像高地人一样,只能有一个。

通过使用正常的互联网根提示,您或多或少地无法使用自己的内部根,因为没有真正的互联网根服务器知道“虚假”。

你唯一的选择是镜像根“。”区域从你的“。”,然后添加“伪”到它。您可以通过定期转储根区域并通过某些处理运行它来向其添加自定义区域来执行此操作。

一些备用DNS根提供商会这样做,但是他们为他们的“客户”提供了根提示,使其根本不会引用“真正的”根服务器。

......我是否正确理解了这个问题?不确定。

答案 6 :(得分:0)

挖掘。 @ 10.0.0.1(假)应该返回'。'的权威记录,因为它确实对该区域具有权威性。

挖掘。 @ 10.0.0.2(itchy)不应该返回'。'的权威记录,因为它不是。当您第一次在根区域中查询名称时,可能返回权威记录,因为它必须从权威服务器递归并获取权威记录。但如果你第二次这样做,你将得到一个缓存的结果,'aa'标志将是清楚的。

答案 7 :(得分:0)

您的名称服务器不会使用提示来为dig提供答案。也就是说,它不会将提示重新作为答案。它将坚持实际查询bogustld的10.0.0.1。我不认为你把bogustld设置为一个区域,只是虚假。

您应该将ns.bogustld更改为ns.bogus。将10.0.0.1命名为ns.bogus。

或者,您可以添加NS和SOA记录。对于bogustld。

如果你挖掘ns1.bogus。 @ 10.0.0.2,这是正常的(假设上面的配置仍然存在)?