假设我有一个名为example.com的域。 该工作的子域,但我不能附加example.com到自己的IP地址。
wifi IN A 1.1.1.1 ; -Works (wifi.example.com) router IN A 1.1.1.2 ; -Works (router.example.com) @ IN A 1.1.1.3 ; - Doesn't Work (example.com)
named-checkconf和named-checkzone都不返回任何内容。 我比较新的BIND,而不是麻烦拍摄我的区域文件。 你能简单地提供实现我的上述问题的指示吗?
要添加一个地址logging( A / AAAA ),就像在你的例子中一样,不pipe它是在区域顶点还是在其他层次上,你只需要指定所需的所有者名称即可。
一个不依赖任何“技巧”的例子:
example.com. IN A 192.0.2.7
你所做的也是一个潜在的工作方式,但@的价值是非常敏感的。
@扩展到当前的原点(可以使用$ORIGIN指令进行更改)。
在没有$ORIGIN指令的区域文件中,原始位置是区域名称( example.com. )。
如果有$ORIGIN指令,你将不得不跟踪当前的来源是什么,以了解@实际上是什么意思。 (你添加的行会影响它的意思。)
相同的名字(在你的例子中用于其他logging)同样适用,它们也是相对于当前的原点。
例如
wifi.example.com. IN A 192.0.2.8
正在使用绝对名称,并且不是上下文敏感的
而
wifi IN A 192.0.2.8
是上下文敏感的,并将扩展到无论目前的起源附加到它的无线,与使用@几乎相同的含义。
你有不同的成功与例如wifi和@可以解释为你添加这些行在$ORIGIN指令的区域文件中的不同位置。
没有显示任何错误的named-checkconf -zj / named-checkzone支持这个理论,因为它不是一个实际的错误,只不过是你在不同的地方添加了logging,例如在foo.example.com. 而不是在example.com. 。
为了查看实际的区域数据,你可以将其格式化为完全展开的forms,你可以很容易地得到这个例如dig @localhost example.com AXFR (如果你允许自己AXFR)或named-compilezone -f text -F text -s full -j -o - example.com db.example.com (如果有文件可用)。
在DNS区域文件中, @的资源logging被replace为$ORIGIN (通常是区域的名称),但是也可以使用FQDN作为资源logging,并使用尾部来终止它。 (为了防止另一个速记约定,其中资源logging没有尾随. $ORIGIN )
如果您的$ORIGIN正确(并设置为example.com),则以下内容是等同的:
example.com. IN A 192.168.0.0 @ IN A 192.168.0.0