DNS簡介
DNS其實大家都不陌生,因爲這個是我們訪問互聯網必不可少的一個東西,全稱:Domain Name System。在當今計算機網絡中是通過IP地址來進行主機之間互聯的,但是我們知道IP地址有32位,以後還會普及IPv6,128位。對於人類來記憶實在太痛苦了。DNS的作用就是爲了解決域名到IP之間的轉換。這樣大家就恍然大悟了吧,我們每天都在享受着DNS帶來的便捷。
DNS是一個分佈式、分層次的主機名管理架構,通過配置DNS服務器地址,主機不需要知道對應的IP地址就能通過主機名的形式訪問互聯網。那麼你要想了,全球這麼多IP地址,都在一臺DNS服務器上,萬一宕機了咋辦?每天這麼多訪問量,配置得多高啊!前輩們早就想好解決方法了。DNS利用類似倒狀樹的目錄結構將主機名的管理分配在不同層級的DNS服務器當中,經過分層管理,每一級DNS服務器負責部分域名信息,這就減輕了DNS服務器的負載。具體結構參考下圖:
DNS解析過程
第一種:遞歸查詢。遞歸查詢一般是客戶機和服務器之間的查詢,即只發送一起請求,其他的工作交給上層服務器去解決,然後一層一層的反饋結果到客戶端;
第二種:迭代查詢。一般是DNS服務器與DNS服務器之間的方式,最初的服務器負責發起請求,一層層的找到目標服務器,在返回給客戶端,這個過程叫迭代。
一次完整的查詢請求經過的流程:
Client --> hosts文件 -->DNS service
Local DNS cache --> DNS server(recursion遞歸)-->server cache -->iteration(迭代) -->根--> 頂級域名DNS-->二級域名DNS…
DNS服務器的類型
主DNS服務器:維護所負責解析的域內解析庫服務器。解析庫由管理維護;
從DNS服務器:從主DNS服務器或其他的從DNS服務器那裏“複製”(區域傳遞)一份解析庫;
緩存DNS服務器:提高DNS的訪問速度,實現快速解析,在安裝完成DNS軟件後就已經實現了簡單的緩存服務器,通常在/etc/named.conf當中的forward only設定;
轉發器:通過區域傳送,將所需要的域名解析傳送給其他DNS服務器進行解析
區域傳輸:
完全傳輸:傳送整個解析庫
增量傳輸:傳遞解析庫變化的那部分內容
DNS監聽的端口
DNS是一個網絡服務,端口號是53.通常DNS在查詢的時候是以udp這個快速的數據傳輸協議來查詢的, 但是一旦沒有辦法查詢到完整的信息時就會再次以TCP協議來進行重新查詢,因此DNS服務在啓動的時候會同時開啓tcp的53號端口和udp的53號端口。
安裝DNS服務
1、DNS服務程序包:bind,程序名:named
使用yum list all bind* 查看相關安裝包:
bind:服務器;
bind-libs:於bind相關的庫文件;
bind-utils:客戶端相關命令文件;
bind-chroot:bind主目錄禁錮程序,就是將bind程序禁錮在家目錄中,centos6之後的系統已經默認在/var/named目錄下了;
補充:如果你的程序是centos之前,那麼還有一個軟件包caching-nameserver:作用是爲bind提供簡單的配置文件模版,centos5之後的系統這個軟件功能都被包含在bind主程序軟件包當中。
*根據需求使用yum安裝bind軟件
2、DNS服務器配置文件
第一步:修改主配置文件:/etc/named.conf <==主配置文件一般用來定義全局配置和根zone
~]#cat /etc/named.conf options { <==在options包含的是全局配置 listen-on port 53 { any; }; <==監聽的端口,即哪些主機可以進行訪問解析; directory "/var/named"; <==對應數據庫文件的目錄位置; dump-fi le "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; <==運行哪些主機請求查詢,這裏修改爲any運行所有; recursion yes; <==將自己視爲客戶端的一種查詢方式; dnssec-enable no; <==測試環境建議先關閉; dnssec-validation no; };
第二步:配置/etc/named.rfc1912.zones <==主配置文件之一,一般用來存放zone,就是定義解析的域
zone "ZONE_NAME" IN { <==ZONE_NAME表示要解析的域名,正解時就是域名本身,如:jd.com;反解的時候:ip網段反寫.in-addr.arpa; type {master|slave|hint|forward}; <==定義zone的類型:master主DNS服務器,slave從服務器,hint根服務器,forward轉發域 file "ZONE_NAME.zone"; <==標明解析域名的數據庫文件名 };
第三步:解析庫文件:/var/named/ZONE_NAME.ZONE <==與zone中file相對應,文件名必須一致
區域解析庫:由衆多資源記錄RR組成:
資源記錄類型:
1、SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄
格式:name [TTL] IN rr_type value
1、TTL表示該記錄被其他dns服務器查詢到後保留到對方服務器上的緩存當中保持多少秒,可全局繼承;
2、name:當前區域的名字
3、value: 有多部分組成:
$TTL 1D @ IN SOA dns1 admin.xiaomage.com. ( <==@可用於引用當前區域的名字,dns1當前區域的主DNS服務器,admin.xiaomage.com. 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般用.替換; 31 ;序列號 1D ;刷新時間 1H ;重試時間 1W ;過期時間 3H ) ;否定答案的TTL值 dns1 IN A *.*.*.* <==主機名對應主機的IP地址
2、A :internet Address,作用,FQDN --> IP
3、AAAA: FQDN --> IPv6
4、PTR: 反向解析:有特定格式,把IP地址反過來寫,1.2.3.4 要寫出4.3.2.1;而且有特定後綴:in-addr.arpa.,所以完整寫法爲:4.3.2.1.in-addr.arpa.
例如:4.3.2.1.in-addr.arpa. IN PTR www.jd.com. <==注意每個後面必須要加“.”作爲結束符,不然系統會自動補上當前域名
5、NS: Name Server,專用於標明當前區域的DNS服務器,對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄
例如:jd.com IN NS ns1.jd.com
6、CNAME:Canonical Name,別名記錄
7、MX:Mail eXchanger,郵件交換器,對MX記錄而言,任何一個MX記錄後面的服務器名字,都應該在後續有一個A記錄
測試命令
1、dig 只用於測試dns系統,不會查詢hosts文件進行解析
語法:dig [-t type] name [@SERVER]
例如:dig -t a www.hxsd.com @1.1.1.1
+trace:跟蹤解析過程
+recurse:進行遞歸解析
2、host [-t type] name [SERVER]
例如:host –t NS hxsd.com 172.16.0.1
3、nslookup命令:nslookup[-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪個DNS server進行查詢
set q=RR_TYPE: 指明查詢的資源記錄類型
NAME: 要查詢的名稱
非交互式模式:·
nslookup www.hxsd.com 172.18.0.1