BIND:强制权威名称服务器的答案没有非recursion请求的数据(研究目的)

编辑 :我已经按照Andrew B.的build议简化了目标。

目标基本上是设置一个权威的名称服务器,只给予recursion请求的真实答案,这意味着打破dnsparsing的迭代过程。 没有任何实际用途的意义,但我在这里尝试的是研究目的,特别是在识别行为不当的开放式parsing器。

我想要的是即使我们不知道非recursionDNS请求也没有数据(例如,如果我们是所请求的域的权威名称服务器)。 即:

Case 1: REQUEST(RD=0) -> RESPONSE(rcode=NOERROR, All sections Empty, RA=1) Case 2: REQUEST(RD=1) -> RESPONSE(Real Answer, RA=1) 

我可用的资源是一个特定域的权威名称服务器和一个DNSparsing器在不同的机器上。 行为应该与我的受控域的任何子域相似。


我目前的设置:

  • Machine-1(简称M1):为research.lab.mydomain.com注册的BIND权威域名服务器
  • Machine-2(简称M2):BINDparsing器(open)

两者都允许recursion调用(用于研究目的)。 目前,“A”查询research.lab.mydomain.com子域到M1的域名服务器并返回NXDOMAIN结果(没有注册子域)。 M2目前未被使用。

我认为应该做的

使research.lab.mydomain.com子域的所有查询都转到parsing程序而不是名称服务器。 parsing器轮stream查询名称服务器是否设置了期望的recursion或者返回caching的答案,否则没有错误。 所有来自外界的疑问都应该经过parsing器。

我试过了

我虽然想把M1变成parsing器而M2是名字服务器,那么research.lab.mydomain.com仍然会被注册到M1的地址。 所以我把区域configuration从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响应。

你有没有试过告诉M1,M2是通过IP地址而不是名字来负责子域 ,比如说

 zone "research.lab.mydomain.com." { type forward; forward first; forwarders { abcd ; } ; } ; 

在M1的named.confabcd是M2的IP地址?