dns(bind)配置詳解(二)

6. options語句

options語句的定義和使用:
options語句用來設置可以被整個BIND使用的全局選項。這個語句在每個配置文件中只有一處。如果出現多個options語句,則第一個options的配置有效,並且會產生一個警告信息。
如果沒有options語句,則每個選項使用缺省值。
options {
[ version version_string; ]
[ directory path_name; ]
[ named-xfer path_name; ]
[ tkey-domain domainname; ]
[ tkey-dhkey key_name key_tag; ]
[ dump-file path_name; ]
[ memstatistics-file path_name; ]
[ pid-file path_name; ]
[ statistics-file path_name; ]
[ zone-statistics yes_or_no; ]
[ auth-nxdomain yes_or_no; ]
[ deallocate-on-exit yes_or_no; ]
[ dialup dialup_option; ]
[ fake-iquery yes_or_no; ]
[ fetch-glue yes_or_no; ]
[ has-old-clients yes_or_no; ]
[ host-statistics yes_or_no; ]
[ minimal-responses yes_or_no; ]
[ multiple-cnames yes_or_no; ]
[ notify yes_or_no | explicit; ]
[ recursion yes_or_no; ]
[ rfc2308-type1 yes_or_no; ]
[ use-id-pool yes_or_no; ]
[ maintain-ixfr-base yes_or_no; ]
[ forward ( only | first ); ]
[ forwarders { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ check-names ( master | slave | response )( warn | fail | ignore ); ]
[ allow-notify { address_match_list }; ]
[ allow-query { address_match_list }; ]
[ allow-transfer { address_match_list }; ]
[ allow-recursion { address_match_list }; ]
[ allow-v6-synthesis { address_match_list }; ]
[ blackhole { address_match_list }; ]
[ listen-on [ port ip_port ] { address_match_list }; ]
[ listen-on-v6 [ port ip_port ] { address_match_list }; ]
[ query-source [ address ( ip_addr | * ) ] [ port ( ip_port | * ) ]; ]
[ max-transfer-time-in number; ]
[ max-transfer-time-out number; ]
[ max-transfer-idle-in number; ]
[ max-transfer-idle-out number; ]
[ tcp-clients number; ]
[ recursive-clients number; ]
[ serial-query-rate number; ]
[ serial-queries number; ]
[ transfer-format ( one-answer | many-answers ); ]
[ transfers-in number; ]
[ transfers-out number; ]
[ transfers-per-ns number; ]
[ 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] ; ]
[ alsonotify { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ max-ixfr-log-size number; ]
[ coresize size_spec ; ]
[ datasize size_spec ; ]
[ files size_spec ; ]
[ stacksize size_spec ; ]
[ cleaning-interval number; ]
[ heartbeat-interval number; ]
[ interface-interval number; ]
[ statistics-interval number; ]
[ topology { address_match_list }];
[ sortlist { address_match_list }];
[ rrset-order { order_spec ; [ order_spec ; ... ] } };
[ lame-ttl number; ]
[ max-ncache-ttl number; ]
[ max-cache-ttl number; ]
[ sig-validity-interval number ; ]
[ min-roots number; ]
[ use-ixfr yes_or_no ; ]
[ provide-ixfr yes_or_no; ]
[ request-ixfr yes_or_no; ]
[ treat-cr-as-space yes_or_no ; ]
[ min-refresh-time number ; ]
[ max-refresh-time number ; ]
[ min-retry-time number ; ]
[ max-retry-time number ; ]
[ port ip_port; ]
[ additional-from-auth yes_or_no ; ]
[ additional-from-cache yes_or_no ; ]
[ random-device path_name ; ]
[ max-cache-size size_spec ; ]
[ match-mapped-addresses yes_or_no; ]
};
 
version
回答針對服務器版本的請求時的內容。缺省返回的是服務器的真實版本。
directory
服務器的工作目錄。配置文件中所有使用的相對路徑,指的都是在這裏配置的目錄下。大多數服務器的輸出文件(如named.run)都缺省生成在這個目錄下。如果沒有設定目錄,工作目錄缺省設置爲服務器啓動時的目錄‘.’。指定的目錄應該是一個絕對路徑。
named-xfer
這個選項已經被廢棄了。它在BIND8 中,它用來給named-xfer程序設定路徑名。在BIND9中,不需要單獨的named-xfer程序;它的功能已經內置在域名服務器中。
tkey-domain
這個域名將會附帶在由TKEY 生成的所有共享密匙名字的後面。當用戶請求進行TKEY交換時,它會爲密匙設定或不設定所要求的名稱。如果設置了tkey_domain,共享密匙的名字將會是"client specified part"(用戶設定的部分)+ "tkey-domain"。否則,共享密匙的名字將是"random hex digits"(隨機的16 進制數)+ "tkey-domain"。在大多數情況下,domainname應該是服務器的域名。
tkey-dhkey
針對使用Diffie-Hellman 的TKEY模式的用戶,服務器用來生成共享密匙的Diffie-Hellman 密匙。服務器必須可以從工作目錄中調入公共和私人密匙。大多數情況下,密匙的名稱應該是服務器的主機名。
dump-file
當執行rndc dumpdb命令時,服務器存放數據庫文件的路徑名。如果沒有指定,缺省名字是named_dump.db。
memstatistics-file
服務器輸出的內存使用統計文件的路徑名。如果沒有指定,默認值爲named.memstats。
注意:還沒有在BIND9中實現!
pid-file
進程ID文件的路徑名。如果沒有指定,默認爲/var/run/named.pid。pid-file是給那些需要向運行着的服務器發送信號的程序使用的。
statistics-file
當使用rndc stats命令的時候,服務器會將統計信息追加到的文件路徑名。如果沒有指定,默認爲named.stats在服務器程序的當前目錄中。
port
服務器用來接收和發送DNS協議數據的UDP/TCP端口號。默認爲53。這個選項主要用於服務器的檢測;因爲如果不使用53端口的話,服務器將不能與其它的DNS進行通訊。
random-device
服務器使用的entropy源:entropy主要用於DNSSEC操作,如TKEY的數據交換和加密域的動態更新。此選項指定了entropy將會從哪個設備(或文件)中讀取信息。如果它是一個文件,則當文件耗盡後,需要entropy的操作將會失敗。如果沒有指定,默認值是/dev/random(或等價的),如果它存在,否則就是沒有。random-device選項是在服務器啓動時,初始化配置時起作用的,在以後的重啓時則被忽略。
 
A.Boolean 選項
auth-nxdomain
如果是yes,那麼AA位將一直設置成NXDOMAIN響應,甚至在服務器不是授權服務器的情況下都是這樣的。默認值是no;這與BIND8不同。如果用戶使用的是非常老版本的DNS軟件,則有必要把它設置成yes。
deallocate-on-exit
此選項在BIND8中用於檢查出口處內存泄露。BIND9忽略此選項,並始終進行檢查。
dialup
如果是yes,那麼服務器將會像在通過一條按需撥號的鏈路進行域傳送一樣,對待所有的域(按需撥號就是在服務器有流量的時候,鏈路才連通)。根據域類型的不同它有不同的作用,並將集中域的維護操作,這樣所有有關的操作都會集中在一段很短的時間內完成,每個heartbeat-interval一次,一般是在一次調用之中完成。它也禁止一些正常的域維護的流量。默認值是no。
dialup選項也可以定義在view和zone語句中,這樣就會代替了全局設置中dialup的選項。
如果域是一個主域,服務器就會對所有輔域發送NOTIFY請求。這將激活輔域名服務器中的對域的序列號的檢驗。這樣當建立一個連接時,輔域名服務器才能確認這個域的傳輸合法性。
如果這個域是一個輔域或是末梢域(stub zone),那麼服務器將會禁止通常的“zone up to date”(refresh)請求,爲了能發送NOTIFY請求,只有在heartbeat-interval 過期之後才執行。
通過下列的設置,可以實現更好的控制。
1、notify 只發送NOTIFY信息。
2、notify-passive 發送NOTIFY信息,並禁止普通的刷新(refresh)請求。
3、refresh 禁止普通的刷新處理,當heartbeat-interval 過期時才發送刷新請求。
4、passive 只用於關閉普通的刷新處理。
fake-iquery
在BIND8中,此選項用來模擬陳舊的DNS查詢類型IQUERY。BIND9不再進行IQUERY模擬。
fetch-glue
這個選項以後不再使用。
has-old-clients
這個選項在BIND8中執行有問題,BIND9則忽略了這個選項。爲了達到has-old-clients yes的預期效果,可以設定兩個獨立選項auth-nxdomain yes和rfc2308-type1 no來代替。
host-statistics
在BIND8中,它可以保留每臺和域名服務器交互的主機統計信息。BIND9中不支持。
maintain-ixfr-base
此選項不再使用了。在BIND8用於判定是否保存了增量域傳輸的處理日誌。BIND9任何可能的時候都會保存傳輸日誌。如果需要禁止流出的增量域傳輸,可以使用provide-ixfr no。
minimal-responses
如果是yes,當產生響應的時候,服務器將只會按照需要將記錄添加到authority和additional的數據部分。(例如,delegations,negative responses)。這樣會改善服務器的性能。默認值爲no。
multiple-cnames
這個選項在BIND8中使用,允許一個域名承認多條CNAME記錄(與DNS標準相違
背)。BIND9.2在主hosts文件和動態更新中都嚴格強制執行CNAME規則。
notify
如果是yes(默認),當一個授權的服務器修改了一個域後,DNS NOTIFY信息被髮送出去。此信息將會發給列在域NS記錄上的服務器(除了由SOA MNAME標示的主域名服務器)和任何列在also-notify選項中的服務器。
如果是explicit,則notify將只發給列在also-notify中的服務器。如果是no,就不會發出任何報文。
notify選項也可能設定在zone語句中,這樣它就替代了options中的notify 語句。如果notify會使得輔域名服務器崩潰,就需要將此選項關閉。
recursion
如果是yes,並且一個DNS詢問要求遞歸,那麼服務器將會做所有能夠回答查詢請求的工作。如果recursion是off的,並且服務器不知道答案,它將會返回一個推薦(referral)響應。默認值是yes。注意把recursion設爲no,不會阻止用戶從服務器的緩存中得到數據,它僅僅阻止新數據作爲查詢的結果被緩存。服務器的內部操作還是可以影響本地的緩存內容,如NOTIFY地址查詢。
rfc2308-type1
設置成yes 將會使得服務器發送NS 記錄和關於negative answer 的SOA記錄。默認值爲no。
注:BIND9 中還不支持。
use-id-pool
此選項已經不再使用。BIND9 始終都是從池中分配請求ID的。
zone-statistics
如果是yes,缺省情況下,服務器將會收集在服務器所有域的統計數據。這些統計數據可以通過使用rndc stats來訪問,rndc stats命令可以將這些信息轉儲到statistics-file定義的文件中去。
use-ixfr
這個選項不再使用。如果需要針對一個或多個特殊的服務器關閉IXFR,可以參考provide-ixfr中的內容。
provide-ixfr
參閱中關於provide-ixfr的陳述。
request-ixfr
參閱關於request-ixfr的陳述。
treat-cr-as-space
這個選項應用於BIND8中,使服務器正確處理回車(”\r”)字符,就象其它的空格或tab字符一樣。這樣可以便於在unix系統上加載由NT或DOS系統生成的域文件。在BIND9中,UNIX”的\n”和DOS 的”\r\n”都可以正確處理爲換新行,這個選項就被忽略了。
additional-from-auth
additional-from-cache
當回答具有additional數據的請求,或者當在CNAME 和DNAME串的後面時,這些選項控制一個權威服務器的操作。
當這兩個選項都被設成yes(默認狀態),並且查詢的是授權的數據(這個域就配置在本地服務器中)時,回答中的additional部分的數據將使用來自於其它授權域和cache。
在許多情況下這是不需要的,比如在緩存內容的正確性受到懷疑的情況下,或是在某些輔域可能被非法修改的服務器。還有,避免對這些additional數據的搜索將會加速服務器運轉。
例如,如果一個查詢需要主機foo.example.com的MX記錄,找到的記錄是"MX 10
mail.example.net",如果知道的話, mail.example.net的地址記錄(A,A6 和AAAA)也會被提供出來。把選項設置爲no,則禁止了這種操作。
這些選項用於授權的服務器,或者是授權的視圖中。把它們設成no,但沒有同時設置recursion no,將會使得服務器忽略這些選項,並記錄一個警告日誌。
設定additional-from-cache爲no實際上針對additional信息的查詢和正在響應的查詢,都禁止了緩存的使用。這常常使用在一臺授權的服務器中,因爲在這裏緩存數據的正確性非常重要。
當一臺域名服務器不提供遞歸查詢時,並且查詢的名稱並不在本地域中,一般會對根服務器或者其他已知的上級服務器回答"upwards referral(向上推薦)"。既然在向上查詢中的數據來自於緩存,那麼當additional-from-cache被設定爲no時,服務器就不能提供向上推薦。相反,它會使用REFUSED(拒絕)回答這些查詢。因爲向上推薦不是在用戶解析過程中需要的,所以就不會出任何問題。
match-mapped-addresses
如果是yes,那麼一個ipv4映射成的ipv6地址就會匹配任何地址匹配表中能匹配於對應的ipv4 地址的記錄。打開這個選項,對於運行了ipv6的linux系統有時非常有用,這樣通過地址映射,就可以使得ipv4的TCP連接(如域傳送)實現在Ipv6的soket上,因爲地址匹配列表是給Ipv4設計的。
 
B. 轉發
轉發功能可以用來在一些服務器上產生一個大的緩存,從而減少到外部服務器鏈路上的流量。它可以使用在和internet沒有直接連接的內部域名服務器上,用來提供對外部域名的查詢。只有當服務器是非授權的,並且緩存中沒有相關記錄時,纔會進行轉發。
forward
此選項只有當forwarders列表中有內容的時候纔有意義。當值是First,默認情況下,使服務器先查詢設置的forwarders,如果它沒有得到回答,服務器就會自己尋找答案。如果設定的是only,服務器就只會把請求轉發到其它服務器上去。
forwarders
設定轉發使用的ip地址。默認的列表是空的(不轉發)。轉發也可以設置在每個域上,這樣全局選項中的轉發設置就不會起作用了。用戶可以將不同的域轉發到服務器上,或者對不同的域可以實現forward only或first的不同方式,也可以根本就不轉發。
 
C. 訪問控制
可以根據用戶請求使用的IP地址進行限制。
allow-notify
設定哪個主機上的輔域(不包括主域)已經進行了修改。allow-notify也可以在zone語句中設定,這樣全局options中的allow-notify選項在這裏就不起作用了。但它只對輔域有效。如果沒有設定,默認的是隻從主域發送notify信息。
allow-query
設定哪個主機可以進行普通的查詢。allow-query也能在zone語句中設定,這樣全局options中的allow-query選項在這裏就不起作用了。默認的是允許所有主機進行查詢。
allow-recursion
設定哪臺主機可以進行遞歸查詢。如果沒有設定,缺省是允許所有主機進行遞歸查詢。注意禁止一臺主機的遞歸查詢,並不能阻止這臺主機查詢已經存在於服務器緩存中的數據。
allow-v6-synthesis
設定哪臺主機能接收對ipv6的響應。
allow-transfer
設定哪臺主機允許和本地服務器進行域傳輸。allow-transfer也可以設置在zone語句中,這樣全局options中的allow-transfer選項在這裏就不起作用了。如果沒有設定,默認值是允許和所有主機進行域傳輸。
blackhole
設定一個地址列表,服務器將不會接收來自這個列表的查詢請求,或者解析這些地址。從這些地址來的查詢將得不到響應。默認值是none。
 
D. 接口
接口和端口(服務器回答來自於此的詢問)可以使用listen-on選項來設定。listen-on使用可選的端口和一個地址匹配列表(address_match_list)。服務器將會監聽所有匹配地址列表中所允許的端口。如果沒有設定端口,就使用默認的53。
允許使用多個listen-on語句。例如:
listen-on { 5.6.7.8; };
listen-on port 1234 { !1.2.3.4; 1.2/16; };
將在5.6.7.8 的ip地址上打開53端口,在除了1.2.3.4的1.2 網段上打開1234 端口。
如果沒有設定listen-on,服務器將在所有接口上監聽端口53。
listen-on-v6選項用來設定監聽進入服務器的ipv6請求的端口。
服務器並不象在ipv4中那樣對每個IPV6端口地址綁定一個獨立的socket。相反,它一直監聽ipv6通配的地址。這樣,對於listen-on-v6語句唯一的address_match_list的參數就是:{ any; }和{ none;}
多個listen-on-v6選項可以用來監聽多個端口:
listen-on-v6 port 53 { any; };
listen-on-v6 port 1234 { any; };
要使服務器不監聽任何ipv6地址,使用:
listen-on-v6 { none; };
如果沒有設定listen-on-v6語句,服務器將不會監聽任何ipv6地址。
 
E. 查詢地址
如果服務器查不到要解析的地址,它將會查詢其它域名服務器。query-source可以用來設定這類請求所使用的地址和端口。對於使用ipv6發送的查詢,有一個獨立的query-source-v6選項。如果address是*或者被省略了,則將會使用一個通配的IP地址
(INADDR ANY)。如果port是*或者被省略了,則將會使用一個隨機的大於1024的端口。
默認爲:
query-source address * port *;
query-source-v6 address * port *;
注:query-source選項中設置的地址是同時用於UDP和TCP兩種請求的,但是port僅僅用
於UDP請求。TCP請求使用的是隨機的大於1024的端口。
 
F. 域傳輸
BIND有適當的機制來簡化域傳輸,並限定系統傳輸的負載量。下列設定應用於域傳輸:
also-notify
定義一個用於全局的域名服務器IP地址列表。無論何時,當一個新的域文件被調入系統,域名服務器都會向這些地址,還有這些域中的NS記錄發送NOTIFY信息。這有助於更新的域文件儘快在相關的域名服務器上收斂同步。如果一個also-notify列表配置在一個zone語句中,全局options中的also-notify語句就會在這裏失效。當一個zone-notify語句被設定爲no,系統就不會向在全局中also-notify列表中的IP地址發送NOTIFY消息。缺省狀態爲空表(沒有全局通知列表)。
max-transfer-time-in
比設定時間更長的進入的域傳輸將會被終止。默認值是120分鐘(2小時)。
max-transfer-idle-in
在設定時間下沒有任何進展的進入域傳輸將會被終止。默認爲60分鐘(1小時)。
max-transfer-time-out
運行時間比設定的時間長的發出的域傳輸將會被終止。默認爲120分鐘(2小時).
max-transfer-idle-out
在設定時間下沒有任何進展的發出的域傳輸將會被終止。默認爲60分鐘(1小時)。
serial-query-rate
輔域名服務器將會定時查詢主域名服務器,來確定域的串號是否改變。每個查詢將會佔用一些輔域名服務器網絡帶寬。爲限制佔用的帶寬,BIND9可以限制每個查詢發送的頻率。serial-query-rate的值是一個整數,就是每秒能發送的最大查詢數。默認值爲20。
serial-queries
在BIND8中, serial-queries選項設定了在任何時候允許達到的最大的併發查詢數。BIND9不限制串號查詢的數量並忽略了serial-queries選項。它會使用serial-query-rate選項來限制查詢的頻率。
transfer-format
域傳輸可以用兩種不同格式,one-answer和many-answer。transfer-format選項使用在主域名服務器上,用來確定發送哪種格式。one-answer在每個資源記錄傳輸中使用一個
DNS消息。many-answer則將儘可能多的資源記錄集中在一個消息中。many-answer是
更加有效的,但只有相對比較新的輔域名服務器才支持它,如BIND9、BIND8.x 和打了補丁的BIND4.9.5。默認的設置爲many-answer。使用server語句中的相關選項,可以替代全局選項中的transfer-format設置。
transfers-in
可以同時運行的進入的域傳輸的最大值。默認值爲10。增加transfers-in的值,可以加速輔域的收斂速度,但也可能增加本地系統的負載。
transfers-out
可以同時運行的發出的傳輸的最大值。超過限定的域傳輸請求將會被拒絕。默認值爲10。
transfers-per-ns
從一臺指定的遠程域名服務器,同時進行的進入的域傳輸的最大值。默認值2。增加
transfers-per-ns的值,會加速輔域的收斂速度,但也可能增加遠程系統的負載。使用
server語句中的transfer短語可以替代全局選項中的transfers-per-ns。
transfer-source
transfer-source決定在從外部域名服務器上得到域傳送數據時,選哪個本地的ip地址使用在IPV4的TCP連接中。它可以選定IPV4的源地址,和可選的UDP端口,用於更新的查詢和轉發的動態更新。不過不做設置,它會缺省挑選一個系統中的地址(常常是最靠近遠程終端服務器的接口地址)。但這個地址必須已經配置在遠程終端的allow-tranfer選項中,才能進行域傳送。此語句爲所有的域設定了transfer-source,但如果view或zone中也使用了transfer-source語句,則全局選項中的配置就在這裏失效了。
transfer-source-v6
和transfer-source一樣,只是域傳輸是通過IPV6執行的。
notify-source
notify-source確定使用哪些本地的源地址和可選的UDP端口,用於發送NOTIFY消息。這個地址必須在輔域名服務器的master域或在allow-notify中設置。它會爲所有域設定
notify-source, 但如果view或zone中也使用了notify-source語句,則全局選項中的配置就在這裏失效了。
notify-source-v6
與notify-source類似,但應用於ipv6地址的notify報文的發送。
 
G. 操作系統資源限制
可以限制服務器對許多系統資源的使用。這些就是通過調節資源限制的數值來完成的。例如,1G可以代替1073741824,限定一個十億字節的限制。Unlimited 要求不限制使用,或者最大可用量。Default 將會使用服務器啓動時的缺省值。
下列選項設定了域名服務器進程的操作系統資源佔用限制。一些操作系統可能不支持一些
或所有的限制。在這樣的系統中,當使用不被支持的限制時,會產生一個告警。
coresize
core dump文件的最大值尺寸。默認值爲default
datasize
服務器可以使用的最大數據內存量。默認值爲default。這是一個在服務器系統內存中
已經設置了的參數。如果服務器要超過這個限制的內存量,則會失敗,這將使服務器不能
提供DNS服務。所以,這個選項作爲一種限制服務器所使用的內存量的方式就不太有效,但是它能夠將操作系統設置的太小的缺省數據尺寸增大。如果要限制服務器使用的內存量,可以使用max-cache-size和recursive-clients選項。
files
服務器可以同時打開的最大文件數。默認是unlimited。
stacksize
服務器可以使用最大的堆棧內存量。默認值爲default。
 
H. 服務器資源限制
下列選項設定了服務器資源使用限制,這是由域名服務內部做的而不是操作系統設定的。
max-ixfr-log-size
此選項比較老;它由BIND8兼容接受或者忽略。
recursive-clients
服務器同時爲用戶執行的遞歸查詢的最大數量。默認值1000,因爲每個遞歸用戶使用許多位內存,一般爲20KB,主機上的recursive-clients選項值必須根據實際內存大小調整。
tcp-clients
服務器同時接受的TCP連接的最大數量,默認值100。
max-cache-size
服務器緩衝使用的最大內存量,用比特表示。但在緩存數據的量達到這個界限,服務器將會使記錄提早過期這樣限制就不會被突破。在多視圖的服務器中,限制分別使用於每個視圖的緩存。默認值沒有限制,意味着只有當總的限制被突破的時候記錄纔會被緩存清除。
 
I. 週期性任務間隔
cleaning-interval
服務器將在cleaning-interval的每一時間中從緩存中清除過期的資源記錄。默認爲60分鐘,如果設置爲0,就不會有週期性清理。
heartbeat-interval
服務器將會爲所有標記dialup的域運行維護任務,無論它的間隔在何時到期。默認爲60分鐘,合理值不超過1天(1440 分鐘)。如果設定爲0,不會爲這些域產生域維護。
interface-interval
服務器將在每個interface-interval時間掃描網絡接口表。默認爲60分鐘。如果設置爲0,僅當配置文件被加載時纔會進行接口掃描。在掃描之後,所有新接口上的監聽器將會被打開(listen-on配置使用的接口)。關閉接口上的監聽器將會被清除。
statistics-interval
域名服務器統計將會在每個statistics-interval時刻被記入日誌。默認值60分鐘,如果設爲0,就沒有統計數據記入日誌。
注意:BIND9 不支持
 
J. 拓撲
當服務器從一個域名服務器列表中選擇一個域名服務器查詢時,這些域名服務器是沒有什麼不同的,但是服務器會先選擇在拓撲結構上距離自己最近的服務器去做解析。拓撲語句使用一個地址匹配列表並且以一個特殊方式解釋它。每個頂層列表元素被賦了一段距離,非否定元素得到它們在列表中的位置的距離,匹配距離表的開頭越近,它離服務器的距離就越小。否定匹配元素將會從服務器分配最大距離;沒有匹配的地址將會得到一個比任何非否定表元素都遠的並且比任何否定元素近的距離。例如:
topology {
10/8;
!1.2.3/24;
{ 1.2/16; 3/8; };
};
最優先網段10的服務器,然後是在網絡1.2.0.0(網絡掩碼255.255.0.0)和3.0.0.0(網絡掩
碼255.0.0.0);再就是沒列出來的,但是沒有否定的網段。否定的網段1.2.3 的主機(網絡掩
碼255.255.255.0)。
默認拓撲爲:
topology { localhost; localnets; };
注意:BIND9不支持拓撲選項。
 
K. sortlist 語句
對一個DNS詢問的響應包括形成一個資源記錄集(RR集)的多資源記錄(RRs)。名稱服務器將會以不確定的順序返回在RRset中的RRs(參見rrset-order語句)。用戶端的解答器會重新適當的排列,也就是說,使用任何在本地網上的地址優先於其他的地址。儘管如此,不是所有的解答器可以做到或者正確配置。當用戶使用一個本地服務器的時候,服務器可以基於用戶地址進行分類。這隻要求配置名稱服務器,而不是所有用戶端。
sortlist語句(如下)使用一個地址匹配表甚至比拓撲語句還要特殊的解釋它。每個在sortlist 的頂層語句必須自己就是一個清楚的擁有一個或兩個元素的地址匹配表。每個頂級表的第一個元素(可能是一個IP地址,一個IP前綴,一個ACL名稱或者一個地址匹配表)與查詢源地址進行匹配檢查直到找到匹配的地址。
一旦查詢的源地址被匹配,如果頂級語句只包括一個元素的話,真正的匹配於源地址的原始元素就被用來選擇地址,對應的轉移到了響應的開始。如果語句是兩個元素的表,那麼第二個元素遵照拓撲語句中地址匹配表的方式進行處理。每個頂級元素被賦予一個距離和與響應的開頭距離最近的地址。
在下列例子中,任何來自於任何主機地址的查詢將會得到本地網上第一首選地址的響應。下一個首選地址在網段192.168.1/24上,既可以在192.168.2/24或192.168.3/24網段之後。從一臺在192.168.1/24網段上的主機收到的查詢將會優先本網段和192.168.2/24和192.168.3/24網。而來自192.168.4/24或192.168.5/24上主機的查詢將只優先直連的網段。
sortlist {
{ localhost; //IF 主機名
{ localnets;
192.168.1/24; //THEN 在下列網中最適合
{ 192.168.2/24; 192.168.3/24; }; }; }; //IF 在C類192.168.1
{ 192.168.1/24; //THEN 使用.1, 或.2 或.3
{ 192.168.2/24; 192.168.3/24; }; }; };
{ 192.168.2/24; //IF C類192.168.1
{ 192.168.2/24; //THEN使用2, 或.1 或.3
{ 192.168.1/24; 192.168.3/24; }; }; };
{ 192.168.3/24; //IF 在C類192.168.3
{ 192.168.1/24; 192.168.2/24; }; }; }; //THEN使用.3 或.1 或.2
};
};
下個例子將給出一個本地主機和直接連接到網上的主機的合理的狀態(behavior)。它很象BIND4.9.x分類的地址狀態。從本地主機發給查詢的響應支持任何直接連接的網絡,從其他直接連接網絡上的主機發送給查詢的響應優先在相同網段上的地址。對其他查詢的響應沒有分類。
sortlist {
{ localhost; localnets; };
{ localnets; };
};
 
