
我在 Linux 系統上使用 BIND9。在我的區域資料庫檔案中,相同 IP 在多個條目中多次出現IN A
。例如,my 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