Linux下DNS配置文件檢查工具使用

 

通常Linux初學者會問:Linux 中有沒有一個標準的配置文件格式?一句話,沒有。不熟悉 Linux 的用戶一定會感到沮喪,因爲每個配置文件看起來都象是一個要迎接的新挑戰。在 Linux 中,每個網管員都可以自由選擇自己喜歡的配置文件格式。DNS就是Domain Name System, DNS服務器可以分爲三種,高速存服務器(Cache-only server)、主服務器(Primary Name server)、輔助服務器(Second Name Server)。 DNS的詳細原理、工作流程、術語、概念,限於篇幅,這裏就不說了。

一、Linux 下主要DNS配置文件

Linux 下主要DNS配置文件見表一、二、三:

表-1 DNS主要配置文件

文件名稱

中文名稱

作用

/etc/hosts

主機的一個列表文件

包含(本地網絡中)已知主機的一個列表。如果系統的 IP 不是動態生成,就可以使用它。對於簡單的主機名解析(點分表示法),在請求 DNS NIS 網絡名稱服務器之前,/etc/hosts.conf 通常會告訴解析程序先查看這裏。

/etc/host.conf

轉化程序控制文件

告訴網絡域名服務器如何查找主機名。(通常是 /etc/hosts,然後就是名稱服務器;可通過 netconf 對其進行更改)

/etc/resolv.conf

轉化程序配置文件

在配置程序請求BIND域名查詢服務查詢主機名稱時必須告訴程序使用那個域名服務器和 IP 地址來完成這個任務。

Linux上的域名服務由named守護進程控制,該進程從主文件:/etc/named.conf中獲取信息。它包括一族將主機名稱映射爲IP地址的各種文件:下面是named配置文件族詳細內容。

表-2 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地址映射爲主機名稱的區文件

named.conf時DNS中的核心它的配置 見表三:

表-3 named.conf文件的配置

命令 

語法

acl  

定義IP地址的訪問控制清單 

control

定義rndc使用的控制通道

include

把其他文件包含到配置文件中 

key 

定義授權的安全密鑰 

logging

定義日誌內容和位置 

opitons 

定義全局配置選項和缺省值

server 

定義遠程服務器的特徵 

zone 

定義一個區

二、DNS 配置文件檢查工具

可以看出Linux下DNS配置文件比較複雜,不過我們可以通過一些工具來幫助你檢查DNS文件錯誤。

ping命令

檢 查DNS配置最簡單的方法是使用Ping命令,直接Ping主機名稱。PING是一種很好的方法,它能夠決定當特定主機處於開機運行狀態時,網絡是否正常 運行。遇到DNS問題時檢查的第一項是系統和網絡的狀態,而且首先檢查並判斷存在問題的DNS服務器是否有響應。如果能夠PING到DNS服務器,則能確 保與DNS服務器的連接無誤。如果無法PING到DNS服務器,那麼很有可能系統死機了。爲了證實這是系統問題而非網絡問題,再來檢測DNS連接的路由器 是否正常運行。爲DNS排錯時,應儘量使用IP地址替代DNS名稱以減少由DNS服務器而不是主機產生問題的可能性。


#ping www.cao.com
PING www.cao.com(192.168.1.1) 56(84) bytes of data
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.420 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.374 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.372 ms
……

nslookup命令

在 Linux下配置好DNS服務器,添加了相應的記錄之後,只要IP地址保持不變,一般情況下我們就不再需要去維護DNS的數據文件了。不過在確認域名解釋 正常之前我們最好是測試一下所有的配置是否正常。許多人會簡單地使用ping命令檢查一下就算了。不過Ping指令只是一個檢查網絡聯通情況的命令,雖然 在輸入的參數是域名的情況下會通過DNS進行查詢,但是它只能查詢A類型和CNAME類型的記錄,而且只會告訴你域名是否存在,其他的信息一概欠奉。所以 如果你需要對DNS的故障進行排錯就必須熟練另一個更強大的工具nslookup。

