BIND DNS:如何覆盖由 $GENERATE 指令生成的 RR?

BIND DNS:如何覆盖由 $GENERATE 指令生成的 RR?

我正在为反向 /16 区域运行权威名称服务器,其中每个 IP 都映射到自定义子域。这是通过包含 256$GENERATE条指令的区域文件实现的,例如(子网 11.22.0.0/16):

$GENERATE 0-255 $.1 PTR $.1.22.11.rev.example.com.
$GENERATE 0-255 $.2 PTR $.2.22.11.rev.example.com.
(...)

这可以正常工作,唯一的问题是,每当我们添加“有意义的”反向记录(4.3.22.11.in-addr.arpa. IN PTR www.example.com.)时,就会导致同一 IP 地址有 2 个 PTR 记录的情况:

4.3.22.11.in-addr.arpa. IN PTR www.example.com.
4.3.22.11.in-addr.arpa. IN PTR 4.3.22.11.rev.example.com.

大多数情况下这是可以的,但在某些情况下我们需要有单个 PTR 记录。

解决方案是将$GENERATE块“展开”为单独的 PTR 记录并替换有问题的记录。有没有办法在不扩展整个范围的情况下覆盖生成的记录?

该名称服务器在 RHEL6 上运行 BIND 9.8.2。

答案1

$GENERATE指示只有两种形式范围:start-stop 或 start-stop/step。因此,您无法从范围中排除一个 IP,但必须相应地拆分范围,例如

$ORIGIN 22.11.in-addr.arpa.
$GENERATE 0-3   $.3  PTR  $.3.22.11.rev.example.com.
                4.3  PTR  www.example.com.
$GENERATE 5-255 $.3  PTR  $.3.22.11.rev.example.com.

答案2

不幸的是,没有办法做到这一点。你只能“展开”。

在内存中,$GENERATE 指令会导致生成单独的 PTR 记录。这可以通过查看区域传输后辅助服务器收到的区域文件来观察,该文件不包含 $GENERATE 指令。没有允许您有选择地覆盖单独的 PTR 记录的语法。

另一种选择是火箭科学家的 DNS 第 8 章,即添加一个使用named-checkzone解析出 $GENERATE 指令并将其替换为单独的 PTR 记录的步骤:

$GENERATE 语句在加载区域文件时执行,并将导致 BIND9 在操作中使用区域的扩展内存版本,而区域文件本身保持不变。如果您想查看扩展(您不信任结果或想要编辑它),绑定实用程序 named-checkzone 将允许创建扩展区域文件(包括 $GENERATE 指令),该文件可用作模板(或框架)并随后进行编辑。作为使用 named-checkzone 的副作用,任何不合格的标签(名称)也将扩展为完整的 FQDN,并且任何 $TTL 指令都将用于填充单个 RR TTL。这可能是也可能不是一个有用的副作用。假设包含 $GENERATE 指令的区域文件是 192.168.199.rev(根据本指南的区域文件命名约定)并且区域名称是 199.168.192.IN-ADDR.ARPA,则以下命令将输出扩展的区域文件为 192.168.199.rev.exp。

named-checkzone -D -o 192.168.199.rev.exp 199.168.192.IN-ADDR.ARPA 192.168.199.rev

当然,缺点是主服务器上的区域文件会变得更大。此时,您只使用 $GENERATE 为您构建初始反向区域,这样就不必手动输入各个 PTR 记录,并且 shell 脚本可以轻松实现相同的最终结果。

这可能不是您所希望的解决方案,但不幸的是,事情就是这样。:(

答案3

虽然您可能无法在包含的区域内做出例外$GENERATE,但您可以定义一个响应政策区. 响应策略区应该允许您覆盖您希望的任何回应

相关内容