BIND9 区域数据库的常量(或宏)定义

BIND9 区域数据库的常量(或宏)定义

我在 Linux 系统上使用 BIND9。在我的区域数据库文件中,同一个 IP 在多个条目中多次出现IN A。例如,我的wwwmailnsIN A条目引用相同的 IP 地址。我不想也不能使用IN CNAME这样的条目。

例如,我的 DNS 区域数据库文件的一部分可能是这样的:

...
ns1  IN A    _ip1_
     IN AAAA _ip2_
ns2  IN A    _ip3_
     IN AAAA _ip4_
...
wwwa IN A    _ip1_
     IN AAAA _ip2_
...
wwwb IN A    _ip3_
     IN AAAA _ip4_
...
mail IN A    _ip1_
     IN AAAA _ip2_
     IN A    _ip3_
     IN AAAA _ip4_
...
ntp  IN A    _ip1_
     IN AAAA _ip2_
     IN A    _ip3_
     IN AAAA _ip4_
...

在上面的例子中,在每个我必须输入的地方_ip1_,例如,我必须输入a相同的 IP 地址.这样很容易出错。

如何定义“宏”或“常量”并稍后在 BIND9 db 文件中使用它?

答案1

您无法在 Bind9 区域文件中定义变量或常量。Bind9 仅支持$ORIGIN$TTL和作为“编程”条目,$GENERATE$INCLUDE这些条目均无法满足您的需要。

使用类似模板的系统相当简单。您可以使用带有 的 bash 脚本heredoc,或者使用envsubst实用程序:

  1. 创建“模板”区域文件:
ns1  IN A    $ip1
     IN AAAA $ip2
ns2  IN A    $ip3
     IN AAAA $ip4
...
wwwa IN A    $ip1
     IN AAAA $ip2
  1. 编写一个小的 shell 脚本来设置变量并进行扩展,例如:
#!/bin/bash

ip1='198.51.100.42'
ip2='2001:db8:1234:100::42'
ip3='198.51.100.17'
ip4='2001:db8:1234:100::17'

envsubst < template_file > real_zone_file.zone

相关内容