linux DNS服務器故障解決

現在UNIX類操縱系統(UNIX、Linux、BSD)的域名服務器絕大多數都是用BIND來架設的。由於DNS服務器負責域名的解析工作,其重要性不言而喻。如果在Linux網絡中無法進行域名解析,很可能是沒有在本地指定有效的域名服務器,通常這種情況比較常見。大多數DNS故障是因爲配置文件的語法錯誤,或者是對計算機分配了錯誤的地址造成的。

Linux中的DNS配置文件

Linux下主要DNS配置文件有以下幾個。

/etc/hosts:主機的一個列表文件,包含(本地網絡中)已知主機的一個列表。如果系統的 IP 不是動態生成的,就可以使用它。
/etc/host.conf:轉換程序控制文件,告訴網絡域名服務器如何查找主機名(通常是/etc/hosts,然後就是名稱服務器。可通過netconf對其進行更改)。對於簡單的主機名解析(點分表示法),在請求DNS或NIS網絡名稱服務器之前,/etc/hosts.conf 通常會告訴解析程序先查看這裏。
/etc/resolv.conf:轉換程序配置文件,在配置程序請求BIND域名查詢服務查詢主機名稱時必須告訴程序使用哪個域名服務器和IP地址來完成這個任務
Linux上的域名服務由named守護進程控制,該進程從主文件/etc/named.conf中獲取信息,包括一組將主機名稱映射爲IP地址的各種文件。下面是named配置文件族的詳細內容。
/etc/named.conf:主文件,設置一般的name參數,指向該服務器使用的域數據庫的信息源。
/var/named/named.ca:根域名配置服務器指向文件,指向根域名配置服務器,用於告訴緩存服務器初始化。
/var/named/localhost.zone:Localhost區正向域名解析文件,用於將本地IP地址(127.0.0.1)轉換爲回送方的Localhost名字。
/var/named/name.local:Localhost區反向域名解析文件,用於將Localhost名字轉換爲本地回送IP地址(127.0.0.1)。
/var/named/name2ip.conf:用戶配置區的正向解析文件,將主機名映射爲IP地址的區文件。
/var/named/ip2name.conf:用戶配置區的反向解析文件,將IP地址映射爲主機名稱的區文件。

Linux DNS故障診斷

當進行DNS故障診斷時,可參照下面的步驟。

(1)對全部記錄檢查和確認主機名稱的拼寫,記住絕對地址是以“.”結尾的。
(2)如果在區文件中做了任何修改,務必修改SOA記錄中的序列號,這將保證服務器正確地重新上載文件。
(3)確定輸入到主區的名稱和IP地址匹配反向指針文件中的反向指針信息。
(4)檢查防火牆相關程序。
(5)使用命令檢查(ping、dig、nslookup、named-checkzone、named-checkconf)。
(6)使用Dlint軟件檢查DNS故障。

工具的應用

1.語法和規則檢查

Dlint是一個專門檢查DNS配置文件開放源代碼的軟件,運行它要求系統安裝Perl語言和Dig命令(BIND中一個軟件包)。

Dlint軟件的下載和安裝則需要執行以下命令。


#wegt http://www.domtools.com/pub/Dlint1.4.0.tar.gz
#gunzip Dlint1.4.0.tar.gz
#tar vxf Dlint1.4.0.tar
#cd Dlint1.4.0
#make install


系統會將Dlint安裝在/usr/bin/目錄下。

Dlint首先檢查配置文件的拼寫錯誤。有A(Address)記錄的主機名稱必須有PTR(反向解析記錄的簡稱)記錄。如果有A記錄的主機名稱沒有PTR,則配置文件不能通過。Dlint可以在用戶配置文件中爲A記錄查找丟失的PTR記錄。Dlint會記錄in-addr.arpa區帶的每一條PTR記錄是否有對應的A記錄存在。Dlint會以遞歸的方式檢查子區帶,查找它們的配置問題。Dlint軟件可以分析任何DNS區帶。

2.DNS服務器工作狀態檢查

在維護DNS服務器時,網管員希望知道到底是哪些用戶在使用DNS服務器,同時也希望能對DNS狀態查詢做一個統計。通常可以想到用Tcpdump -I eth0 port 53來查看DNS查詢包。Tcpdump是一個命令行方式的嗅探器,它可以根據需要顯示出經過一個網絡接口的所有數據包,供網絡管理員對網絡進行檢測。但由於採用的是命令行方式,對這些數據包的分析可能會比較困難。這裏我們可以使用DNStop查詢DNS服務器狀態。

DNStop依賴Tcpdump和pcap庫(libpcap)對網絡上傳輸的數據包進行截獲和過濾,所以您需要檢查系統是否安裝相應軟件,可以使用以下命令進行檢查。

#rpm -qa|grep Tcpdump; rpm -qa|grep libpcap

DNStop的下載和安裝需要執行以下命令。

#wegt http://www.stearns.org/DNStop/DNStop-20040309-1.i386.rpm

