BIND配置檔案詳解(三)

技術小胖子發表於2017-11-11
本文件摘錄自《BIND9管理員手冊》,如果有不對或者不清楚的地方,請大家告訴我,謝謝!
 
BIND配置檔案詳解(三)
 
7.server語句
伺服器(server)語句的定義和使用:
server ip_addr {
[ bogus yes_or_no ; ]
[ provide-ixfr yes_or_no ; ]
[ request-ixfr yes_or_no ; ]
[ edns yes_or_no ; ]
[ transfers number ; ]
[ transfer-format ( one-answer | many-answers ) ; ]]
[ keys { string ; [ string ; […]] } ; ]
};
伺服器語句定義了與遠端伺服器相關的性質。
伺服器語句可以出現在配置檔案的頂層或者在檢視語句的內部。如果一個檢視語句包括一個或更多的伺服器語句,只有那些檢視語句內的被應用到檢視和任何頂層的語句被忽略。如果一個檢視不包括伺服器語句,則任何頂層伺服器語句都被當做預設。
bogus
如果你發現一臺遠端伺服器正在輸出錯誤資料,使用bogus標記它,將會阻止對它的更多查詢。Bogus的預設值為no。
provide-ixfr
provide-ixfr子句決定本地伺服器是否作為主域名伺服器,當遠端的一臺輔域名伺服器要求的時候,響應增量的域傳輸。如果設定成yes,增量傳輸將會在任何可能的時候進行。如果設定為no,所有對遠端伺服器的傳輸都將是非增量的。如果不設定,在檢視或者全域性選項塊中的provide-ixfr選項的值將使用預設值。
request-ixfr
request-ixfr子句決定本地伺服器是否作為輔域名伺服器,將會向給定的遠端伺服器(一般為主域名伺服器)傳送域的增量傳送請求。如果不設定,在檢視或者全域性選項塊中的provide-ixfr選項的值將使用預設值。
對不支援IXFR的伺服器的IXFR請求將會自動轉回AXFR。這樣,就不需要用手工列出哪個伺服器支援IXFR哪個不支援。全域性預設值yes 一直會起作用。provide-ixfr和request-ixfr子句的作用是使IXFR無效,甚至當主域名伺服器和輔域名伺服器宣佈支援它。
例如當使用IXFR時,如果一臺伺服器受災並且崩潰或者破壞了資料。
edns
edns子句決定本地伺服器與遠端伺服器通訊時是否使用EDNS.預設值為yes。
伺服器支援兩類域傳輸方式:
第一類,one-answer,每個源資料傳輸使用一個DNS報文。
第二類,many-answer,在一個報文中彙集了儘可能多的記錄。多答案更有效率,但是
只被BIND9,BIND8.X 和BIND4.9.5補丁版本識別。你可以使用transfer-format選項為
一個伺服器指定使用哪種方式。如果transfer-format沒有被指定,就使用options裡的
語句指定的transfer-format。
transfers
transfers用來限定同時從特定伺服器進行資料傳輸的域的數量。如果transfers子句沒有被指定,限制將會參照transfers-per-ns制定。
keys
keys子句用來確定一個由key語句定義的key_id,用於當遠端伺服器通話時的安全處理。key語句必須在涉及它的伺服器語句之前。當一個請求傳送到遠端伺服器,一個請求報文將會產生(使用本地指定鍵並附在報文上)。一個來自遠端伺服器的請求不要求被這個鍵標記。
儘管鍵子句語法支援多鍵,但是目前每個伺服器只支援一個鍵.
 
8. trusted-keys語句
trusted-keys語句的定義和使用:
trusted-keys {
string number number number string ;
[ string number number number string ; […]]
};
trusted-keys語句定義DNSSEC安全根。當非授權域的公共鍵是已知的但是卻不能安全的通過DNS得到,或者因為DNS根域或者它的當前域沒有被標記時定義安全根。一旦一個鍵被設定成信任鍵,它就被認為是有效和安全的。解答器在所有存在於安全根次級域中的DNS 資料上嘗試DNSSEC有效性。
trusted-keys語句能包含多重鍵入口,每個由鍵的域名,旗幟,協議演算法和鍵資料的64進位組成。
 
