我试图设置BIND,以便捕获任何和所有对它的请求,并将它们指向一组特定的NS服务器和一个特定的Alogging。
我有大约500个域名,而且我每天以10-15的速度添加新域名,所以我不想为每个域名明确添加一个域名。
我目前的设置是:在我的named.conf中,我有一个视图(命名外部)在其中的以下区域:
zone "." { type master; file "ext.zone"; };
这匹配所有请求。
ext.zone是:
$ TTL 3600
@在SOA中。 root.nsdomain.com。 (
1; 串行
3600; 刷新
300; 重试
3600; 到期
300); 负cachingTTL
在NS ns1.nsdomain.com
在NS ns2.nsdomain.com
ns1 IN A 1.2.3.4
ns2 IN A 1.2.3.5
*。 在A 1.2.3.6
所以,目标是:对于所有NS请求,返回所有A请求的ns1.nsdomain.com和ns2.nsdomain.com,除非ns1.nsdomain.com或ns2.nsdomain.com返回1.2.3.6。 对于ns1.nsdomain.com返回1.2.3.4,对于ns2.nsdomain.com返回1.2.3.5。
这几乎奏效,唯一的问题是,当我做一个挖掘,我得到:
挖@localhost somedomain.com ; > DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3> @localhost somedomain.com ; (find1个服务器) ;; 全局选项:printcmd ;; 有答案: ;; 操作码:QUERY,状态:NOERROR,ID:37733 ;; 标志:qr aa rd; QUERY:1,答案:1,权限:2,附加:2 ;; 问题部分: ; somedomain.com。 在一个 ;; 答案部分: somedomain.com。 3600在A 1.2.3.6 //如预期 ;; 授权部分: 。 3600在NS ns1.nsdomain.com。 //预计,我不知道“。” 但是,一开始是不好的。 。 3600在NS ns2.nsdomain.com。 // 往上看。 ;; 附加部分: ns1.nsdomain.com。 3600 IN A 1.2.3.6 //不是预期的,应该是1.2.3.4 ns2.nsdomain.com。 3600 IN A 1.2.3.6 //不是预期的,应该是1.2.3.5
我该如何解决? 我在做什么可怕的事情? 有没有更好的方法来做到这一点?
谢谢!
您的区域的起源是“。” 根据您的configuration。 您正在创build“ns1”的logging。 和“ns2”。 而不是“ns1.nsdomain.com”。 和“ns2.nsdomain.com”。 由于“ns1.nsdomain.com”和“ns2.nsdomain.com”没有定义,所以它们被通配符匹配。
编辑:这是你的configuration和区域的编辑:
zone "nsdomain.com." { type master; file "ext.zone"; };
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 1.2.3.6 ns1 IN A 1.2.3.4 ns2 IN A 1.2.3.5 * IN A 1.2.3.6
区域中的所有内容都与命名configuration中的区域名称相关,因此添加第二个区域只是指向相同的文件:
zone "newnsdomain.com." { type master; file "ext.zone"; };
根据您的configurationns1.somedomain.com是1.2.3.4和ns2.somedomain.com是1.2.3.5。 您必须在nsdomain.com区域中configurationNS服务器名称parsing才能获取正确的IP。
我希望我能说清楚。 回到我身边,如果你需要更多的信息。
DNS通配符大都是邪恶的,所以要避免使用'em。
所以我不想为每个域明确添加一个区域。
从shell脚本到基于SQL的DNS服务器有很多的方法可以去。