#rpm -ivh DNStop-20040309-1.i386.rpm

如果想查看通過eth0的DNS網絡流量可以使用以下命令。


#DNStop -s eth0
0 new queries, 6 total queries Mon Jul 6 09:54:35 2004
Sources count %
192.168.0.117 4 66.7
192.168.0.143 1 16.7
192.168.0.42 1 16.7


在運行DNStop的過程中,可以依次輸入如下命令:s、d、t、1、2、3、ctrl+r、ctrl+x,以交互方式來顯示不同的信息。
1 —(TLD)記錄查詢的頂級域名。
2 —(SLD)記錄查詢的二級域名。
3 —(SLD)記錄查詢的三級域名。
s —(Source)記錄發送DNS查詢的客戶端IP地址表。
d —(Destinations)記錄DNS查詢的目的服務器的IP地址表。
t —(Query Type)記錄查詢詳細類型。
Ctrl+r — 重新記錄。
Ctrl+x — 退出。
更詳細的信息可以查看man DNStop。
3.其他DNS集成工具
(1)nslookup
nslookup即名稱服務器查找(Name Server Lookup),用來查找DNS服務器上的DNS記錄。這個命令可以指定查詢的類型,可以查到DNS記錄的生存時間,還可以指定使用哪個DNS服務器進行解釋。運行nslookup需要安裝bind-utils。nslookup有兩種運行模式:交互式和非交互式運行模式。
錯誤實例:


#nslookup
*** Can't find server name for address 192.168.2.1: Timed out
*** Default servers are not available
Default Server: UnKnown
Address: 192.168.2.1


錯誤原因:如果出現錯誤,該命令將不能啓動。一般的錯誤都是數據庫文件或配置文件筆誤所至。比如少個“.”或者文件內容不正確等。另外一個主要的原因是執行nslookup的系統所使用的server(如192.168.2.1)不能查詢其反解(1.2.168.192.in-addr.arpa)。
解決方法:增加服務器IP所在的 reverse zone (如2.168.192.in-addr.arpa),確定其中有server 本身的反解項目。

(2)dig
dig工具向DNS服務器發送named查詢,dig可以查詢單一和多個域名服務器。dig的功能比 nslookup 強大很多而且使用簡單,不像nslookup需要設置set選項。下面是dig的一些比較常用的命令。


dig @server sina.com.cn.  # dig 最基本的用法
dig @server zx.xmgd.com. AXFR
# 用dig查看zone數據傳輸
dig @server zx.xmgd.com. IXFR=N
# 用 dig 查看 zone 數據的增量傳輸
dig -x 210.52.83.228 @server
# 用dig查看反向解析
dig xmgd.com. +nssearch # 查找一個域的授權DNS服務器
dig xmgd.com +trace
# 從根服務器開始追蹤一個域名的解析過程


(3)named-checkzone
named-checkzone通過檢查句法的正確性來檢查區域(zone)文件的正確性。named-checkzone如果沒有檢查到錯誤會簡單返回一個“OK”字符。下面舉一個例子。
#named-checkzone -q /var/named/localhost.zone
DNS_zone_load: could not find NS and/or SOA records or bad dated quad
顯示可能是沒有定義SOA記錄或A紀錄設定了一個錯誤IP地址。查看/var/named/localhost.zone文件後發現一行:
1D IN A 127.0.0.l
顯然是一個拼寫錯誤,“1”錯誤拼寫爲“l”,如果找到錯誤文件,就可以很快排除故障。
(4)named-checkconf
named-checkconf通過檢查named.conf句法的正確性來檢查named文件的正確性。對於配置正確的named.conf文件,named-checkconf不會顯示任何信息。下面是一個檢查例子。


# named-checkconf /etc/named.conf
/etc/named.conf:23: unknown option 'fi1e'


上面的信息說明在23行有一個錯誤語句,即把“file”錯誤拼寫爲“fi1e”。找到錯誤原因,用vi修改配置文件,就可以很快排除故障。
另外強烈建議不要使用RedHat Linux提供的一個圖形化的配置工具redhat-config-bind(它可能帶來許多嚴重的問題,因此RHEL 4取消了這個工具),但是Linux網絡管理員還是應當使用命令行配置DNS服務器管理工作。Linux命令行和redhat-config-bind 相比具有許多優點。
命令更加靈活,使用命令通常比使用redhat-config-bind具有更多選項。
命令運行更快,不必等待Linux處理圖形。
redhat-config-bind工具不能顯示所有錯誤信息。而命令提供的錯誤信息可以在命令行下看到。
redhat-config-bind工具是一個單獨軟件,也是另一個出錯源。
第一次配置DNS對於Linux新手來說是一個挑戰,通常都會出錯。DNS是一個很複雜的系統,有很多可能會使系統不能正常運行。伴隨DNS建立出現的許多問題都會引起相同的結果,但起因卻不同。大多數問題是由於配置文件中的語法錯誤而導致的。DNS是由一組文件構成的,所以需要不同工具來檢查對應文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章