我在 Linux 系统上使用 BIND9。在我的区域数据库文件中,同一个 IP 在多个条目中多次出现IN A
。例如,我的www
、mail
、ns
等IN 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
实用程序:
- 创建“模板”区域文件:
ns1 IN A $ip1
IN AAAA $ip2
ns2 IN A $ip3
IN AAAA $ip4
...
wwwa IN A $ip1
IN AAAA $ip2
- 编写一个小的 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