一、DNS概述
DNS(Domain Name System,域名系統),萬維網上作爲域名和IP地址相互映射的一個分佈式數據庫,方便用戶使用名稱的訪問互聯網。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS的主要作用就是解決域名到IP之間的轉換。hosts 只能作用於本主機,而不能同步更新到所有主機使用,而且當hosts文件很龐大時是很難管理。
DNS是一個網路服務,DNS協議運行在UDP或TCP協議之上,使用端口號53。通常DNS在查詢的時候是以udp這個快速的數據傳輸協議來查詢的,但是一旦沒辦法查詢到完整的信息時就會再次以TCP協議來進行重新查詢,因此DNS服務在啓動時會同時開啓tcp53號端口和udp的53號端口。(953是rndc監聽端口)
二、DNS查詢類型
2.1 遞歸查詢
遞歸查詢是最常見的查詢方式,當一個客戶機發送一個查詢給本地域名服務器時,本地域名服務器必須返回一個IP地址,如果解析不到IP,域名服務器將代替提出請求的客戶機(下級DNS服務器)進行域名查詢,若域名服務器不能直接回答,則域名服務器會在域各樹中的各分支的上下進行遞歸查詢,最終將返回查詢結果給客戶機,在域名服務器查詢期間,客戶機將完全處於等待狀態。一般客戶機和服務器之間屬遞歸查詢。
2.2 迭代查詢
迭代查詢又稱重指引。當服務器使用迭代查詢時能夠使其他服務器返回一個最佳的查詢點提示或主機地址,若此最佳的查詢點中包含需要查詢的主機地址,則返回主機地址信息,若此時服務器不能夠直接查詢到主機地址,則是按照提示的指引依次查詢,直到服務器給出的提示中包含所需要查詢的主機地址爲止。一般DNS服務器之間屬迭代查詢。
注:客戶端指向dns服務器時,不能指向根服務器(根dns服務器不接受遞歸查詢),指向的一定是允許給本地主機做遞歸查詢的dns服務器。
三、DNS服務器類型
DNS服務器的類型:
主DNS服務器
從DNS服務器
緩存DNS服務器(轉發器)
主DNS服務器:管理和維護所負責解析的域內解析庫的服務器
從DNS服務器:從主服務器或從服務器“複製”(區域傳輸)解析庫副本
序列號:解析庫版本號,主服務器解析庫變化時,其序列遞增
刷新時間間隔:從服務器從主服務器請求同步解析的時間間隔
重試時間間隔:從服務器請求同步失敗時,再次嘗試時間間隔
過期時長:從服務器聯繫不到主服務器時,多久後停止服務
“通知”機制:主服務器解析庫發生變化時,會主動通知從服務器
四、DNS資源記錄
爲了將名字解析爲IP地址,服務器查詢它們的區(又叫DNS數據庫文件或簡單數據庫文件)。區中包含組成相關DNS域資源信息的資源記錄(RR)。例如,某些資源記錄把友好名字映射成IP地址,另一些則把IP地址映射到友好名字。某些資源記錄不僅包括DNS域中服務器的信息,還可以用於定義域,即指定每臺服務器授權了哪些域,這些資源記錄就是SOA和NS資源記錄。
區域解析庫:由衆多資源記錄(Resource Record, RR)組成,這些記錄類型有:A, AAAA, PTR, SOA, NS, CNAME, MX,其中:
SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄 A:internet Address,作用,FQDN --> IP AAAA: FQDN --> IPv6 PTR: PoinTeR,IP --> FQDN NS: Name Server,專用於標明當前區域的DNS服務器 CNAME:Canonical Name,別名記錄 MX: Mail eXchanger,郵件交換器
資源記錄定義的格式:
語法:name [TTL] IN rr_type value
注意:
(1) TTL可從全局繼承
(2) @可用於引用當前區域的名字
(3) 同一個名字可以通過多條記錄定義多個不同的值;此時DNS服務器會以輪詢方式響應
(4) 同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;此僅表示通過多個不同的名字可以找到同一個主機
4.1 SOA記錄
name: 當前區域的名字,例如“Google.com.”
value: 有多部分組成
(1) 當前區域的主DNS服務器的FQDN,也可以使用當前區域的名字;
(2) 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般用.替換
(3) 主從服務區域傳輸相關定義以及否定的答案的統一的TTL
例如:
mumu.com. 86400 IN SOA ns.mumu.com. nsadmin.mumu.com. ( 2015042201 ;序列號 2H ;刷新時間 10M ;重試時間 1W ;過期時間 1D ;否定答案的TTL值 )
4.2 NS記錄
name: 當前區域的名字
value: 當前區域的某DNS服務器的名字,例如ns.magedu.com.
注意:一個區域可以有多個NS記錄
例如:
mumu.com. IN NS ns1.mumu.com. mumu.com. IN NS ns2.mumu.com.
注意:
(1) 相鄰的兩個資源記錄的name相同時,後續的可省略
(2) 對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄
4.3 MX記錄
name: 當前區域的名字
value: 當前區域的某郵件服務器(smtp服務器)的主機名
一個區域內,MX記錄可有多個;但每個記錄的value之前應該有一個數字(0-99),表示此服務器的優先級;數字越小優先級越高
例如:
mumu.com. IN MX 10 mx1.mumu.com. IN MX 20 mx2.mumu.com.
注:對MX記錄而言,任何一個MX記錄後面的服務器名字,都應該在後續有一個A記錄
4.4 A記錄
name: 某主機的FQDN,例如www.mumu.com.
value: 主機名對應主機的IP地址
例如:
www.mumu.com. IN A 1.1.1.1 www.mumu.com. IN A 2.2.2.2 mx1.mumu.com. IN A 3.3.3.3 mx2.mumu.com. IN A 4.4.4.4 $GENERATE 1-254 HOST$ A 1.2.3.$ *.mumu.com. IN A 5.5.5.5 mumu.com. IN A 6.6.6.6
注:避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
4.5 其它記錄
AAAA:name: FQDN
value: IPv6
PTR:name: IP,有特定格式,把IP地址反過來寫,1.2.3.4,要寫作4.3.2.1;而有特定後綴:inaddr.arpa.,所以完整寫法爲:4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.mumu.com.
如1.2.3爲網絡地址,可簡寫成:
4 IN PTR www.mumu.com.
注:網絡地址及後綴可省略;主機地址依然需要反着寫
4.5 別名記錄
CNAME:
name: 別名的FQDN
value: 真正名字的FQD
例如:
www.mumu.com. IN CNAME websrv.mumu.com.
子域
子域授權:每個域的名稱服務器,都是通過其上級名稱服務器在解析庫進行授權類似根域授權tld:
.com. IN NS ns1.com. .com. IN NS ns2.com. ns1 .com. IN A 2.2.2.1 ns2.com. IN A 2.2.2.2
magedu.com. 在.com的名稱服務器上,解析庫中添加資源記錄
mumu.com. IN NS ns1.mumu.com. mumu.com. IN NS ns2.mumu.com. mumu.com. IN NS ns3.mumu.com. ns1.mumu.com. IN A 3.3.3.1 ns2.mumu.com. IN A 3.3.3.2 ns3.mumu.com. IN A 3.3.3.3
glue record:粘合記錄,父域授權子域的記錄
五、安裝DNS服務器
DNS服務安裝軟件名字爲bind,還有其他相關的軟件包,安裝DNS服務跟安裝samba、dhcp服務步驟相同,首先檢查系統中是否已安裝bind包。DNS服務需要4個組件 bind-utils-9.2.11-16、gpbind-1.11-4、bind-9.2.1-16、caching-nameserver-7.2-7,而系統默認已經安裝了前兩個,所以我們只需要安裝bind-9.2.1-16(位於第一張光盤)和caching-nameserver-7.2-7(位於第二張光盤)。
六、DNS的配置文件
主配置文件:
/etc/named.conf 詳解:
[root@(mumu 7) ~]# vim /etc/named.conf options { listen-on port 53 { any; }; #默認監聽本機的端口,即哪些主機可以進行訪問解析,any表示所有,也可註釋掉或調整爲指定IP, 注意這裏any後面一定要有分號; // listen-on-v6 port 53 { ::1; }; #開啓ipv6監聽,可用“//”註釋掉; directory "/var/named"; #對應數據庫文件的目錄位置,即區域文件配置目錄; dump-file "/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運行所有,也可註釋掉; allow-transfer { none; }; #允許區域傳送的主機;可拒絕所有、指定ip傳送,默認開啓,建議指定ip進行區域傳送, 這裏設置爲none recursion yes; #遞歸查詢,默認開啓 dnssec-enable no; #sec功能,與安全加密傳輸相關的選項,可註釋掉,這裏設置爲no dnssec-validation no; #同上一條,可註釋掉,這裏設置爲no /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key";};logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { #根區域定義,若要做內網根服務器,要註釋掉 type hint; #設置區域類型(hint表示根域,master表示主域,slave表示從域) file "named.ca"; #設置對應的根域地址數據庫文件 include "/etc/named.mumu.zones"; #加載指定區域文件 include "/etc/named.root.key";
注:
/etc/named.rfc1912.zones 詳解:
其中 zone 的格式爲:
zone "ZONE_NAME" IN { type {master|slave|hint|forward}; file "ZONE_NAME.ZONE"; };
type:
該zone的類型,主要的類型有:針對根的hint,主DNS的master,從DNS的salve和專門用於轉發的域類型forward,除了根外默認爲master;
file:
該zone的文件名稱
ZONE_NAME:
表示要解析的域名;正解時爲域名本身,如 magedu.com;反解的時候有固定的格式:ip網段反向 .in-addr.arpa。
ip網段反向是指:如域名所對應的主機 ip 的網段爲 192.168.159.0/24 網絡,那麼就需要將該網絡的網絡ID部分倒着寫,網絡ID部分爲192.168.159,倒着寫就爲159.168.192。
七、NDS解析
要實現DNS服務就需要對上圖的三個文件進行配置,它們分別是主配置文件,區域配置文件,區域數據配置文件
DNS系統系統在網絡中的作用就是維護着一個地址數據庫,其中記錄了各種主機域名和IP地址的對應關係,以便爲客戶程序提供正向或反向的地址查詢服務。
正向解析:根據域名查詢IP地址,是DNS最基本也是最常用的功能
反向解析:根據IP地址查詢域名,不怎麼常用
正向解析庫文件爲:/var/named/mumu.com.zone
反向解析庫文件爲:/var/name/192.168.159.zone
八、實驗
在centos7上部署dns實現對magedu.com的正向解析及對192.168.153的反向解析
1、進入linux界面,首先安裝bind安裝文件,bind是一個提供域名服務的DNS服務程序,在系統光盤中這個安裝包是自帶的,可以用yum命令直接安裝
2、首先我們先對主配置文件進行配置,這其中需要更改的內容爲監聽地址和端口,還有允許使用本DNS服務的主機,這裏我將監聽地址設爲any,將允許使用本DNS服務設爲any,即所有。因爲文件過長,分了三張圖說明。
3、配置區域配置文件,該文件中有着很多模板,這裏複製一個模板進行更改,將域名更改爲mumu.com,名字可自行定義,第二行中爲master,表示爲主服務器,接着我將區域數據配置文件命名爲named.mumu.zones,這裏沒有設置從服務器,所以最後一行不用更改。
同時,做DNS反向解析需要對區域配置文件和區域數據文件進行配置,這裏我們同樣可以利用上面的模板進行更改,這裏要注意反向區域的文件格式,是由倒序的網絡地址和in-addr.arpa組合而成,這裏的倒序IP只需要寫前三位,最後一位是在數據文件中進行配置的。
4、查看解析文件是否有錯誤
5、配置區域數據配置文件,在/var/named目錄下可以看到named.localhost這個文件,這個正是一個區域數據配置文件,我們複製一個作爲模板,將其改名爲我們剛纔建立的一個域名。區域數據配置文件模板準備好後我們進入其中進行配置,這裏面的@代表的意思爲域名mumu.com.,所以在開頭只需要寫一個郵箱名即可,上面的一列藍色參數指的是同步從服務器的一些時間參數,這裏不進行配置,下面的一些參數纔是我們需要更改的內容,其中NS(nameserver)指的是域名服務器,MX爲郵件交換記錄,A(address)表示地址,CNAME表示別名,這裏可以按照上面的格式進行配置,配置時可以用tab鍵對其,保證美觀.
接着,利用正向區域的文件作爲模板複製一份,然後在裏面進行更改,因爲反向區域我配置的是159.168.192這個網段,所以在這裏的域名要寫全,接着就按照前面IP地址,後面域名的形式進行配置。
6、主配置文件、區域配置文件、區域數據配置文件,三個文件配置完成後需要重啓服務器,同時要關閉防火牆,否則DNS服務無法啓動。
如果沒有信息顯示的話說明named.conf配置文件沒問題
重啓服務
7、一切配置完成後還需要將DNS服務地址放到/etc/resolv.conf這個文件下,不然他不具備DNS功能。所以,在目錄 /etc 下找到resolv.conf 文件並修改。
8、測試DNS是否能夠正常解析,這裏解析剛剛設置的幾個域名,都可以解析的到。
除了系統提供的一些名稱解析命令外,DNS軟件包當中提供了一些測試命令,這些命令有nslookup、dig、host。
/etc/hosts :記錄hostname對應的ip地址
/etc/resolv.conf :設置DNS服務器的ip地址
/etc/host.conf :指定域名解析的順序(是從本地的hosts文件解析還是從DNS解析)
Nslookup 語法:
Nslookup [FQDN] [server]
Nslookup
參數說明:
可以直接在nslookup後加上待查詢的主機名稱或者ip,【server】可有可無。
如果在nslookup後面沒有加上任何主機名稱或ip,那將進入nslookup的查詢功能。在nslookup的查詢功能當中,可以輸入其他參數來進行特殊查詢。
nslookup測試:
注:正向解析和反向解析標註錯了。
dig 語法:
dig [-t type] name [@server][query options]
查詢選項:
+【no】trance:跟蹤解析過程
+【no】recure:進行遞歸解析
參數說明:
@server :如果不想以/etc/resolv.conf來作爲dns主機,則可以在此填入其他的ip
Type :預設是查詢A記錄,你可以在這裏寫入其他的記錄,如:MX,NS等。此功能亦可使用[-t type]來處理。
dig測試:
正向解析
反向解析
host 語法:
host [-a] [FQDN] [server] host -l [domain] [server]
參數說明:
-a :代表列出該主機所有的相關資訊,包括IP、TTL等
-l :若後面接的那個domain設定允許allow-transfer時,則列出該domain所管理的所有主機名稱對應資料。
Server: 這個參數可有可無,當想要利用非/etc/resolv.conf內的主機來查詢主機名稱與ip的對應時,就可以利用這個參數了。
host 測試:
注:如果有相關報錯信息,則可查看系統日誌信息 /var/log/messages。