BIND 9 - 如何输入主域的 DNS 记录?

BIND 9 - 如何输入主域的 DNS 记录?

假设我有一个名为 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 还不太熟悉,因此没有解决区域文件问题。您能否简单地提供解决上述问题的说明?

答案1

要像您的示例一样添加地址记录(A/ AAAA),无论它是在区域顶点还是在其他级别,您只需指定所需的所有者名称。

一个不依赖任何“技巧”的例子:

example.com. IN A 192.0.2.7

您所做的也是一种可能可行的方法,但值@非常敏感。
@扩展到当前原点(可以使用$ORIGIN指令进行更改)。

在区域文件中没有$ORIGIN指令的位置,原点是区域名称(example.com.在您的示例中)。
如果有$ORIGIN指令,您必须跟踪当前原点,才能知道其@实际含义。(您添加行的位置将影响其含义。)

这同样适用于相对名称(您在示例中用于其他记录),这些名称也与当前原点相关。

例如

wifi.example.com. IN A 192.0.2.8

使用绝对名称并且不区分上下文

尽管

wifi IN A 192.0.2.8

是上下文敏感的,并且会根据附加到它的当前原点进行扩展wifi,其含义与使用 几乎相同@

例如,您获得了不同的成功wifi@可以通过在具有指令的区域文件的不同位置添加这些行来解释$ORIGIN

named-checkconf -zj/named-checkzone没有显示任何错误支持这一理论,因为它不是一个实际的错误,只是你在与预期不同的位置添加了记录,例如 atfoo.example.com.而不是 at example.com.

要查看为您完整说明的实际区域数据,您可能需要将其格式化为完全展开的形式,您可以轻松地使用例如dig @localhost example.com AXFR(如果您允许使用 AXFR)或named-compilezone -f text -F text -s full -j -o - example.com db.example.com(如果您有可用的文件)来获取它。

答案2

在 DNS 区域文件速记中,资源记录@被替换为$ORIGIN(通常是区域的名称),但您也可以使用 FQDN 作为资源记录,只需在其末尾添加一个.(以避免另一个速记约定,即没有尾随的资源记录.会附加 $ORIGIN

如果您的 $ORIGIN是正确的(并设置为 example.com),以下内容是等效的:

example.com. IN A 192.168.0.0
@            IN A 192.168.0.0

相关内容