理解linux下的DNS

最近由於工作中的需要連接vmware的服務器,這裏用到了DNS的解析。之前一直很奇怪不知道爲什麼DNS服務器已經設置了卻不能解析。這裏我列幾個相關的文件以及相關的文章。

1./etc/resolv.conf

這個文件大家應該都比較清楚了,這裏面可以陪着我們需要的域服務器。就是我們使用系統時常常要配置的DNS都會存在這個文件中

格式如下

nameserver xxx.xxx.xxx.xxx

這個文件可以配多個域服務器,系統會按順序來解析我們的地址如果第一個沒法解析會繼續向下尋找第二個。到這裏大家可能以爲都在這個文件配置就好了。其實忽略了一個順序問題。系統中其實在解析IP地址的時候還有按照一定的順序的。那麼這個在哪裏呢


2./etc/nsswitch.conf

這個文件就是系統解析順序的配置文件,這個文件有很多東西,可以看看這個鏈接 http://www.cnblogs.com/cute/archive/2012/05/17/2506342.html

我就說下DNS方面的

格式如下

hosts:          files dns [!UNAVAIL=return]

我的就是這樣配置的,files代表的是/etc/hosts這個文件。以上意思是優先使用/etc/hosts文件中的地址解析,如果沒法解析則去/etc/resolv.conf解析,files和dns可以顛倒,這個解析的順序也就相應的反過來了。


===========================以下爲上面鏈接轉載內容=============================

nsswitch.conf文件詳解

一、nsswithch.conf:服務搜索順序
    文件/etc/nsswitch.conf(name service switch configuration,名字服務切換配置)規定通過哪些途徑以及按照什麼順序通過這些途徑來查找特定類型的信息。還可以指定某個方法奏效或失效時系統將採取什麼動作。
Nsswitch.conf中的每一行配置都指明瞭如何搜索信息,每行配置的格式如下:
Info: method[[action]] [method[[action]]...]
    其中,info指定該行所描述的信息的類型,method爲用來查找該信息的方法,action是對前面的method返回狀態的響應。action要放在方括號裏。
二、nsswitch.conf的工作原理
    當需要提供nsswitch.conf文件所描述的信息的時候,系統將檢查含有適當info字段的配置行。它按照從左向右的順序開始執行配置行中指定的方法。在默認情況下,如果找到期望的信息,系統將停止搜索。如果沒有指定action,那麼當某個方法未能返回結果時,系統就會嘗試下一個動作。有可能搜索結束都沒有找到想要的信息。
1、信息(Info)
    Nsswitch.conf文件通常控制着用戶(passwd)、口令(shadow)、主機IP和組信息(group)的搜索。下面的列表描述了nsswitch.conf文件控制搜索的大多數信息(Info)的類型。

automount:

自動掛載(/etc/auto.master和/etc/auto.misc)

bootparams:

無盤引導選項和其他引導選項(參見bootparam的手冊頁)

ethers:

MAC地址

group:

用戶所在組(/etc/group),getgrent()函數使用該文件

hosts:

主機名和主機號(/etc/hosts)gethostbyname()以及類似的函數使用該文件

networks:

網絡名及網絡號(/etc/networks)getnetent()函數使用該文件

passwd:

用戶口令(/etc/passwd)getpwent()函數使用該文件

protocols:

網絡協議(/etc/protocols),getprotoent()函數使用該文件

publickey:

NIS+NFS所使用的secure_rpc的公開密鑰

rpc:

遠程過程調用名及調用號(/etc/rpc),getrpcbyname()及類似函數使用該文件

services:

網絡服務(/etc/services),getservent()函數使用該文件

shadow:

映射口令信息(/etc/shadow),getspnam()函數使用該文件

aiases:

郵件別名,sendmail()函數使用該文件


2、方法(method)
    下面列出了nsswich.conf文件控制搜索信息類型的方法,對於每一種信息類型,都可以指定下面的一種或多種方法:

files:

搜索本地文件,如/etc/passwd和/etc/hosts

nis:

搜索NIS數據庫,nis還有一個別名,即yp

dns:

查詢DNS(只查詢主機)

compat:

passwd、group和shadow文件中的±語法(參見本節後面的相關內容)


3、搜索順序(從左至右)
    兩個或者更多方法所提供的信息可能會重疊。舉例來說,filesnis可能都提供同一個用戶的口令信息。如果出現信息重疊現象,就需要考慮將哪一種方法作爲權威方法(優先考慮),並將該方法放在方法列表中靠左的位置上。
    默認nsswitch.conf文件列出的方法並沒有動作項,並假設沒有信息重疊(正常情況)。在這種情況下,搜索順序無關緊要:當一種方法失敗之後,系統就會嘗試下一種方法,只是時間上受到一點損失。如果在方法之間設置了動作,或者重疊的項的內容不同,那麼搜索順序就變得重要起來。
