一、概述
DNS(Domain Name System)域名系統在TCP/IP網絡中提供域名與IP地址的解析服務。
1、域和域名
(1)DNS樹的每個節點代表一個域,通過這些節點,對整個域名空間進行劃分,成爲一個層次結構。域名空間的每個域的名字,通過域名進行表示。
(2)域名:通常由一個完全合格域名(FQDN)標識。FQDN能準確表示出其相對於DNS域樹根的位置,也就是節點到DNS樹根的完全表述方式,從節點到樹根採用反向書寫,並將每個節點用”.”分隔,對於DNS域google來說,其完全正式域名(FQDN)爲google.com
例:geogle爲com域的子域,其表示方法爲google.com,而www爲google域中的子域,可以使用www.google.com表示。
注:通常情況下,FQDN有嚴格的命名限制,長度不能超過256字節,只允許使用字符a-z,0-9,A-Z和減號(-)。點號(.)只允許在域名標誌之間或者FQDN的結尾使用,域名不區分大小。
(3)分類
域由頂層到下層,可以分爲:根域、頂級域、二級域、子域。
A、DNS根域下面是頂級域,由internet域名註冊授權機構管理,共有以下三種類型的頂級域:
組織域:採用3個字符的代號,表示DNS域中所包含的主要功能或活動。比如,com爲商業機構組織,edu爲教育機構組織,gov爲政府機構組織,mail爲軍事機構組織,net爲網絡機構組織,org爲非盈利性機構組織,int爲國際機構組織;
B、地址域:採用兩個字符的國家或地區代號。如cn爲中國,kr爲韓國,us爲美國;
C、反向域:這是個特殊域,名字爲in-addr.arpa,用於將IP地址映射到名字(反向查詢);
2、區(Zone),資源記錄
區是DNS名稱空間的一部分,其包含了一組存儲在DNS服務器上的資源記錄。
使用區的概念,DNS服務器回答關於自己區中主機的查詢,每個區都有自己的授權服務器。
3、主域名服務器與輔助域名服務器
當區的輔助服務器啓動時,它與該區的主控服務器進行連接並啓動一次區傳輸,區輔助服務器定期與區主控服務器通信,查看區數據是否改變。如果改變了,它就啓動一次數據更新傳輸。
4、輔助服務器的優點:
(1)容錯能力
配置輔助服務器後,在該區主服務器崩潰的情況下,客戶機仍能解析該區的名稱。一般把區的主服務器和區的輔助服務器安裝在不同的子網上,這樣如果到一個子網的連接中斷,DNS客戶機還能直接查詢另一個子網上的名稱服務器。
(2)減少廣域鏈路的通信量
如果某個區在遠程有大量的客戶機,用戶就可以在遠程添加該區的輔助服務器,並把遠程的客戶機配置成先查詢這些服務器,這樣就能防止客戶機通過慢鏈路通信來進行DNS查詢。
(3)減輕主服務器的負載
輔助服務器可以回答該區的查詢,從而減少該區主服務器必須回答的查詢數。
A、DNS服務器
運行DNS服務器程序的計算機,存儲DNS數據庫信息。DNS服務器會嘗試解析客戶機的查詢請求。
B、DNS緩存
DNS服務器在解析客戶機請求時,如果本地沒有DNS信息,則可以會詢問DNS服務器,當其他域名服務器返回查詢結果時,該DNS服務器將結果記錄在本地的緩存中,成爲DNS緩存。當下一次客戶機提交相同的請求時,DNS服務器能夠直接使用緩存中的DNS信息進行解析。
5、DNS查詢方式:遞歸查詢和迭代查詢
(1)遞歸查詢
遞歸查詢是一種DNS服務器的查詢模式,在該模式下DNS服務器接受到客戶機請求,必須使用一個準確的查詢結果回覆給客戶機。如果DNS服務器本地沒有存儲查詢DNS信息,那麼該服務器會查詢其他服務器,並將返回的查詢結果提交給客戶機。
(2)迭代查詢
DNS服務器另外一種查詢方式爲迭代查詢,當客戶機發送查詢請求時,DNS服務器並不直接回複查詢結果,而是告訴客戶機另一臺DNS服務器地址,客戶機再向這臺DNS服務器提交請求,依次循環直到返回查詢的結果爲止。
總結:一般情況下,從PC客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間的交互查詢就是迭代查詢。
6、正向解析與反向解析
(1)正向解析
正向解析是指域名到IP地址的解析過程。
(2)反向解析
反向解析是從地址到域名的解析過程,反向解析的作用爲服務器的身份認證。
7、DNS資源記錄
(1)SOA資源記錄
每個區在區的開始處都包含了一個起始授權記錄(startof authority record),簡稱SOA記錄。
SOA定義了域的全局參數,進行整個域的管理設置。一個區域文件只允許存在唯一的SOA記錄。
(2)NS資源記錄
NS(Name Server)記錄是域名服務器記錄,用來指定該域名由那個DNS服務器來進行解析,每個區在區根處至少包含一個NS記錄。
(3)A資源記錄
地址(A)資源記錄把FQDN映射到IP地址。因爲有此記錄,所以DNS服務器能解析FQDN域名對應的IP地址。
(4)PTR資源記錄
相對於A資源記錄,指針(PTR)記錄把IP地址映射到FQDN。用於反向查詢,通過IP地址找到域名。
(5)CNAME資源記錄
別名記錄(CNAME)資源記錄創建特定FQDN的別名。用戶可以使用CNAME記錄來隱藏用戶網絡的實現細節,使連接的客戶機無法知道真正的域名。
例:ping百度時,解析到了百度的別名服務器,百度有個cname=www.a.shifen.com.的別名。
(6)MX資源記錄
郵件交換(MX)資源記錄,爲DNS域名指定的郵件交換服務器。
二、安裝DNS
1、BIND簡介
BIND全稱爲Berkeley Internet Name Domain(伯克利因特網名稱域系統)。BIND主要有三個版本:BIND4、BIND8、BIND9
BIND8融合了許多提高效率、穩定性和安全性的技術,而BIND9增加了一些超前的理念:IPv6支持、密鑰加密、多處理器支持、線程安全操作、增量區傳送等等。
2、安裝
[root@server1 Desktop]# rpm -ivh/mnt/Packages/ bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
#改包爲DNS服務器的主程序包
[root@server1Desktop]# rpm -ivh/mnt/Packages/bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
#提高安全性
#bind-chroot是bind的一個功能,使bind可以在一個chroot的模式下運行,也就是說,bind運行時的/(根)目錄,並不是真正的/(根)目錄,只是系統中的一個子目錄而已。這樣做的目的是爲了提高安全性。因爲在chroot的模式下,bind可以訪問的範圍僅限於這個子目錄的範圍裏,無法進一步的提升,進入到系統的其他目錄中。
[root@server1 Desktop]# rpm -ivh/mnt/Packages/bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
#該包爲客戶端工具,默認安裝,用於搜索域名指令。
3、DNS服務器相關配置文件
/etc/named.conf是BIND的核心配置文件,它包含了BIND的基本配置,但其並不包括區域數據
4、啓動服務
(1)要先啓動named服務,否則/var/named/chroot/目錄下的文件不會被掛載上
[root@server1 Desktop]# /etc/init.d/namedstart
[root@server1 Desktop]# mount
……
/etc/named on /var/named/chroot/etc/namedtype none (rw,bind)
/var/named on /var/named/chroot/var/namedtype none (rw,bind)
/etc/named.conf on/var/named/chroot/etc/named.conf type none (rw,bind)
/etc/named.rfc1912.zones on/var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
……..
(2)在客戶端配置好DNS服務器地址
方法1:
[root@server2 Desktop]# cat/etc/resolv.conf
# Generated by NetworkManager
domain localdomain
search localdomain example.com
nameserver 192.168.18.129
方法2:
在/etc/sysconfig/network-scripts/ifcfg-eth0文件中添加以下內容:
DNS1=192.168.18.129
三、實戰演練
例1:配置DNS服務器解析:zhang.cn
(1)修改配置文件
[root@server1 Desktop]# cd /var/named/chroot/etc
root@server1 etc]# vim named.conf
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { any; };
17 allow-query { any; };
42 zone "zhang.cn" IN {
43 type master;
44 file "zhang.cn.zone";
45 };
注:也可以修改/etc/named.conf,但是爲了安全起見,建議修改上述文件
此文件中整體分爲以下三段:
Options:對全局生效
Zone:針對某個區域生效
(2)配置正向解析區域
[root@server1 etc]# cd/var/named/chroot/var/named/
[root@server1 named]# cp -p named.localhostzhang.cn.zone
[root@server1 named]# vim zhang.cn.zone
1$TTL 1D
2zhang.cn. IN SOA dns.zhang.cn. root.zhang.cn. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8zhang.cn. NS dns.zhang.cn.
9dns.zhang.cn. A 192.168.18.129
10www.zhang.cn. A 192.168.18.129
11www1.zhang.cn. CNAME www.zhang.cn.
配置文件參數說明:
$TTL 1D 設置有效地址解析記錄的默認緩存時間,默認爲1天也就是1D;
#原來的@表示當前的域zhang.cn.,爲了方便理解此處直接寫爲zhang.cn.
設置SOA記錄爲:dns.zhang.cn. #在配置文件寫域名時,都把.寫上
域管理郵箱root.zhang.cn. #由於@有其他的含義,所以此處用.代替@
;更新序列號,用於標識數據庫的變換,可以在10位以內,如果存在輔助DNS區域,建議每次更新完數據庫,手動加1;
1D ;刷新時間,從域名服務器更新該地址數據庫文件的間隔時間,默認爲1天;
1H ;重試延時,從域名服務器更新地址數據庫失敗以後,等待多長時間,默認爲1小時;
1W ;到期,失效時間,超過該時間仍無法更新數據庫,則不再嘗試,默認爲一週;
3H ;設置無效地址解析記錄(該數據庫中不存在的地址)默認緩存時間。設置無效記錄,最少緩存時間爲3小時;
SOA 區域授權起始記錄,區域文件第一條記錄,而且區域文件只能有一條;
NS 域的授權名稱服務器;
MX 域的郵件交換器,要跟着一個優先級值,越小越高;
A IPV4主機地址;
AAAA IPV6主機地址;
PTR 解析IP的指針;
CNAME 定義別名記錄;
[root@server1 named]# ll zhang.cn.zone
-rw-r----- 1 root named 269 Aug 28 20:21zhang.cn.zone
[root@server1 named]# cd
[root@server1 ~]# service named restart
##測試
[root@server1 ~]# vim/etc/sysconfig/network-scripts/ifcfg-eth0
5 DNS1=192.168.18.129
[root@server1 ~]# /etc/init.d/networkrestart
[root@server1 ~]# ping www.zhang.cn
PING www.zhang.cn (192.168.18.129) 56(84)bytes of data.
64 bytes from server1.example.com(192.168.18.129): icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from server1.example.com(192.168.18.129): icmp_seq=2 ttl=64 time=0.033 ms
例2:使DNS支持遞歸查詢
[root@server1 ~]# vim/var/named/chroot/etc/named.conf
18 recursion yes; #默認是支持遞歸查詢的
19
20 # dnssec-enable yes;
21 # dnssec-validation yes;
22 # dnssec-lookaside auto;
使DNS支持遞歸查詢時,需要將以上三條內容註釋,這樣客戶端才能通過這個DNS進行遞歸查詢,把DNS加密通訊功能關閉,纔可以和根服務器進行實時的迭代查詢。
[root@server1 ~]# /etc/init.d/named restart
##測試
[root@server2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=192.168.18.129
[root@server2 ~]# /etc/init.d/networkrestart
[root@server2 ~]# ping www.baidu.com
例3:DNS轉發服務器
[root@server1 ~]# vim/var/named/chroot/etc/named.conf
20 # dnssec-enable yes;
21# dnssec-validation yes;
22# dnssec-lookaside auto;
23
24 /* Path to ISC DLV key */
25 forward only; #僅執行轉發操作;(only,僅轉發;first,先查找本地zone,再轉發)
26 forwarders {8.8.8.8;}; #指定轉發查詢請求的DNS服務器列表
27
28 bindkeys-file "/etc/named.iscdlv.key";
29
30 managed-keys-directory "/var/named/dynamic";
31};
#25,26兩行應該加到option中
[root@server1 ~]# /etc/init.d/named restart
例4:搭建DNS主從服務器
(1)搭建一個主DNS服務器A,文件配置如下:
[root@server1 ~]# vim/var/named/chroot/etc/named.conf
45 zone "zhang.cn" IN {
46 type master;
47 file "zhang.cn.zone";
48 allow-transfer{192.168.18.0/24;};
49};
(2)從DNS服務器配置如下:
[root@server2 ~]# rpm -ivh/mnt/Packages/bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
[root@server2 ~]# rpm -ivh/mnt/Packages/bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
[root@server2 ~]# rpm -ivh/mnt/Packages/bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm
[root@server2 ~]# service named start
[root@server2 ~]# vim/var/named/chroot/etc/named.conf
10 options {
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { any; };
17 allow-query { any; };
18 recursion yes;
41 zone "zhang.cn." IN {
42 type slave;
43 file "slaves/zhang.cn.zone.file";
44 masters{ 192.168.18.129; };
45};
注:重啓DNS服務器時會在:/var/named/chroot/var/named/slaves文件夾下自動創建一個zhang.com.zone.file這個文件,此文件是從主DNS服務器上獲取的數據。
[root@server2 ~]# ls/var/named/chroot/var/named/slaves/
[root@server2 ~]# service named restart
[root@server2 ~]# ls/var/named/chroot/var/named/slaves/
zhang.cn.zone.file
[root@server2 ~]# ll/var/named/chroot/var/named/slaves/zhang.cn.zone.file
-rw-r--r-- 1 named named 341 Aug 29 04:54/var/named/chroot/var/named/slaves/zhang.cn.zone.file
例5:DNS實現負載均衡
在例4的基礎上操作
[root@server1 ~]# vim/var/named/chroot/var/named/zhang.cn.zone
[root@server1 ~]# /etc/init.d/named restart
##測試
例6:DNS主從密鑰認證
(1)保證主從服務器時間同步
[root@server1 ~]# vim /etc/ntp.conf #查看ntp服務器
[root@server1 ~]# ntpdate 0.rhel.pool.ntp.orgiburst #同步時間
(2)在DNS服務器上生成密鑰,進行主從認證
[root@server1 named]# cd /var/named/chroot/
[root@server1 chroot]# ls
dev etc usr var
[root@server1 chroot]# dnssec-keygen -ahmac-md5 -b 128 -n HOST zyz
Kzyz.+157+50159
-a hmac-md5 #採用hmac-md5加密算法
-b 128 #生成的密鑰長度爲128位
-n #密鑰類型,我們此處選擇主機類型
zyz #密鑰名稱
[root@server1 chroot]# ls
dev Kzyz.+157+50159.key usr
etc Kzyz.+157+50159.private var
[root@server1 chroot]# catKzyz.+157+50159.key
zyz. IN KEY 512 3 157ZFE59lCbuD08q0hbIylvAg==
[root@server1 chroot]# vim etc/named.conf
45key zyzkey {
46 algorithm hmac-md5;
47 secret "ZFE59lCbuD08q0hbIylvAg==";
48};
49zone "zhang.cn" IN {
50 type master;
51 file "zhang.cn.zone";
52 allow-transfer{key zyzkey;};
53};
[root@server1 named]# /etc/init.d/namedrestart
##檢測
root@server2 Desktop]# vim/var/named/chroot/etc/named.conf
42key zyzkey {
43 algorithm hmac-md5;
44 secret "ZFE59lCbuD08q0hbIylvAg==";
45};
46zone "zhang.cn." IN {
47 type slave;
48 file "slaves/zhang.cn.zone.file";
49 masters{ 192.168.18.129 key zyzkey; };
50};
[root@server2 Desktop]# rm -fr/var/named/chroot/var/named/slaves/zhang.cn.zone.file
[root@server2 Desktop]# /etc/init.d/namedrestart
[root@server2 Desktop]# ls/var/named/chroot/var/named/slaves/
zhang.cn.zone.file
附:
dig/nslookup #域名解析測試工具