设置一个空的/空白的DNS允许一个logging?

我试图把我的头围绕在DNS上的美妙世界。

我为example.com创build了一个区域文件,其中包含:

@ A 1.2.3.4 * A 1.2.3.4 

不过,我也build立了我的本地DNS,local.example.com,我已经创build了一个单独的区域文件,包含以下内容:

 machine1 A 192.168.0.1 machine2 A 192.168.0.2 

当我挖掘machine1.local.example.com它返回一个logging192.168.0.1,很好。

可悲的是,badmachine.local.example.com和local.example.com一样返回1.2.3.4。

我不确定最好的方法来防止这种情况。 如果我将以下内容添加到local.example.com空的Alogging返回上述2个示例是我所希望的行为:

 @ A * A 

我希望anything.example.com使用通配符除了local.example.com子域中的任何东西,除非指定,我不想给出响应。 基本上我需要一个通配符排除。

这是允许的吗? 这是最好的做法,还是我做的事情非常错误? 我使用PowerDNS和BIND后端。

谢谢你的想法!

首先,你对克里斯S的评论上面澄清(确实是修改)你原来的问题,我希望你能原谅我把它编辑成原来的问题。

其次,正如其他人所指出的,空logging是不允许的。

第三,我认为做你想做的事情的方式是声明local.example.com是一个合适的子域:

 local IN NS ns1.example.com local IN NS ns2.example.com 

列出与您当前为example.com运行相同的两个名称服务器( 注意:我不知道PowerDNS,所以我上面的条目是BIND格式 )。 然后在这些名称服务器(我认为是这个名称服务器)上声明local.example.com的zonefile,它只包含你想parsing的主机,并且没有通配符logging。

所以当人们查找foo.example.com ,假设没有列出,它将匹配现有的通配符logging,并返回1.2.3.4 (或其他)。 但是当人们查找foo.local.example.comfoo.local.example.com的名称服务器logging将被返回并进行进一步recursion,您的名称服务器现在查看local.example.com的local.example.com ,并说(在没有foo的特定logging local.example.com中的通配符的情况下)“不,没有这样的logging”。

确切地知道你以后的反应是有用的。 您的问题中引用的前两行设置了域的默认响应,以及不匹配的logging响应。 因此,example.com将由“@”logging提供服务,而任何-that-doesnt-exist.exmaple.com将由“*”logging提供服务。 他们没有必要,你可以摆脱两者。 将它们设置为空值是一种无效configuration(在大多数系统上)。

我想不出一个方法来“空”一个条目。 空Alogging是不允许的。

也许*.example.com A 1.2.3.4会阻止覆盖.local.example.com条目? 这听起来像PowerDNS是从规范行为不端。 定义local.example.com域应该防止通配符在该域中的任何东西上跺脚。 你能发布完整的区域文件吗? 这将解决一些小问题。

您应该查看正在运行的服务器的特定行为,因为此function尚未得到一致实施:

引用RFC 4592,许多DNS实现以不同的方式与通配符的原始定义不同。

通配符在实践中

你需要的通配符条目是正确的,因为我理解通配符用法的定义(更好地把它看作是最后的手段的默认值)。 我会尽量找时间阅读澄清RFC和更新在这里…