我为example.com创建了一个区域文件,其中包含:
@ A 1.2.3.4 * A 1.2.3.4
但是我也在设置我的本地DNS local.example.com,我已经创建了一个单独的区域文件,用于包含以下内容:
machine1 A 192.168.0.1 machine2 A 192.168.0.2
当我挖掘machine1.local.example.com时,它返回A记录192.168.0.1,很棒.
遗憾的是,badmachine.local.example.com返回1.2.3.4,local.example.com也是如此.
我不确定防止这种情况的最佳方法.如果我将以下内容添加到local.example.com中,则返回上述2个示例的记录,这是我想要的行为:
@ A * A
我希望anything.example.com在local.example.com子域中使用通配符EXCEPT,除非另有说明,否则我不想给出响应.基本上我需要一张带有一个排除的外卡.
这是允许的吗?这是最好的做法,还是我做得非常糟糕?我正在使用带有BIND后端的PowerDNS.
谢谢你的想法!
解决方法
其次,正如其他人所指出的那样,不允许空记录.
第三,我认为做你想做的事的方法是声明local.example.com是一个合适的子域:
local IN NS ns1.example.com local IN NS ns2.example.com
列出当前为example.com运行的两个名称服务器(注意:我不知道PowerDNS,因此我上面的条目是BIND格式).然后在那些名称服务器(我假设是这个名称服务器)上,为local.example.com声明一个zonefile,它只包含你要解析的主机,而不包含通配符记录.
因此,当人们查找foo.example.com时,假设未列出,它将匹配现有的通配符记录,并返回1.2.3.4(或其他).但是当人们抬起头来foo.local.example.com,将返回local.example.com的名称服务器记录并进行进一步的递归,您的名称服务器现在查看local.example.com的zonefile,并说(如果没有foo的特定记录和local.example.com中的通配符)“不,没有这样的记录”.