9. view語句
檢視(view)語句的定義和使用:
view view_name [class] {
match-clients { address_match_list } ;
match-destinations { address_match_list } ;
match-recursive-only { yes_or_no } ;
[ view_option; …]
[ zone-statistics yes_or_no ; ]
[ zone_statement; …]
};
檢視是BIND9強大的新功能,允許名稱伺服器根據詢問者的不同有區別的回答DNS查詢。特別是當執行拆分DNS設定而不需要執行多個伺服器時特別有用。每個檢視定義了一個將會在使用者的子集中見到的DNS名稱空間。
根據使用者的源地址(“address_match_list”)匹配檢視定義的“match_clients”和使用者的目的地址(“address_match_list”)匹配檢視定義的” matach-destinations”。
如果沒有被指定,match-clients和match-destinations預設匹配所有地址。一個檢視也可以做為match-recursive-only來指定,意思是來自匹配使用者的遞迴請求將會匹配該檢視。檢視語句的順序是很重要的,一位使用者的請求將會在它所匹配的第一個檢視中被解答。在檢視語句中定義的域只對匹配檢視的使用者是可用的。通過在多個檢視中用相同名稱定義一個域,不同域資料可以傳給不同的使用者。例如:在拆分DNS設定中的”內部”和”外部”使用者。
許多在named.conf 的options裡的語句中給出的選項也能在檢視語句中使用,僅僅用於使用哪個檢視解答請求的時候。當view-specific值沒有給出,options裡的語句值就使用默 認值。域選項也可以在檢視語句中指定預設值;這些view-specific預設值的優先順序高於那些在options裡面配置的語句。
檢視精確到類。如果沒有給定任何類,就假設為IN類。注意到所有非-IN檢視必須包含一個暗示域,因為只有IN類具有compiled-in預設暗示。
如果在配置檔案中沒有view語句,在IN類中就會自動產生一個預設檢視匹配於任何使用者,任何指定在配置檔案的最高階的zone語句被看作是此預設檢視的一部分。如果存在外部view語句,所有的域檢視必須會在view語句內部產生。
 
這是一則典型的使用檢視語句執行的拆分DNS設定
view “internal” {
match-clients { 10.0.0.0/8; };
// 應該與內部網路匹配.
// 只對內部使用者提供遞迴服務.
// 提供example.com zone 的完全檢視
//包括內部主機地址.
recursion yes;
zone “example.com” {
type master;
file “example-internal.db”;
};
};
view “external” {
match-clients { any; };
// 拒絕對外部使用者提供遞迴服務
// 提供一個example.com zone 的受限檢視
// 只包括公共可接入主機
recursion no;
zone “example.com” {
type master;
file “example-external.db”;
};
};
 
10. zone語句
Zone語句的定義和使用:
zone zone_name [class] [{
type ( master | slave | hint | stub | forward ) ;
[ allow-notify { address_match_list } ; ]
[ allow-query { address_match_list } ; ]
[ allow-transfer { address_match_list } ; ]
[ allow-update { address_match_list } ; ]
[ update-policy { update_policy_rule […] } ; ]
[ allow-update-forwarding { address_match_list } ; ]
[ alsonotify
{ ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; … ] }; ]
[ check-names (warn|fail|ignore) ; ]
[ dialup dialup_option ; ]
[ file string ; ]
[ forward (only|first) ; ]
[ forwarders
{ ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; … ] }; ]
[ ixfr-base string ; ]
[ ixfr-tmp-file string ; ]
[ maintain-ixfr-base yes_or_no ; ]
[ masters [port ip_port] { ip_addr [port ip_port] [key key]; […] } ; ]
[ max-ixfr-log-size number ; ]
[ max-transfer-idle-in number ; ]
[ max-transfer-idle-out number ; ]
[ max-transfer-time-in number ; ]
[ max-transfer-time-out number ; ]
[ notify yes_or_no | explicit ; ]
[ pubkey number number number string ; ]
[ transfer-source (ip4_addr | *) [port ip_port] ; ]
[ transfer-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ notify-source (ip4_addr | *) [port ip_port] ; ]
[ notify-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ zone-statistics yes_or_no ; ]
[ sig-validity-interval number ; ]
[ database string ; ]
[ min-refresh-time number ; ]
[ max-refresh-time number ; ]
[ min-retry-time number ; ]
[ max-retry-time number ; ]
}];
 
