带BIND的通配符DNS


14

我正在尝试设置BIND,以便它捕获对它的所有请求,并将它们指向一组特定的NS服务器和特定的A记录。

我大约有500个域,并且每天要以10-15个的速度添加新域,所以我不想为每个域明确添加区域。

我当前的设置是:在我的named.conf中,我有一个视图(命名为external),其中包含以下区域:

zone "." {
        type master;
        file "ext.zone";
};

这匹配所有请求。

ext.zone是:

$ TTL 3600
@ IN SOA。root.nsdomain.com。(
                              1个 序列号
                         3600; 刷新
                          300; 重试
                         3600; 到期
                         300); 负缓存TTL


        在NS ns1.example.com中
        在NS ns2.example.com中

ns1在A 192.0.2.4中
ns2在A 192.0.2.5中

*。在192.0.2.6中

因此,目标是:对于所有NS请求,return ns1.example.comns2.example.com 对于所有A请求,除非它在ns1.example.comor处ns2.example.com,return 192.0.2.6。为了ns1.example.com回报192.0.2.4,为了ns2.example.com回报192.0.2.5

这几乎可行,唯一的问题是当我进行挖掘时,我得到:

挖@localhost somedomain.example

; > DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3> @localhost somedomain.example
; (找到1个服务器)
;; 全局选项:printcmd
;; 得到了答案:
;; 操作码:QUERY,状态:NOERROR,ID:37733
;; 标志:qr aa rd;查询:1,答案:1,权限:2,附加:2

;; 问题部分:
; somedomain.example。在一个

;; 解答部分:
somedomain.example。3600 IN A 192.0.2.6 //符合预期

;; 权限部分:
。3600 IN NS ns1.example.com。//应该是,我不知道“。”是否 刚开始的时候很糟糕。
。3600 IN NS ns2.example.com。// 往上看。

;; 其他部分:
ns1.example.com。3600 IN A 192.0.2.6 //不应为192.0.2.4
ns2.example.com。3600 IN A 192.0.2.6 //不应为192.0.2.5

我该如何解决?我在做些可怕的事吗?有一个更好的方法吗?

Answers:


12

区域的来源.取决于您的配置。您正在为ns1.ns2.而不是ns1.example.com.和创建记录,ns2.example.com. 因为ns1.example.comns2.example.com未定义,它们由通配符匹配。

编辑:这是您的配置和区域的编辑:

zone "example.com." {
        type master;
        file "ext.zone";
};

外部区域:

$TTL    3600
@       IN      SOA     ns1 root (
                              1         ; Serial
                         3600         ; Refresh
                          300         ; Retry
                         3600         ; Expire
                         300 )        ; Negative Cache TTL


        IN      NS      ns1
        IN      NS      ns2
        IN      A       192.0.2.6


ns1     IN      A       192.0.2.4
ns2     IN      A       192.0.2.5

*      IN      A       192.0.2.6

区域中的所有内容都与命名配置中的区域名称有关,因此添加第二个区域仅指向同一文件:

zone "example.net." {
    type master;
    file "ext.zone";
};

我决定尝试在RR中指定完整域,因此我将ns1 IN A 1.2.3.4更改为ns1.nsdomain.com。在1.2.3.4中,此操作无效。现在,我所有的请求都返回SOA而不是NS / A。
乔恩·伍

您可以更新或添加新区域吗?
Cakemox

我为nsdomain.com添加了一个新区域,并保留了旧的“。” 区域。在nsdomain.com区域中,我添加了您的ext.zone(重命名为nsdomain.zone)。现在,对除nsdomain.com以外的任何域的请求均按预期方式工作,它们返回具有正确IP(1.2.3.4/1.23.5)的ns1.nsdomain.com/ns2.nsdomain.com。但是,对nsdomain.com的任何请求本身都会返回SOA,并且没有有效的响应:(。Close!
Jon Wu

您需要为顶点明确添加A记录。通配符不涵盖该范围。我将更新我的示例。
Cakemox

谢谢,那行得通!为什么必须在此区域中两次指定A位,而不是在“通配符”区域(我的原始外部区域“。”区域)中指定两次?有任何好的链接可以阅读有关此内容的信息?再次感谢!
Jon Wu

1

要在其中设置子域通配符,bind应使用以下格式:

name.tld.   IN  A   IP    # main domain ip
*.name.tld. IN  A   IP    # wildcard subdomains ip

例:

mydomain.com.   IN  A   1.1.1.1
*.mydomain.com. IN  A   1.1.1.1 

0

根据您的配置ns1.example.com192.0.2.4ns2.example.com192.0.2.5。您必须在区域中配置NS服务器名称解析example.com以获得正确的IP。

我希望我能说清楚。如果您需要更多信息,请回来给我。


因此,我应该为nsdomain.com添加另一个区域,并在那里为nsdomain.com设置NS / A?
Jon Wu

因此,如果您有2个区域,例如somedomain.com和nsdomain.com,则必须在适当的区域中设置与nsdomain相关的信息。简短的回答是,您必须设置另一个区域。
伊斯特万(Istvan)

-5

DNS通配符可能会引起麻烦!

因此,我不想为每个域明确添加区域。

有很多方法可供选择-从SHELL脚本到基于SQL的DNS服务器。


UPD。(2019-11):正如我8年前说过的那样,SHELL脚本是一种可行的方法,并且已被公认的答案提出的解决方案``添加区域条目''证明了这一点-显然不是基于通配符的使用。;-)

在2019年,查找说明DNS通配符的缺点的资源甚至变得更加容易,尽管其中大多数都是在“互联网的曙光”下编写的,但它们仍然具有一定的价值。例如,RFC1912提到了一些与DNS通配符使用有关的内容。主要问题清楚地解释为“…

通配符MX可能会很糟糕,因为它们会使某些操作成功完成,而应该改为失败。……”

它也有一些现实的例子,虽然有点过时。


为什么DNS通配符是邪恶的?这不是在所有的邪恶....
伊什特万


@poige 1)URL不再解析,2)您在回答时引用了8岁的文档,现在应该是16岁,就像互联网上的永恒,3)在web.archive.org上的快照/web/20030922093331/https://www.iab.org/…基本上可以归结为“特别是,我们建议不要在区域中使用DNS通配符,除非区域操作员清楚地了解了风险,并且“在未经授权进入区域下方的实体的知情同意之前,请勿使用它们。”
帕特里克·梅夫策克,

我也是8. +年前写的,您仍然在阅读和回复。:)
poige
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.