DNS總結(jié)
DNS 名稱解析的查詢模式DNS 名稱解析的查詢模式1、遞歸查詢:當(dāng)收到客戶端的遞歸查詢請求后,當(dāng)前DNS 服務(wù)器只會向DNS 客戶端返回兩種信息:要么是在該DNS 服務(wù)器上查詢到的結(jié)果,要么是查詢失
DNS 名稱解析的查詢模式
DNS 名稱解析的查詢模式
1、遞歸查詢:當(dāng)收到客戶端的遞歸查詢請求后,當(dāng)前DNS 服務(wù)器只會向DNS 客戶端返回兩種信息:要么是在該DNS 服務(wù)器上查詢到的結(jié)果,要么是查詢失敗,如果當(dāng)前DNS 服務(wù)器中無法解析名稱,它并不會主動告知DNS 客戶端其它可能的DNS 服務(wù)器,而是自行向其它DNS 服務(wù)器查詢并完成解析。如果其它DNS 服務(wù)器解析失敗,則DNS 服務(wù)器將向DNS 客戶端返回查詢失敗的消息。遞歸即是有來有往。
2、迭代查詢:迭代查詢通常在一臺DNS 服務(wù)器向另一臺DNS 服務(wù)器發(fā)出解析請求時(shí)使用。如果當(dāng)前DNS 收到其它DNS 服務(wù)器發(fā)來的迭代查詢請求并且未能在本地查詢到所需要的數(shù)據(jù),則當(dāng)前DNS 服務(wù)器將告訴發(fā)起查詢的DNS 服務(wù)器另一臺DNS 服務(wù)器的IP 地址。然后,再由發(fā)起查詢的DNS 服務(wù)器自行向另一臺DNS 服務(wù)器發(fā)起查詢;依次類推,直到查詢到所需數(shù)據(jù)為止。如果到最后一臺DNS 服務(wù)器仍沒有查到所需數(shù)據(jù),則通知最初發(fā)起查詢的DNS 服務(wù)器解析失敗。迭代的意思就是若在某地查不到,該地就會告知查詢者其它地方的地址。讓查詢轉(zhuǎn)到其它地方去查。
說白就是這樣:
1. 遞歸查詢:
一般客戶機(jī)和服務(wù)器之間屬遞歸查詢,即當(dāng)客戶機(jī)向DNS 服務(wù)器發(fā)出請求后, 若DNS 服務(wù)器本身不能解析, 則會向另外的DNS 服務(wù)器發(fā)出查詢請求,得到結(jié)果后轉(zhuǎn)交給客戶機(jī);
2. 迭代查詢(反復(fù)查詢):
一般DNS 服務(wù)器之間屬迭代查詢,如:若DNS2不能響應(yīng)DNS1的請求,則它會將DNS3的IP 給DNS2,以便其再向DNS3發(fā)出請求;
舉例:比如學(xué)生問老師一個(gè)問題,王老師告訴他答案這之間的叫遞歸查詢。這期間也許王老師也不會,這時(shí)王老師問張老師,這之間的查詢叫迭代查詢!
Forwarder
為了提高我們這個(gè)DNS 服務(wù)器的查詢效率,我們會采取這樣的措施:把非本地域的解析請求轉(zhuǎn)發(fā)到我們的ISP 提供的DNS 。
這個(gè)功能是由forwarder 選項(xiàng)來完成的。所謂的 forwarder ,就是當(dāng)某一臺 NS 主機(jī)遇到非本機(jī)負(fù)責(zé)的 zone ( slave zone 也屬于本機(jī)負(fù)責(zé)的范圍) 查詢請求的時(shí)候,將不直接向 root zone 查詢而把請求轉(zhuǎn)交給指定的 forwarder (一臺或多臺) 主機(jī)代為查詢。如果你不了解 DNS 的查詢模式,那么很難理解這個(gè) forwarder 的意義和好處。
我們知道,當(dāng)DNS 服務(wù)器接到客戶端主機(jī)的查詢請求時(shí),首先會檢查這個(gè)查詢是否屬于本機(jī)管轄,否則將轉(zhuǎn)向 root zone 再逐級的查詢下去,最后再把查詢結(jié)果告訴客戶端。在這個(gè)過程之中,DNS 服務(wù)器還會將查詢到的結(jié)果存放到緩
,存中。只要緩存中的 TTL 沒過期,在下次遇到同樣查詢的時(shí)候,就可以直接將結(jié)果響應(yīng)給客戶端,而無需再重復(fù)上次的查詢流程。
如果DNS 服務(wù)器上指定了forwarder ,那這個(gè) DNS 發(fā)現(xiàn)緩存中沒有記錄時(shí),將不向 root 查詢,而是向 forwarder 送出同樣的請求(轉(zhuǎn)發(fā)),然后等待查詢結(jié)果,即把逐級往下查詢這個(gè)耗費(fèi)精力的動作,交給 forwarder 負(fù)責(zé)。但無論這個(gè)結(jié)果是自己直接查詢得來的,還是 forwarder 送回來的,DNS 服務(wù)器都會保存一份數(shù)據(jù)在緩存中。這樣,以后的相同查詢就快多了,這對于DNS 所服務(wù)的客戶端而言查詢效率會提高很多。
forwarder 機(jī)制的好處并非僅是上面所提到的效率提升,對于整個(gè)網(wǎng)絡(luò)流量(尤其是對外的流量) 也是有幫助的。比方說,你的內(nèi)部網(wǎng)絡(luò)需要 10 臺 DNS 來提供服務(wù),你只需在某一臺能直接與外界溝通的計(jì)算機(jī)上架設(shè) DNS 服務(wù),然后將其它內(nèi)部DNS 的 forwarder 指向該服務(wù)器就行了。這樣可能本來需要 10 次的 root 查詢,在 forwarders 的機(jī)制下,就只需 1 次而已。連同下層的往返查詢來計(jì)算的話,總體上所省下的對外查詢就更多了,再加上緩存帶來的好處,forwarder 所降低的 DNS 流量是非常顯著的。
事實(shí)上,在本章開始我們就提到如何集中管理內(nèi)部局域網(wǎng)用戶域名解析問題,解決的方法就是:在本地DNS 的 forwarder 設(shè)定為 ISP 的 DNS ,局域網(wǎng)用戶把DNS 都設(shè)置成本地DNS 地址,在進(jìn)行外部域名解析時(shí),我們的DNS 把解析請求轉(zhuǎn)發(fā)給ISP 的DNS ;又因?yàn)?ISP 上的 DNS 也有緩存的關(guān)系,所以這樣設(shè)置查詢還可以提高速度。
羅嗦了半天,現(xiàn)在看看如何配置。具體的設(shè)置很簡單:在named.conf 的options 部分添加這樣一行:
forwarders { 211.136.17.107; 202.102.152.3; };
如此設(shè)置完畢,那么所有非本區(qū)域的查詢都會直接轉(zhuǎn)發(fā)到forwarders 指定的DNS 服務(wù)器上去。
§§ 測試DNS
在Linux 上我們可以用ping 、nslookup 、dig 、host 等命令來測試DNS 是否工作正常,這些小工具都很簡單,以host 為例:
[root@rh73 ']# host ns.silly.com
,6.options 語句
options 語句的定義和使用:
options 語句用來設(shè)置可以被整個(gè)BIND 使用的全局選項(xiàng)。這個(gè)語句在每個(gè)配置文件中只有一處。如果出現(xiàn)多個(gè)options 語句,則第一個(gè)options 的配置有效,并且會產(chǎn)生一個(gè)警告信息。
如果沒有options 語句,則每個(gè)選項(xiàng)使用缺省值。
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
回答針對服務(wù)器版本的請求時(shí)的內(nèi)容。缺省返回的是服務(wù)器的真實(shí)版本。
directory
服務(wù)器的工作目錄。配置文件中所有使用的相對路徑,指的都是在這里配置的目錄下。大多數(shù)服務(wù)器的輸出文件(如named.run )都缺省生成在這個(gè)目錄下。如果沒有設(shè)定目錄,工作目錄缺省設(shè)置為服務(wù)器啟動時(shí)的目錄?. ?。指定的目錄應(yīng)該是一個(gè)絕對路徑。
named-xfer
這個(gè)選項(xiàng)已經(jīng)被廢棄了。它在BIND8 中,它用來給named-xfer 程序設(shè)定路徑名。在BI ND9中,不需要單獨(dú)的named-xfer 程序;它的功能已經(jīng)內(nèi)置在域名服務(wù)器中。 tkey-domain
這個(gè)域名將會附帶在由TKEY 生成的所有共享密匙名字的后面。當(dāng)用戶請求進(jìn)行TKEY 交換時(shí),它會為密匙設(shè)定或不設(shè)定所要求的名稱。如果設(shè)置了tkey_domain,共享密匙的名字將會是"client specified part" (用戶設(shè)定的部分) "tkey-domain" 。否則,共享密匙的名字將是"random hex digits" (隨機(jī)的16 進(jìn)制數(shù)) "tkey-domain" 。在大多數(shù)情況下,domainname 應(yīng)該是服務(wù)器的域名。
tkey-dhkey
,針對使用Diffie-Hellman 的TKEY 模式的用戶,服務(wù)器用來生成共享密匙的Diffie-Hellm an 密匙。服務(wù)器必須可以從工作目錄中調(diào)入公共和私人密匙。大多數(shù)情況下,密匙的名稱應(yīng)該是服務(wù)器的主機(jī)名。
dump-file
當(dāng)執(zhí)行rndc dumpdb 命令時(shí),服務(wù)器存放數(shù)據(jù)庫文件的路徑名。如果沒有指定,缺省名字是named_dump.db。
memstatistics-file
服務(wù)器輸出的內(nèi)存使用統(tǒng)計(jì)文件的路徑名。如果沒有指定,默認(rèn)值為named.memstats 。 注意:還沒有在BIND9中實(shí)現(xiàn)!
pid-file
進(jìn)程ID 文件的路徑名。如果沒有指定,默認(rèn)為/var/run/named.pid。pid-file 是給那些需要向運(yùn)行著的服務(wù)器發(fā)送信號的程序使用的。
statistics-file
當(dāng)使用rndc stats 命令的時(shí)候,服務(wù)器會將統(tǒng)計(jì)信息追加到的文件路徑名。如果沒有指定,默認(rèn)為named.stats 在服務(wù)器程序的當(dāng)前目錄中。
port
服務(wù)器用來接收和發(fā)送DNS 協(xié)議數(shù)據(jù)的UDP/TCP端口號。默認(rèn)為53。這個(gè)選項(xiàng)主要用于服務(wù)器的檢測;因?yàn)槿绻皇褂?3端口的話,服務(wù)器將不能與其它的DNS 進(jìn)行通訊。 random-device
服務(wù)器使用的entropy 源:entropy 主要用于DNSSEC 操作,如TKEY 的數(shù)據(jù)交換和加密域的動態(tài)更新。此選項(xiàng)指定了entropy 將會從哪個(gè)設(shè)備(或文件)中讀取信息。如果它是一個(gè)文件,則當(dāng)文件耗盡后,需要entropy 的操作將會失敗。如果沒有指定,默認(rèn)值是/d
,ev/random(或等價(jià)的),如果它存在,否則就是沒有。random-device 選項(xiàng)是在服務(wù)器啟動時(shí),初始化配置時(shí)起作用的,在以后的重啟時(shí)則被忽略。
A.Boolean 選項(xiàng)
auth-nxdomain
如果是yes ,那么AA 位將一直設(shè)置成NXDOMAIN 響應(yīng),甚至在服務(wù)器不是授權(quán)服務(wù)器的情況下都是這樣的。默認(rèn)值是no ;這與BIND8不同。如果用戶使用的是非常老版本的DN S 軟件,則有必要把它設(shè)置成yes 。
deallocate-on-exit
此選項(xiàng)在BIND8中用于檢查出口處內(nèi)存泄露。BIND9忽略此選項(xiàng),并始終進(jìn)行檢查。 dialup
如果是yes ,那么服務(wù)器將會像在通過一條按需撥號的鏈路進(jìn)行域傳送一樣,對待所有的域(按需撥號就是在服務(wù)器有流量的時(shí)候,鏈路才連通)。根據(jù)域類型的不同它有不同的作用,并將集中域的維護(hù)操作,這樣所有有關(guān)的操作都會集中在一段很短的時(shí)間內(nèi)完成,每個(gè)he artbeat-interval 一次,一般是在一次調(diào)用之中完成。它也禁止一些正常的域維護(hù)的流量。默認(rèn)值是no 。
dialup 選項(xiàng)也可以定義在view 和zone 語句中,這樣就會代替了全局設(shè)置中dialup 的選項(xiàng)。
如果域是一個(gè)主域,服務(wù)器就會對所有輔域發(fā)送NOTIFY 請求。這將激活輔域名服務(wù)器中的對域的序列號的檢驗(yàn)。這樣當(dāng)建立一個(gè)連接時(shí),輔域名服務(wù)器才能確認(rèn)這個(gè)域的傳輸合法性。
,如果這個(gè)域是一個(gè)輔域或是末梢域(stub zone ),那么服務(wù)器將會禁止通常的“zone up to date ”(refresh )請求,為了能發(fā)送NOTIFY 請求,只有在heartbeat-interval 過期之后才執(zhí)行。
通過下列的設(shè)置,可以實(shí)現(xiàn)更好的控制。
1、notify 只發(fā)送NOTIFY 信息。
2、notify-passive 發(fā)送NOTIFY 信息,并禁止普通的刷新(refresh )請求。
3、refresh 禁止普通的刷新處理,當(dāng)heartbeat-interval 過期時(shí)才發(fā)送刷新請求。
4、passive 只用于關(guān)閉普通的刷新處理。
fake-iquery
在BIND8中,此選項(xiàng)用來模擬陳舊的DNS 查詢類型IQUERY 。BIND9不再進(jìn)行IQUERY 模擬。
fetch-glue
這個(gè)選項(xiàng)以后不再使用。
has-old-clients
這個(gè)選項(xiàng)在BIND8中執(zhí)行有問題,BIND9則忽略了這個(gè)選項(xiàng)。為了達(dá)到has-old-clients yes 的預(yù)期效果,可以設(shè)定兩個(gè)獨(dú)立選項(xiàng)auth-nxdomain yes 和rfc2308-type1 no 來代替。
host-statistics
在BIND8中,它可以保留每臺和域名服務(wù)器交互的主機(jī)統(tǒng)計(jì)信息。BIND9中不支持。 maintain-ixfr-base
此選項(xiàng)不再使用了。在BIND8用于判定是否保存了增量域傳輸?shù)奶幚砣罩?。BIND9任何可能的時(shí)候都會保存?zhèn)鬏斎罩?。如果需要禁止流出的增量域傳輸,可以使用provide-ixfr no 。