我正在为反向 /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。
该
$GENERATE
指令只有两种范围的形式:开始-停止或开始-停止/步进。因此,您不能从范围中排除一个 IP,但您必须相应地拆分范围,例如不幸的是,没有办法做到这一点。你被“展开”困住了。
在内存中,$GENERATE 指令导致生成单独的 PTR 记录。这可以通过查看辅助服务器在区域传输后收到的区域文件来观察,该文件不包含 $GENERATE 指令。没有允许您选择性地覆盖单个 PTR 记录的语法。
在DNS for Rocket Scientists 的第 8 章中提到了另一种方法,即添加一个使用步骤
named-checkzone
来解析 $GENERATE 指令并将其替换为单独的 PTR 记录:当然,缺点是您在主服务器上的区域文件变得更大。此时,您仅使用 $GENERATE 为您构建初始反向区域,这样就不必手动输入各个 PTR 记录,并且 shell 脚本可以轻松地在那里实现相同的最终结果。
这可能不是您所希望的解决方案,但不幸的是,情况就是这样。:(
尽管您可能无法在包含 的区域内进行例外处理
$GENERATE
,但您可以定义一个响应策略区域。响应策略区应该让您覆盖您希望的任何响应。