A. 域檔案型別
master
伺服器有一個主域(控制域或主域)的配置檔案拷貝,能夠為之提供授權解析服務。
slave
輔域(也可以叫次級域)是主域的複製。主域名伺服器定義了一個輔域或多個輔域(次級域聯絡以更新域拷貝)的IP地址.預設下,傳輸是從伺服器上的53埠進行的;對所有的伺服器來說這是可變的,通過設定一個在IP地址表前或者在IP地址之後基於每個伺服器設定埠數字。對主域名伺服器的鑑別也能通過每個伺服器上的TSIG鍵來完成。如果檔案被指定了,那麼任何主域配置資訊改變的時候就要複製檔案,並且當輔伺服器重新啟動的時候都會從主域名伺服器上重新下載檔案。這可能會導致頻寬的浪費和伺服器重新啟動次數的增加。
注意對每個伺服器的數量眾多的域來說(數萬或者數十萬),最好使用兩級方式命名配置。
例如:一個域的伺服器example.com可能把域內容放到一個叫做ex/example.com的檔案中,在此, ex/只是域名前兩個字元(如果把100K 的檔案放入一個單獨的目錄中,大多數作業系統都會反應緩慢)
stub
子根域與輔域類似,子域只複製主域的NS記錄而不是整個域。根域不是DNS的一個標準部分,它們是BIND執行的特有性質。
根域可以用來避免在本機重新獲得該域的NS記錄,代價是儲存一個根域入口和一組named.conf名稱伺服器地址。這個用法在新設定中並不建議使用,BIND9只在有限的情況下才支援它。在BIND4/8中當前的域傳輸包括來自當前域的子根的NS記錄。這表明,在某些情況下,使用者可以為當前域設定只存在於控制伺服器裡的子根。BIND9伺服器從不以這種方式把來自不同域的資料混合。這樣的話,如果一個BIND9控制伺服器服務於一個已經設定了子根域的母域,所有的當前域的次級伺服器都需要設定相同的子根域。子根域也可以用來作為一種促使一個特定域的解答使用一個授權伺服器的特定系。例如,在一個使用RFC2157 地址的私有網路上快取域名伺服器可以用子根域進行設定。
forward
一個”轉發域”是一種在每個域基礎上進行配置轉發的一種方式。forward 型別的域語句包括一個轉發語句和轉發列表,都應用於在域內的由域名給出的查詢。如果當前沒有轉發器語句,就會給出空列表,在域中就不會轉發,也就取消了所有在選項中的轉發的作用。如果你要使用此種域來改變整體轉發選項的狀態(”forward first”,”forward only”但是要用同一伺服器作為是全域性設定)你需要理解全域性轉發器的特點。
hint
根名稱伺服器在最初設定時指定使用一個”hint zone”。當配置了”hint zone”的伺服器
啟動的時候,它使用根線索的設定找到根的名稱伺服器並得到根名稱伺服器的最新表。
如果沒有為IN類設定線索域,伺服器使用一個compiled-in的預設根伺服器列表。
 
B. 
域名後面的選項可以對應類。如果沒有指定類,系統假定為IN類。這在大多數的情況下都是正確的。
Hesiod類是以一個資訊服務的名稱命名的,資訊服務源於MIT的Athena工程.。Hesiod類是用來在多系統資料之間共享資訊,如使用者、組、印表機等等。”HS”對Hesiod來說是相同的類。
MIT發展的另一個是CHAOSnet,一個在70年代中期創立的本地協議。它的域資料可以用CHAOS類設定。
 
