DNS簡介數據庫
DNS其實你們都不陌生,由於這個是咱們訪問互聯網必不可少的一個東西,全稱:Domain Name System。在當今計算機網絡中是經過IP地址來進行主機之間互聯的,可是咱們知道IP地址有32位,之後還會普及IPv6,128位。對於人類來記憶實在太痛苦了。DNS的做用就是爲了解決域名到IP之間的轉換。這樣你們就恍然大悟了吧,咱們天天都在享受着DNS帶來的便捷。centos
DNS是一個分佈式、分層次的主機名管理架構,經過配置DNS服務器地址,主機不須要知道對應的IP地址就能經過主機名的形式訪問互聯網。那麼你要想了,全球這麼多IP地址,都在一臺DNS服務器上,萬一宕機了咋辦?天天這麼多訪問量,配置得多高啊!前輩們早就想好解決方法了。DNS利用相似倒狀樹的目錄結構將主機名的管理分配在不一樣層級的DNS服務器當中,通過分層管理,每一級DNS服務器負責部分域名信息,這就減輕了DNS服務器的負載。具體結構參考下圖:緩存
DNS解析過程bash
第一種:遞歸查詢。遞歸查詢通常是客戶機和服務器之間的查詢,即只發送一塊兒請求,其餘的工做交給上層服務器去解決,而後一層一層的反饋結果到客戶端;
服務器
第二種:迭代查詢。通常是DNS服務器與DNS服務器之間的方式,最初的服務器負責發起請求,一層層的找到目標服務器,在返回給客戶端,這個過程叫迭代。網絡
一次完整的查詢請求通過的流程:架構
Client --> hosts文件 -->DNS service tcp
Local DNS cache --> DNS server(recursion遞歸)-->server cache -->iteration(迭代) -->根--> 頂級域名DNS-->二級域名DNS…分佈式
DNS服務器的類型 ide
主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服務
一、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軟件
二、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組成:
資源記錄類型:
一、SOA:Start Of Authority,起始受權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄
格式:name [TTL] IN rr_type value
一、TTL表示該記錄被其餘dns服務器查詢到後保留到對方服務器上的緩存當中保持多少秒,可全局繼承;
二、name:當前區域的名字
三、value: 有多部分組成:
$TTL 1D @ IN SOA dns1 admin.xiaomage.com. ( <==@可用於引用當前區域的名字,dns1當前區域的主DNS服務器,admin.xiaomage.com. 當前區域管理員的郵箱地址;但地址中不能使用@符號,通常用.替換; 31 ;序列號 1D ;刷新時間 1H ;重試時間 1W ;過時時間 3H ) ;否認答案的TTL值 dns1 IN A *.*.*.* <==主機名對應主機的IP地址
二、A :internet Address,做用,FQDN --> IP
三、AAAA: FQDN --> IPv6
四、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. <==注意每一個後面必需要加「.」做爲結束符,否則系統會自動補上當前域名
五、NS: Name Server,專用於標明當前區域的DNS服務器,對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄
例如:jd.com IN NS ns1.jd.com
六、CNAME:Canonical Name,別名記錄
七、MX:Mail eXchanger,郵件交換器,對MX記錄而言,任何一個MX記錄後面的服務器名字,都應該在後續有一個A記錄
測試命令
一、dig 只用於測試dns系統,不會查詢hosts文件進行解析
語法:dig [-t type] name [@SERVER]
例如:dig -t a www.hxsd.com @1.1.1.1
+trace:跟蹤解析過程
+recurse:進行遞歸解析
二、host [-t type] name [SERVER]
例如:host –t NS hxsd.com 172.16.0.1
三、nslookup命令:nslookup[-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪一個DNS server進行查詢
set q=RR_TYPE: 指明查詢的資源記錄類型
NAME: 要查詢的名稱
非交互式模式:·
nslookup www.hxsd.com 172.18.0.1