例如下面兩行nsswitch.conf文件配置行:
passwd files nis
host nis files dns
    第一行讓系統在/etc/passwd文件中搜索口令信息,如果失敗的話,就使用NIS來查找信息。如果正在查找的用戶同時出現在這兩個地方,就會使用本地文件中的信息,因此它就是權威信息。第二行先使用NIS搜索;如果失敗的話,就搜索/etc/hosts文件;如果再次失敗的話,覈對DNS以找出主機信息。
4、動作項([action])
    在每個方法後面都可以選擇跟一個動作項,用來指定如果由於某種原因該方法成功抑或失敗需要做些什麼。動作項的格式如下:
[[!]STATUS =action]

    其中,開頭和末尾的方括號屬於格式的一部分,並不是用來指出括號中的內容是可選的。STATUS(按照約定使用大寫字母,但本身並不區分大小寫)是待測試的狀態,action是如果STATUS匹配前面的方法所返回的狀態將要執行的動作。開頭的感嘆號(!)是可選的,其作用是將狀態取反。

STATUS:

STATUS的取值如下:

NOTFOUND:方法已經執行,但是並沒有找到待搜索的值。 默認的動作是continue。

SUCCESS:方法已經執行,並且已經找到待搜索的值,沒有返回錯誤。默認動作是return。

UNAVAIL:方法失敗,原因是永久不可用。舉例來說,所需的文件不可訪問或者所需的服務器可能停機。默認的動作是continue。

TRYAGAIN:方法失敗,原因是臨時不可用。舉例來說,某個文件被鎖定,或者某臺服務器超載。默認動作是continue。

action:

action的取值如下:

return:返回到調用例程,帶有返回值,或者不帶返回值。

continue:繼續執行下一個方法。任何返回值都會被下一個方法找到的值覆蓋。

示例:

舉例來說,下面這行取自nsswitch.conf文件,它的作用是讓系統首先使用DNS來搜索給定主機的IP地址。DNS方法後面的動作項是測試該方法所返回的狀態是否爲“非(!)UNAVAIL”。

hosts    dns [!UNAVAIL=return] files

如果DNS方法沒有返回UNAVAIL(!UNAVAIL),也就是說DNS返回SUCCESS、NOTFOUND或者TRYAGAIN,那麼系統就會執行與該STATUS相關的動作(return)。其結果就是,只有在DNS服務器不可用的情況下才會使用後面的方法(files)。

如果DNS服務器並不是不可用(兩次否定之後就是“可用”),那麼搜索返回域名或者報告未找到域名。只有當服務器不可用的時候,搜索纔會使用files方法(檢查本地的/etc/hosts文件)。


5compat方法:passwdgroupshadow文件中的"±"
    可以在/etc/passwd/etc/group/etc/shadow文件中放入一些特殊的代碼,(如果在nsswitch.conf文件中指定compat方法的話)讓系統將本地文件和NIS映射表中的項進行合併和修改。
    在這些文件中,如果在行首出現加號'',就表示添加NIS信息;如果出現減號'',就表示刪除信息。舉例來說,要想使用passwd文件中的這些代碼,可以在nsswitch.conf文件中指定passwd: compat。然後系統就會按照順序搜尋passwd文件,當它遇到以+或者 開頭的行時,就會添加或者刪除適當的NIS項。
    雖然可以在passwd文件的末尾放置加號,在nsswitch.conf文件中指定passwd: compat,以搜索本地的passwd文件,然後再搜尋NIS映射表,但是更高效的一種方法是在nsswitch.conf文件中添加passwd: file nis而不修改passwd文件。

====================================================================



3./etc/resolv.conf

這個文件中也是寫了地址解析,像我就寫了本地地址,如下

127.0.0.1   localhost
127.0.0.1   sxun

其中sxun就是我的主機名。到這裏就知道怎麼解析了吧。


一下再舉個簡單的例子。

1./etc/nsswitch.conf的配置如上面配置的那樣

2./etc/hosts文件中加入 1.1.1.1  aaa 這樣一行

3./etc/resolv.conf 文件中配置電信的DNS,nameserver 218.85.157.99

這時候你ping aaa 會得到如下結果,先去/etc/hosts中解析並找到了aaa的IP地址1.1.1.1


如果/etc/hosts中沒有aaa的地址則輸出如下結果,可以看出aaa這個域是存在的IP爲218.85.148.250,並且可以ping通。



目前記錄到這裏,可能理解也有錯,後期有用到再糾正補上

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