我正在为反向 /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
,但您可以定义一个响应政策区. 响应策略区应该允许您覆盖您希望的任何回应。