编辑:我按照 Andrew B 的建议简化了目标。
目的基本上是设置一个权威名称服务器,只对递归请求给出真实答案,这意味着打破 DNS 解析的迭代过程。对于任何实际用途来说都没有意义,但我在这里尝试的是出于研究目的,特别是识别行为不当的开放解析器。
我想要的是,即使我们知道其他情况(例如,如果我们是所请求域的权威名称服务器),也不对非递归 DNS 请求做出任何数据的回答。即:
Case 1: REQUEST(RD=0) -> RESPONSE(rcode=NOERROR, All sections Empty, RA=1)
Case 2: REQUEST(RD=1) -> RESPONSE(Real Answer, RA=1)
我的可用资源是特定域的一个权威名称服务器和一个位于不同机器上的 DNS 解析器。对于我控制的域的任何子域,行为都应该类似。
我当前的设置:
- Machine-1(简称 M1):为 research.lab.mydomain.com 注册的 BIND 权威名称服务器
- Machine-2(简称M2):BIND解析器(开放)
两者都允许递归调用(用于研究目的)。目前,对 research.lab.mydomain.com 子域的“A”查询转到 M1 的名称服务器并返回 NXDOMAIN 结果(没有注册子域)。M2 目前未使用。
我认为应该做的
让 research.lab.mydomain.com 子域的所有查询都转到解析器而不是名称服务器。解析器依次查询名称服务器(如果设置了需要递归),否则返回缓存的答案且不出现错误。来自外部世界的所有查询都应通过解析器。
我尝试过
我考虑将 M1 改为解析器,将 M2 改为名称服务器,这样 research.lab.mydomain.com 仍会注册到 M1 的地址。因此,我将区域配置从 M1 移至 M2,并在 named.conf.options 中设置从 M1 到 M2 的转发。
M1 中的 named.conf.local 现在是空的,而 M2 中的现在是:
zone "research.lab.mydomain.com" {
type master;
file "/var/lib/bind/research.lab.mydomain.com.hosts";
};
/var/lib/bind/research.lab.mydomain.com.hosts 的内容是 M1 中的修改版本(用 m2 替换 m1):
$ttl 38400
research.lab.mydomain.com. IN SOA m2.lab.mydomain.com. roee88.gmail.com. (
1410888930
10800
3600
604800
38400 )
research.lab.mydomain.com. IN NS m2.lab.sit.cased.de.
research.lab.mydomain.com. IN NS ns1.research.lab.mydomain.com.
ns1.research.lab.mydomain.com. IN A {IP ADDRESS OF M2}
不幸的是,这没有起作用。在 m2 上收到的查询导致了 SERVFAIL 响应。
答案1
您是否尝试过告诉 M1,M2 负责子域通过 IP 地址而不是名称,例如
zone "research.lab.mydomain.com." {
type forward;
forward first;
forwarders {
a.b.c.d ;
} ;
} ;
在M1中named.conf
,a.b.c.d
M2的IP地址在哪里?