nslookup即名稱服務器查找(Name Server Lookup),用來查找DNS服務器上的DNS記錄。這個命令可以指定查詢的類型,可以查到DNS記錄的生存時間還可以指定使用那個DNS服務器進行解釋。

運行nslookup需要安裝bind-utils,可以使用命令查詢:


#rpm –qa|grep bind-utils

nslookup有兩種運行模式:交互式和非交互式運行模式。交互式運行模式允許用戶通過域名服務器檢索各種主機,並可以打印出主機名稱列表。非交互式運行模式用來打印所請求的某個主機或域的特定的信息。進入“nslookup”交互式運行模式,運行下面的命令:

#nslookup

在使用交互模式。此時會出現提示符"<",nslookup提供了許多可用命令。下面列舉其中一些常用的詳細說明。

help命令:顯示幫助信息,及一些簡單的命令的作用。

exit 命令:退出nslookup命令。

lserver命令:查找指定的域名服務器並將其設置爲默認的域名服務器。

server命令:和lserver相似,解析另一臺域名服務器並將其設置爲默認的服務器,不同在於本命令使用當前的默認服務器來解析。

set命令:修改工作參數,它也是nslookup中最常用的命令。它可以包含下面的幾種:

set class:設置查詢的類型,一般情況下爲Internet。

set debug:設置調試模式。

set nodebug:設置爲非調試模式。

set d2:設置詳細調試模式。

set nod2:設置爲非詳細調試模式。

set [no]defname:設置爲defname,會在所有沒有加"o"的名字後,自動加上默認的域名。它是默認的方式。

set domain:設置默認的域名。

set port:DNS的默認端口爲53,用本命令可以設置其他端口,一般用於調試。

set q(querytype):改變查詢的信息的類型。默認的類型爲A紀錄。

set recurse:設置查詢類型爲遞歸;若爲set norecurse,查詢類型爲跌代;缺省爲前者。

set retry:設置重試的次數。默認的值爲4。

set root:設置默認的根服務器。

set timeout:設置等待應答的限制時間(單位爲秒),超出即爲超時,如果還可以重試,就會將長超時值加倍,重新查詢。默認的超時值爲5秒。

如果要進入nslookup非交互式運行模式,運行下面的命令:


#nslookup www.cao.com

錯誤實例:


#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)。
解決方法:

增加 server ip 所在的 reverse zone (如 2.168.192.in-addr.arpa),確定其中有 server 本身的反解項目。

3、 使用dlint軟件檢查DNS故障

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


#rpm –qa|grep perl
#dig hostname any
Perl 5.8.0
; <<>> DiG 9.2.1 <<>>
;; global options:  printcmd

軟件下載:dlint軟件主頁是http://www.domtools.com/dns/dlint.shtml 下載鏈接:http://www.domtools.com/pub/dlint1.4.0.tar.gz 文件大小:22KB。

軟件安裝:


#gunzip dlint1.4.0.tar.gz
#tar vxf dlint1.4.0.tar
#cd dlint1.4.0
#make install

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

dlint首先檢查拼寫錯誤。

有A記錄的主機名稱必須有PTR(稱 pointer, PTR反向解析)記錄。如果有A記錄的主機名稱沒有PTR,配置文件不能通過。Dlint可以在用戶配置文件中爲A建立查找丟失的PTR記錄。

dint會檢查in-addr.arpa區帶(Zone)的每一條PTR記錄是否有對應的A記錄存在。

dint會以遞歸的方式檢查子區帶(Zone),查找配置問題。

應用實例:


[root@www dlint1.4.0]# dlint www.cao.com
;;  dlint version 1.4.0, Copyright (C)
;; 1998 Paul A. Balyoz <[email protected]>
;;  Dlint comes with ABSOLUTELY NO WARRANTY.
;;  This is free software, and you are welcome to redistribute it
;;  under certain conditions.  Type 'man dlint' for details.
;; command line: /usr/local/bin/dlint www.cao.com
;; flags: normal-domain recursive.
;; using dig version 9.2.1
;; run starting: 五  6月 18 12:02:29 CST 2004
;; ============================================================
;;  Now linting www.cao.com
Checking serial numbers per nameserver
;;      2002063000 NS1.cao.com.
;;     2002063000 NS2.cao.com.
;; All nameservers agree on the serial number.
;; Now caching whole zone (this could take a minute)
;; trying nameserver NS1.cao.com.
;; 12 A records found.
;; ============================================================
;;  dlint of www.cao.com run ending with errors.
;;  run ending: 五  6月 18 12:02:40 CST 2004

