BIND9 區域資料庫的常數(或巨集)定義

BIND9 區域資料庫的常數(或巨集)定義

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

相關內容