L. RRset 排序
當多重記錄在一個解答中被返回的時候,設定在響應中的記錄順序是很有用的.。
rrset-order語句允許對在多記錄響應下的記錄順序的設定。參見sortlist語句。
一個order_spec定義如下:
[ class class_name ][ type type_name ][ name "domain_name"] order ordering
如果沒有設定類,默認值爲ANY。如果沒有設定類型,默認值爲ANY。如果沒有設定
名稱,默認值爲”*”。
合法的排序值是:
fixed:記錄以它們在域文件中的順序
random:記錄以隨機順序被返回
cyclic:記錄以環順序被返回
例如:
rrset-order {
class IN type A name "host.example.com" order random;
order cyclic;
};
將會使得任何處於IN類中的A類記錄的響應以隨機順序返回,IN 類以"host.example.com"爲後綴。其他的記錄以循環記錄被返回。
如果多重rrset-order語句出現,它們並不組合在一起,只適用於最後一個條。
注意:rrset-order語句不被BIND9支持,BIND9目前只支持"random-cyclic"排序,服務器隨機選擇RRset集中的開始點,有順序返回在那個點開始的記錄。如果需要的話圍繞RRset
結尾。
 
M. 合成的IPV6響應
許多現存的子域解答器支持ipv6的DNS查詢(定義在RFC1986 中,使用AAAA 記錄進行前向查詢和ip6.int域中的”nibble labels”進行反向查詢)但是不支持RFC2874-style 查詢(使用A6記錄和在ip6.arpa 中的二進制標籤)對於那些希望繼續使用子域解答器而不是轉到
BIND9 lightweight 解答器的人來說,BIND 9提供一種自動把RFC1886-型查詢轉換成
RFC2874-型查詢的方法。返回合成的AAAA和PTR記錄。
這個性質默認下是無效的,可以在分用戶基礎上添加一個allow-v6-synthesis
{ address_match_list };子句到選項或者視圖語句中。當它被激活時,遞歸AAAA查詢使服
務器先進行A6查詢,如果失敗,執行AAAA查詢。不管哪個成功,結果都作爲一個合成的AAAA 記錄返回。
類似的,在ip6.int中的遞歸PTR查詢將會促使一個ip6.arpa查詢使用二進制標籤,如果失敗,執行另一個在ip6.int中的查詢,結果將會以在ip6.int中的合成PTR記錄返回。合成記錄的TTL 爲0值。合成響應的DNSSEC確認當前並不被支持;也沒有了AD標記。
注:allow-v6-synthesis僅爲提供了遞歸服務的用戶執行。
 
