計算機網絡中,通過IP地址標識一臺主機,當兩臺主機通信的時候,就需要通過IP地址來建立聯繫。所以早期訪問一個WEB服務器,就得要輸入ip地址來訪問他。不過後來網絡上的網站越來越多,假如在我們百度的時候,都必須要輸入202.103.226.126這麼一大串數字,光記憶就很難了,而且有可能還會更換IP,太不方便了。於是乎,就有人設計出了一個可以將IP地址轉換成主機名(字符串)的東西,這就是DNS。DNS全稱爲Domain Name System(域名系統)。負責將主機名轉換爲IP地址(或者反之:將IP轉換爲主機名)。
在DNS中有一個數據庫,裏面記錄着各種主機名和IP的對應關係。當你訪問一個主機名的時候,就先向DNS發起解析請求(對用戶而言是透明的),DNS將結果返回給瀏覽器,瀏覽器使用返回的IP來訪問這個網站。
假如我們訪問www.baidu.com. 客戶端的解析大概是這樣的:
客戶端將請求發給其上級DNS服務器A,並且跟A說"你告訴我www.baidu.com.的IP是什麼"。上級DNS服務器A一般是一個運營商緩存的服務器,它裏面並沒有主機的記錄,他一看自己不知道,於是乎就去找根,根看了www.baidu.com.後,他回覆A"我不知道www.baidu.com.的IP地址, .com這個域被我委託給x.x.x.x管理了,你去問問它吧!"。A得到了.com的IP地址後,就去問.com說,"www.baidu.com.的IP是多少啊?",.com說"我不知道www.baidu.com.的IP,但是baidu.com.這個域我已經委託給x.x.x.x這個主機管理了,你去問它吧!",A得到了baidu.com.這個域的地址,就去問baidu.com.說"你知道www.baidu.com的IP是多少嗎?",baidu.com.說"我知道www.baidu.com.的IP地址,他的IP地址是x.x.x.x。"於是乎,A拿着結果告訴了客戶端,客戶端就訪問去了。
從上面的過程我們可以發現一個問題,A向DNS發起了一次請求就拿到了結果,而他上級的DNS則經歷了很多過程。A向DNS這個過程我們稱作遞歸,而上級DNS到主機的具體解析我們稱作迭代。遞歸我們可以理解爲:我問A 1+1等於幾?你只需要告訴我結果(你知道或者不知道)就好了,其他的我不管。而迭代可以理解爲:A不知道1+1等於幾,A去問B,而B說我也不知道,但是C可能知道,你去問C,然後A又去問C,直到得到最終結果。
DNS的資源記錄有很多種,常用的有(轉自:http://bbs.51cto.com/thread-909189-1.html):
1,A記錄
A記錄也稱爲主機記錄,是使用最廣泛的DNS記錄,A記錄的基本作用就是說明一個域名對應的IP是多少, 它是域名和IP地址的對應關係,表現形式爲 www.contoso.com 192.168.1.1 這就是一個A記錄!A記錄除了進行域名IP對應以外,還有一個高級用法,可以作爲低成本的負載均衡的解決方案,比如說,www.contoso.com 可以創建多個A記錄,對應多臺物理服務器的IP地址,可以實現基本的流量均衡!
2,NS記錄
NS記錄和SOA記錄是任何一個DNS區域都不可或缺的兩條記錄,NS記錄也叫名稱服務器記錄,用於說明這個區域有哪些DNS服務器負責解析,SOA記錄說明負責解析的DNS服務器中哪一個是主服務器。因此,任何一個DNS區域都不可能缺少這兩條記錄。NS記錄,說明了在這個區域裏,有多少個服務器來承擔解析的任務,
3,SOA記錄
NS記錄說明了有多臺服務器在進行解析,但哪一個纔是主服務器呢,NS並沒有說明,這個就要看SOA記錄了,SOA名叫起始授權機構記錄,SOA記錄說明了在衆多NS記錄裏那一臺纔是主要的服務器!
4,MX記錄
全稱是郵件交換記錄,在使用郵件服務器的時候,MX記錄是無可或缺的,比如A用戶向B用戶發送一封郵件,那麼他需要向DNS查詢B的MX記錄,DNS在定位到了B的MX記錄後反饋給A用戶,然後A用戶把郵件投遞到B用戶的MX記錄服務器裏!
5,Cname記錄
又叫別名記錄,我們可以這麼理解,我們小的時候都會有一個小名,長大了都是學名,那麼正規來說學名的符合公安系統的,那個小名只是我們的一個代名詞而已,這也存在一個好處,就是比暴漏自己,比如一個網站a.com 在發佈的時候,他可以建立一個別名記錄,把B.com發不出去,這樣不容易被外在用戶所察覺!達到隱藏自己的目的!
6,SRV記錄
SRV記錄是服務器資源記錄的縮寫,SRV記錄是DNS記錄中的新鮮面孔,在RFC2052中才對SRV記錄進行了定義,因此很多老版本的DNS服務器並不支持SRV記錄。那麼SRV記錄有什麼用呢?SRV記錄的作用是說明一個服務器能夠提供什麼樣的服務!SRV記錄在微軟的Active Directory中有着重要地位,大家知道在NT4時代域和DNS並沒有太多關係。但從Win2000開始,域就離不開DNS的幫助了,爲什麼呢?因爲域內的計算機要依賴DNS的SRV記錄來定位域控制器!表現形式爲:
—ldap._tcp.contoso.com 600 IN SRV 0 100 389 NS.contoso.com
ladp: 是一個服務,該標識說明把這臺服務器當做響應LDAP請求的服務器
tcp:本服務使用的協議,可以是tcp,也可以是用戶數據包協議《udp》
contoso.com:此記錄所值的域名
600: 此記錄默認生存時間(秒)
IN: 標準DNS Internet類
SRV:將這條記錄標識爲SRV記錄
0: 優先級,如果相同的服務有多條SRV記錄,用戶會嘗試先連接優先級最低的記錄
100:負載平衡機制,多條SRV並且優先級也相同,那麼用戶會先嚐試連接權重高的記錄
389:此服務使用的端口
NS.contoso.com:提供此服務的主機
7,PTR記錄
PTR記錄也被稱爲指針記錄,PTR記錄是A記錄的逆向記錄,作用是把IP地址解析爲域名。由於我們在前面提到過,DNS的反向區域負責從IP到域名的解析,因此如果要創建PTR記錄,必須在反向區域中創建。
-------------------------------------------------------------------------------------------------------------------------
配置DNS:
1.安裝BIND軟件:
[root@localhost ~]# yum install -y bind
2.BIND的服務名叫named,相關的主要文件有以下幾個:
/etc/named/ #DNS主目錄 /etc/named.conf #DNS配置文件 /etc/rc.d/init.d/named #DNS啓動腳本 /etc/sysconfig/named #DNS腳本的配置文件 /var/named/ #區域配置文件目錄 |
3.配置文件格式說明
配置文件分爲三段: options:全局段,用來定義全局參數 logging:日誌段,定義一些日誌參數 zone:區域段,定義具體的域 |
4.定義配置文件(這裏是一個精簡版的,默認的示例文件有很多多餘參數,這裏只給大家展示可能用到的):
options { listen-on port 53 { any; }; #監聽本機所有啓用的IP地址的53號端口,UDP和TCP listen-on-v6 port 53 { ::1; }; #IPV6監聽 directory "/var/named"; #區域文件目錄 allow-query { any; }; #允許所有(any)客戶機像本服務器查詢 recursion yes; #允許遞歸 allow-recursion { any; }; #允許所有主機遞歸 }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { #定義根區域 type hint; #區域類型爲根(hint); 區域類型{hint|master|slave|forward} file "named.ca"; 區域文件爲named.ca }; zone "localhost" IN { type master; file "named.localhost"; }; zone "1.0.0.127.in-addr.apra" IN { type master; file "named.loopback"; }; zone "test.com" IN { type master; file "test.com.zone"; }; |
5.配置區域數據文件(只配置test.com這個域的配置文件,其他文件都已經存在了):
[root@localhost ~]# cd /var/named/ [root@localhost named]# ls data dynamic named.ca named.empty named.localhost named.loopback slaves [root@localhost named]# vim test.com.zone $TTL 86400 $ORIGIN test.com. @ IN SOA ns.test.com. admin.test.com. ( 2015120201 2H 20M 3D 1D) IN NS ns IN MX 10 mail ns IN A 172.16.100.1 mail IN A 172.16.100.2 www IN A 172.16.100.3 web IN CNAME www pop IN CNAME mail * IN A 172.16.100.1 |
啓動DNS測試:
[root@localhost named]# service named start Starting named: [ OK ] [root@localhost named]# ss -tunl Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.1:53 *:* udp UNCONN 0 0 *:67 *:* udp UNCONN 0 0 *:68 *:* udp UNCONN 0 0 *:631 *:* udp UNCONN 0 0 ::1:53 :::* tcp LISTEN 0 3 ::1:53 :::* tcp LISTEN 0 3 127.0.0.1:53 *:* tcp LISTEN 0 128 :::22 :::* tcp LISTEN 0 128 *:22 *:* tcp LISTEN 0 128 127.0.0.1:631 *:* tcp LISTEN 0 128 ::1:631 :::* tcp LISTEN 0 128 ::1:953 :::* tcp LISTEN 0 128 127.0.0.1:953 *:* tcp LISTEN 0 100 ::1:25 :::* tcp LISTEN 0 100 127.0.0.1:25 *:* tcp LISTEN 0 128 127.0.0.1:6010 *:* tcp LISTEN 0 128 ::1:6010 :::* tcp LISTEN 0 128 127.0.0.1:6011 *:* tcp LISTEN 0 128 ::1:6011 :::*