本節書摘來自異步社群《dns與bind(第5版)》一書中的第10章,第10.10節,作者: 【美】joseph davies 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
預設情況下,bind解析器發送遞歸查詢,而bind名稱伺服器會做一些必要工作來進行應答。(如果忘了遞歸查詢的工作原理,請參閱本書第2章。)在為遞歸查詢尋找答案的過程中,名稱伺服器會為來自其他區域的非權威資訊建立緩存。
在某些情況下,并不希望名稱伺服器額外地為遞歸查詢尋找答案,或是建立資料緩存。root名稱伺服器就是個例子。root名稱伺服器非常繁忙,不能再浪費額外的時間,為遞歸查詢尋找答案。相反,root名稱伺服器僅依據其擁有的權威資料作出應答。該應答可能包含着答案,但更有可能包含着到其他名稱伺服器的指引。由于root伺服器不支援遞歸查詢,是以它們不用為非權威資料建立緩存,否則它們的緩存将會非常巨大。1
要使bind名稱伺服器工作在非遞歸模式,可以在配置檔案中配置以下語句:
現在,伺服器會把遞歸查詢看作非遞歸查詢來做出應答。
如果不想讓名稱伺服器建立緩存,除了使用recursion no,還有一個配置選項需要搭配使用:
這樣就使伺服器在為應答建立附加資料段時,不會去抓取缺少的glue記錄。bind 9名稱伺服器并不會抓取glue記錄,是以bind 9不使用fetch-glue子語句。
如果選擇讓一個名稱伺服器工作在非遞歸模式,那麼就不要在任何主機的resolv.conf檔案中列出該名稱伺服器。雖然可以将名稱伺服器設定為非遞歸模式,但是解析器無法使用非遞歸名稱伺服器2。如果名稱伺服器需要繼續為一個或多個解析器提供服務,可以使用allow-recursion子語句,在bind 及其後續版本(包括bind 9)上都支援該功能。allow-recursion使用位址比對清單作為參數:凡是比對該清單的查詢者都可以發送遞歸查詢,但是對待其他查詢者就好像關閉了遞歸功能一樣。
allow-recursion預設的設定是對所有ip位址都提供遞歸查詢。
還有,不要讓非遞歸名稱伺服器作為轉發器。當名稱伺服器把另一個伺服器作為轉發器時,它會将遞歸查詢轉發給轉發器。不過可以使用allow-recursion,僅允許經過授權的名稱伺服器使用轉發器。
可以讓非遞歸名稱伺服器作為區域資料的權威伺服器(也就是說,可以告訴父名稱伺服器[parent nameserver],将對區域的查詢指向該伺服器)。能夠這麼做的原因是名稱伺服器之間互相發送的是非遞歸查詢。