;; 後邊是程序版本和解釋語句,ERROR後邊是Dlint對DNS配置文件的檢查結果。如果沒有ERROR字段表示配置正確。Dlint能檢查的DNS配置文件主要錯誤:

1. 沒有增加 SOA (start of authority) RR 的 serial 值

這 是最主要的 DNS 出錯的原因. 因爲, serial 值沒有增加, secondary server 就不會在 primary server 的配置文件改變後隨之改變。 包括改變 SOA 裏面其它的值, seconrary server 自己並不會發覺. 即使是修改 SOA RR 裏面的資料, 也都要記得去改 SOA RR 的 serial 值. 改了 serial 後,secondary 到時後查出有增加, 就會從 primary 作一次 zone transfer. 改了 SOA RR 後, 最好去測試一下 secondary server 是不是有更新. 目前有dlint軟件可以分析任何DNS區帶。

2. 在 BIND 中的配置文件, 少寫了一個點 (.)

少寫了一個點, 看起來差不多. 但是卻造成了很大的問題. BIND 的設定檔案一定要小心的設定. 要不然很可能產生很多錯誤。

3、錯誤的 resolv.conf 設定

resolv.conf 裏面包含了 local domain, 當你沒有把全部的 domain name 設定好時, 就會自動加上去這個東西. 然後機器就不會去查 DNS 而直接用這個 domain name 連出去了. 要是 resolv.conf 有不正確的 domain name entry, 那就有可能連到一堆不存在的地方. (然後得到 error.)

4. rndc命令

rndc指令是系統管理員用來管理域名服務器的操作的命令。rndc主要命令:


rndc  reload用來裝入新的數據庫。
rndc status 查看目前DNS服務器狀態。
rndc stop  停止DNS服務器。
rndc restart 從新啓動DNS服務器。
rndc stats 生成DNS統計報表。
rndc dumpdb 將所有緩存輸入文件named_dump.db。

5 、DNS狀態檢測工具-DNSTOP

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

軟件安裝:

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


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

 

圖-1 運行DNSTOP必需軟件和庫函數

軟件主頁:http://dns.measurement-factory.com/tools/dnstop 下載鏈接:http://dns.measurement-factory.com/tools/dnstop/src/dnstop-20040309.tar.gz

軟件安裝:


#tar vxfz dnstop-20040309.tar.gz
cd dnstop-20040309
make

運行軟件:

如果想查看通過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,ctrl+R,ctrl+X,以交互方式來顯示不同的信息。更詳細信息可以查看dnstop –help。

總 結:在Linux下新手第一次配置DNS都會錯,請留意出錯信息。DNS是一個很複雜的系統。用戶可能會做錯很多事,並且會使系統不能正常運行。伴隨 DNS建立出現的許多問題都會引起相同的結果,但起因卻不同。但大多數問題是由於配置文件中的語法錯誤而導致的。關於如何配置DNS筆者不作贅述了,另外 網絡上有大量的文檔、FAQ和其他的資源。這些大量的文檔對於很好的利用DNS的各種功能是非常重要的。這裏介紹的工具如:ping、 nslookup、dlint 、rndc、 dnstop都是一些檢查工具,如果你希望作爲一名合格Unix/Linux的網絡管理員就應該從需求方案出發,以客戶的需求爲導向,配置出我們自己需要 的DNS服務器,這樣不但可以滿足需要,還能大大減少我們的工作量,以上這些都是你應當掌握的工具,但並不是說你可以忽略對DNS本身的瞭解。

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