詳解Linux DNS伺服器常見故障排查
DNS 是域名系統 (Domain Name System) 的縮寫,它是由解析器和域名伺服器組成的.域名伺服器是指保存有該網路中所有主機的域名和對應IP地址,並具有將域名轉換為IP地址功能的伺服器.
DNS是虛擬主機系統服務的基礎服務,也是常見的故障發生點.DNS不能解析的常見原因有:
1.域名本身已經過期或被停止;
2. 域名的DNS伺服器記錄不正確;
3. 域名的DNS伺服器記錄本身沒有作解析;
4.域名的DNS伺服器上named服務沒有啟動;
5.域名的DNS伺服器上未解析;
6.域名的多個DNS伺服器上的解析不一致;
7.域名的DNS伺服器網路設置禁止了53埠TCP/UDP協議;
8. 本地DNS cache未更新,與DNS伺服器上的記錄不同步.
DNS的解析過程:
1) 首先查找本地DNS的cache,如果cache里有,且未超過伺服器或域名本身定義的生存時間,則返回cache中的記錄;
2) 如果cache中沒有,或已過期,首先查詢互聯網根伺服器(如a.gtld-servers.net),找出該域名的DNS伺服器是哪幾個,如果查不到,返回錯誤;
3) 隨機地從域名的DNS伺服器中挑出一個,查出其IP地址,如果查不到,返回錯誤;
4) 連接到該IP地址的53埠(UDP或TCP協議),查詢域名,如果連接不上,或伺服器未返回結果,則返回錯誤.
一、如何判斷域名本身已經過期或被停止
通過whois
在Linux/Unix上,可以使用whois工具,查詢域名註冊記錄,如:
查詢.com域名:
_______________________________________________________________
whois abc.com
_______________________________________________________________
查詢.cn域名:
_______________________________________________________________
whois -h whois.cnnic.net.cn abc.com.cn
_______________________________________________________________
如果查詢不到該記錄,或記錄中域名狀態不正常,或記錄中過期日已到,則說明該域名未註冊或過期被停止.
也可以直接到www.internic.net查詢國際域名,以及www.cnnic.net.cn查詢國內域名.
二、如何判斷域名的DNS伺服器記錄不正確
在Linux/Unix上,可以使用dig工具,在win2000上,可以使用nslookup工具,從互聯網根伺服器上查詢域名的DNS伺服器.
以dig為例:
_______________________________________________________________
dig @a.gtld-servers.net abc.com
_______________________________________________________________
結果:
_______________________________________________________________
; <<>> DiG 9.2.1 <<>> @a.gtld-servers.net abc.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1625
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;abc.com. IN A
;; AUTHORITY SECTION:
abc.com. 172800 IN NS sens01.dig.com.
abc.com. 172800 IN NS sens02.dig.com.
abc.com. 172800 IN NS orns01.dig.com.
abc.com. 172800 IN NS orns02.dig.com.
;; ADDITIONAL SECTION:
sens01.dig.com. 172800 IN A 199.181.134.16
sens02.dig.com. 172800 IN A 199.181.135.199
orns01.dig.com. 172800 IN A 63.70.44.44
orns02.dig.com. 172800 IN A 63.70.47.44
;; Query time: 580 msec
;; SERVER: 192.5.6.30#53(a.gtld-servers.net)
;; WHEN: Tue Jul 8 14:43:10 2003
;; MSG SIZE rcvd: 177
_______________________________________________________________
錯誤結果:
_______________________________________________________________
; <<>> DiG 9.2.1 <<>> @a.gtld-servers.net abcnotexists.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 35479
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;abcnotexists.com. IN A
;; AUTHORITY SECTION:
com. 172800 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 2003070701 1800 900 604800 86400
;; Query time: 405 msec
;; SERVER: 192.5.6.30#53(a.gtld-servers.net)
;; WHEN: Tue Jul 8 14:44:44 2003
;; MSG SIZE rcvd: 107
_______________________________________________________________
可以看到,只有Question,沒有Answer.或者可以用whois工具:
whois abc.com
[whois.crsnic.net]
Whois Server Version 1.3
Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to http://www.internic.net
for detailed information.
Domain Name: ABC.COM
Registrar: NETWORK SOLUTIONS, INC.
Whois Server: whois.networksolutions.com
Referral URL: http://www.networksolutions.com
Name Server: SENS01.DIG.COM
Name Server: SENS02.DIG.COM
Name Server: ORNS01.DIG.COM
Name Server: ORNS02.DIG.COM
Status: REGISTRAR-LOCK
Updated Date: 13-aug-2003
Creation Date: 22-may-1996
Expiration Date: 23-may-2005
>>> Last update of whois database: Tue, 8 Jun 2004 20:06:03 EDT <<<
以win2000 nslookup為例,
nslookup
? server a.gtld-servers.net
? set type=NS
? abc.com
互聯網根伺服器通常每天刷新一次,新註冊的域名需要24~48小時,才能在根伺服器中出現,修改DNS伺服器情況類似.
三、如何判斷域名的DNS伺服器記錄本身有沒有解析
域名的DNS伺服器記錄是一組特殊的主機名.這些DNS主機名必須要在Internic註冊之後,才能用於域名註冊.註冊之後,通過whois能夠查到,在互聯網根伺服器上會為註冊的DNS伺服器作解析.
以abc.com為例,他的dns伺服器
Name Server: SENS01.DIG.COM
Name Server: SENS02.DIG.COM
Name Server: ORNS01.DIG.COM
Name Server: ORNS02.DIG.COM
都可以通過whois以及dig @a.gtld-servers.net查到.
為了保險起見,所有註冊過的DNS伺服器,同時也要在它本身的域名伺服器上作A紀錄的解析.否則,有的客戶端可能不能正常工作.
四、如何判斷域名的DNS伺服器上named服務有沒有啟動
可以用ps aux命令察看系統進程,如果中間沒有named的進程,則用
/etc/init.d/named start
啟動named服務,用
chkconfig --list named
檢查named服務有沒有被設成自動啟動,如果沒有,執行:
chkconfig --level 345 named on
將named設成自動啟動.
五、如何判斷域名的DNS伺服器上未解析
登陸到域名的DNS伺服器上,執行:
dig @localhost abc.com
如果沒有結果,可以看/etc/named.conf中有沒有該域名的記錄,以及記錄中的zone文件是否存在,如果都存在,可以執行:
rndc reload abc.com
然後,
tail /var/log/messages
看log中有沒有報錯,有沒有zone文件格式的問題.
六、如何判斷域名的多個DNS伺服器上的解析不一致
依次查詢該域名的每個DNS伺服器,看結果是否一致.在所有的伺服器中,如果有的伺服器沒有返回結果,不會影響到域名的正常解析,此時解析客戶端會嘗試其他的伺服器,只有當所有的伺服器都沒有結果才會報錯.但是如果A伺服器上和B伺服器上的解析不一致,則會出現域名解析時對時不對的故障.
Dig @dns1.yourname.com abc.com
Dig @dns2.yourname.com abc.com
如果不一致,通常是伺服器之間的同步問題.
七、如何判斷域名的DNS伺服器網路設置是否正確
可以從其他機器分別以tcp和udp協議連接,如:
dig tcp @dns1.yourname.com abc.com
及
dig notcp @dns1.yourname.com abc.com
如果不能連接,伺服器上named服務已經啟動,多半是軟體或硬體防火牆的原因.在伺服器上檢查/etc/sysconfig/ipchains或iptable中是否允許domain(53埠)的tcp及udp連接.或暫時停止ipchains/iptable服務,看外部是否能夠連接.如果軟體防火牆配置正確或根本未啟動,則檢查硬體防火牆有沒有打開53埠.
八、如何判斷本地DNS cache未更新
可以查出域名的DNS伺服器,檢查這些伺服器上解析是否正確,如果伺服器上正確,而本地解析不正確,則說明使用的本地DNS伺服器沒有刷新,需要等到它刷新之後.通常需要4到12個小時左右.
[火星人 ] 詳解Linux DNS伺服器常見故障排查已經有956次圍觀