N. 調諧
lame-ttl
設定緩存有問題服務器指示的秒數。0使不緩存(不被推薦)。默認值600(10 分鐘)。最大值1800(30 分鐘)。
max-ncache-ttl
爲降低網絡流量和提升服務器存儲否定回答的性能。max-ncache-ttl以秒爲單位設定這些回答的保存時間。默認max-ncache-ttl是10800秒(3小時)。max-ncache-ttl不能超過7天,如果設成一個更大的值,則將會被自動減爲7天。
max-cache-ttl
max-cache-ttl設定了服務器儲存普通(肯定)答案的最大時間。默認值一週(7 天)。
min-roots
一個請求要求的最小的根服務器數量。默認爲2。
注意:不被BIND9 支持
sig-validity-interval
設定未來作爲動態更新結果的自動生成的DNSSEC信號過期的天數。默認是30天。信號的初始時間無條件設爲在當前時間的前一個小時,以允許一個有限的時鐘偏差。
min-refresh-time
max-refresh-time
min-retry-time
max-retry-time
這些選項控制了服務器在更新一個域(詢問SOA變化)或者重試失敗的傳輸時的狀態。通常域的SOA值(但是這些值是由主服務器設定的)幾乎不給此級服務器管理者對它們內容的控制。
這些選項允許管理者爲每域,每個視圖或者全局設定一個最小或者最大更新和重試時間。這些選項對於此級和根域是有效的並且設定SOA更新和重試時間。
 
O. 統計文件
由BIND9產生的統計文件和由BIND8產生的類似,但不完全一樣。
一個統計數據開始於行+++ Statistics Dump +++ (973798949),這裏出現的數字是一個標準UNIX型的時間戳,從1970年1月1日開始以秒計。緊跟這行的是一系列行,包括一個
記數器類型,記數器值,任意的域名和任意的視圖名,沒有所列的視圖和域的行是整個服務器的整體統計。具有域和視圖的行以給定的視圖和域命名(對默認的視圖來說視圖名缺省)。
這個統計數據以行--- Statistics Dump ---(973798949)結束,在這數字是和開始行的數字一樣的。Success對服務器或者域做出的成功查詢。定義一個成功查詢是查詢返回非錯誤響應而不是返回推薦響應。
Referral:導致推薦響應查詢
Nxrrset:導致沒有數據的非錯誤查詢的響應
Nxdomain:導致NXDOMAIN 的查詢數量
Recursion:使服務器運行遞歸以找出最後答案的查詢數量
Failure:導致失敗的查詢數量

發佈了5 篇原創文章 · 獲贊 25 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章