C. zone 選項
allow-notify
allow-query
allow-transfer
allow-update
設定哪臺主機允許為主域名伺服器提交動態DNS更新。預設為拒絕任何主機進行更新。
update-policy
設定一個”簡單安全更新政策”。
allow-update-forwarding
設定哪個主機能夠向輔域名伺服器的次級域提交動態域名伺服器更新。預設值為{ none; },意味著不能進行動態更新轉發。要使用更新轉發,設定allow-update-forwarding{ any; };設定其他值而不是{ none; } 或者{ any; } 是常常起反作用的,因為主域名伺服器擁有接入控制的權利,而輔域名伺服器沒有。
注意到啟用一臺次級伺服器上的更新轉發性質可能使主域名伺服器依賴基於不安全IP地址的接入控制而可能使之受到攻擊。
also-notify
只當本域notify被啟用時才是有意義的。能夠收到本域DNS NOTIFY資訊的計算機的集合是由所有域中列明的名稱伺服器加上任何由also-notify設定的IP地址。一個埠可能用每個also-notify地址設定以傳送通告資訊到那個埠而不是預設的53埠。
also-notify 對根域是無意義的。預設值為空。
check-names
此選項應用於BIND8中以約束hosts檔案中的域名的字符集和/或從網路上接收的DNS響應。BIND9不限制域名的字符集也不執行check-names選項。
database
設定儲存域資料的資料庫的型別。Database後面的關鍵詞是一列whitespace-delimited(非限制空白空間)詞。第一個詞定義資料庫型別,後續詞作為資料庫的引數傳給資料庫,解釋為特殊的資料庫型別。預設值為”rbt”,BIND9的本地native in-memory red-black-tree 庫,則此資料庫沒有引數如果其它資料庫驅動連線到伺服器上的話其他值也是可能的。這些可能的資料庫包括分散式的資料庫,但預設是沒有連線的。
dialup
forward
只當域有一個轉發器列表的時候才是有意義的。當配置為”only”時,在轉發查詢失敗和得不到結果時會導致查詢失敗;在配置為”first”時,則在轉發查詢失敗或沒有查到結果時,會在本地發起正常查詢。
forwarders
用來代替全域性的轉發器列表。如果如故不在forward型別的域中設定,就不會有這個域查詢的被轉發;全域性的轉發設定則沒有起作用。
ixfr-base
在BIND8中設定動態更新和IXFR的交易日誌檔案(journal)的名稱。BIND9 忽略這個選項而通過附加”.jnl”到域檔名後建立日誌檔案.
ixfr-tmp-file
BIND8的非正式選項,BIND9忽略
max-transfer-time-in
max-transfer-idle-in
notify
pubkey
在BIND8中,此選項用於為DNSSEC標記域的訊號(當它們從磁碟裝載的時候)的驗證設定一個公共域金鑰,BIND9不在裝載的時候驗證金鑰並忽略此選項。
zone-statistics
如果設為”yes”,伺服器將會為本域儲存統計資訊,可以儲存到在伺服器選項中定義的統計檔案中。
sig-validity-interval
transfer-source
transfer-source-v6
notify-source
notify-source-v6
min-refresh-time
max-refresh-time
min-retry-time
max-retry-time
 
D. 動態更新政策
BIND9支援兩個授予使用者對一個域執行動態更新許可權的備選方案,分別由allow-update和update-policy設定。
allow-update 的使用與以前的BIND版本相同。它授於指定使用者對域中的任何名稱的任何的記錄更新的權利。
update-policy 是BIND9中新出現的,允許更多更新控制,定義了一個規則集,規則授予或者取消一個或多個名稱被一個或多個使用者更新的權利。如果動態更新要求資訊被標記(也就是說,可以包含TSIG 或SIG(0)記錄),標記人的身份就能被確定。
規則在update-policy 域選項中指定,並只對主域有意義。當update-policy語句出現,這是一個allow-update的配置錯誤.。update-policy語句只檢查資訊的簽名人,與源地址是不相關的。
這是一則規則的定義:
( grant | deny ) identity nametype name [ types ]
每條規則賦予或者取消授權,一旦一條資訊成功的匹配一個規則,則馬上執行該規則的給予或者取消操作,並且不檢查其它的規則。一個規則是匹配的,就是當標記人匹配身份欄位,名稱匹配名稱欄位並且型別是在型別欄位中定義的時候。
身份欄位定義一個名稱或者一個萬用字元名稱,名稱型別欄位有四個值:
name, subdomain, wildcard 和self
name
當更新名稱與原定義的名稱欄位相同時匹配。
subdomain
當更新名稱與原定義的子域的一個名稱欄位相同時匹配。(包含它本身的名字)
wildcard
當更新名稱與原定義的一個位於名稱欄位中的統配符名稱的有效延伸相同時匹配
self
當更新名稱與資訊標記人的名稱相同時匹配。忽略名稱欄位。
如果沒有設定任何型別,規則匹配所有型別除了SIG、NS、SOA 和NXT;型別可能用
名稱設定,包括”ANY”。(ANY 匹配所有型別除了NXT,NXT 不能被更新)。
 
 
     本文轉自yuanbin0710 51CTO部落格,原文連結:http://blog.51cto.com/yuanbin/108583,如需轉載請自行聯絡原作者


相關文章