我正在設定 BIND (v9.16) 名稱伺服器。
它的主要目的是作為我們內部主機的常規遞歸程序。不過,對於幾個特定區域(我們託管的區域),我需要將其設定為轉發器。目標是避免對根和 TLD DNS 伺服器產生依賴,並且即使在外部網路連線不可用的情況下也能夠繼續使用我們的內部服務。
這很容易設置,這裡是我的配置的相關部分:
options {
allow-recursion {
// Here comes the list of our inside networks
};
};
zone "somedomain.example" IN {
type forward;
forward first;
forwarders {
// Here comes the list of the primary servers for this zone
};
// ... repeated for all forward zones
此設定按預期工作,但有一點不便。必須為所有「轉送」區域重複主伺服器清單。我們有很多,都帶有 IPv4 和 IPv6 位址,並且 ^C/^V 所有區域的列表並不是我見過的最優雅的東西,也不是非常符合 DRY 標準。
我知道該forwarders
聲明也可以包含在全局options
部分中,但從基本實驗中我了解到該聲明不適用於前向區域,它僅適用於僅前向名稱伺服器(文檔不是很清楚,但是提到“如果沒有任何forwarders
聲明,[...]取消聲明中任何轉發器的效果options
」)。
有沒有辦法建立轉發器的命名列表,與我們建立 ACL 的方式大致相同,並在forwarders
相關區域內的語句中使用此符號名稱?
答案1
與許多其他守護程序和服務一樣,ISC Bind 支持include
其設定檔中的指令。
這允許您將配置設定和指令列表移動到不同的文件,並且您可以在需要的地方進行引用。
這減少了您的管理負擔,只需在一個位置維護轉發器列表,並且您只需在需要的地方複製參考即可。
// "/var/named/includes/forwarders.conf"
// master list of forwarders
forwarders {
192.0.2.21;
192.0.2.88;
};
然後在你的named.conf中:
zone "somedomain.example" IN {
type forward;
forward first;
include "/var/named/includes/forwarders.conf";
}
zone "otherdomain.example" IN {
type forward;
forward first;
include "/var/named/includes/forwarders.conf";
}