天天看點

【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

本節所講内容:

•DNS伺服器常見概念

•DNS伺服器安裝及相關配置檔案

•實戰:為公司内網搭建一個DNS伺服器

•實戰:搭建DNS遞歸查詢伺服器和使用DNS進行負載均衡

•實作:搭建DNS主從伺服器

DNS服務端:xuegod63.cn   IP:192.168.0.63
DNS用戶端:xuegod64.cn   IP:192.168.0.64      
DNS服務概述:
DNS(Domain Name System)域名系統,在TCP/IP 網絡中有非常重要的地位,能夠提供域名與IP位址的解析服務。      

​DNS 是一個分布式資料庫,​

​命名系統采用層次的邏輯結構,如同一棵倒置的樹,這個邏輯的樹形結構稱為域名空間,由于DNS 劃分了域名空間,是以各機構可以使用自己的域名空間建立DNS資訊。

注:DNS 域名空間中,​

​樹的最大深度不得超過127 層,樹中每個節點最長可以存儲63 個字元。​

【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

1、域和域名:

DNS 樹的每個節點代表一個域,通過這些節點,對整個域名空間進行劃分,成為一個層次結構。

域名空間的每個域的名字,通過域名進行表示。

​域名:​

​​通常由一個​

​完全合格域名(FQDN)​

​辨別。FQDN能準确表示出其相對于DNS 域樹根的位置,也就是節點到DNS 樹根的完整表述方式,從節點到樹根采用反向書寫,并将每個節點用“.”分隔,對于DNS 域google 來說,其完全正式域名(FQDN)

例如:​​google.com​​​。google為com域的子域,​​其表示方法為google.com​​,而www為google域中的子域,可以使用www.google.com表示。

注意:通常,FQDN 有嚴格的命名限制,​

​長度不能超過256 位元組,​

​​隻允許使用字元a-z,0-9,A-Z和減号(-)。點号(.)隻允許在域名标志之間(例如“​​google.com​​​”)或者FQDN 的結尾使用。域名不區分大小。由最頂層到下層,​

​可以分成:根域、頂級域、二級域、子域。​

Internet 域名空間的最頂層是根域(root),其記錄着Internet 的重要DNS 資訊,由Internet域名注冊授權機構管理,該機構把域名空間各部分的管理責任配置設定給連接配接到Internet 的各個組織。​

​全球有13個根(root)伺服器。​

DNS 根域下面是頂級域,也由Internet 域名注冊授權機構管理。

共有3 種類型的頂級域。

組織域:采用3 個字元的代号,表示DNS 域中所包含的組織的主要功能或活動。比如com 為商業機構組織,edu 為教育機構組織,gov 為政府機構組織,mil 為軍事機構組織,net 為網絡機構組織,org 為非營利機構組織,int 為國際機構組織。    
位址域:采用兩個字元的國家或地區代号。如cn 為中國,kr 為南韓,us 為美國。
反向域:這是個特殊域,名字為in-addr.arpa,用于将IP 位址映射到名字(反向查詢)。對于頂級域的下級域,Internet 域名注冊授權機構授權給Internet 的各種組織。當一個組織獲得了對域名空間某一部分的授權後,該組織就負責命名所配置設定的域及其子域,包括域中的計算機和其他裝置,并管理配置設定的域中主機名與IP 位址的映射資訊。      

2、區(Zone)

區是DNS 名稱空間的一部分,其包含了一組存儲在DNS 伺服器上的資源記錄。使用區的概念,DNS 伺服器回答關于自己區中主機的查詢,每個區都有自己的授權伺服器。

3、主域名伺服器與輔助域名伺服器

當區的輔助伺服器啟動時,它與該區的主要伺服器進行連接配接并啟動一次區傳輸,區輔助伺服器定期與區主要伺服器通信,檢視區資料是否改變。如果改變了,它就啟動一次資料更新傳輸。每個區必須有主伺服器,另外每個區至少要有一台輔助伺服器,否則如果該區的主伺服器崩潰了,就無法解析該區的名稱。

輔助伺服器的優點:

1)容錯能力

配置輔助伺服器後,在該區主伺服器崩潰的情況下,客戶機仍能解析該區的名稱。一般把區的主
伺服器和區的輔助伺服器安裝在不同子網上,這樣如果到一個子網的連接配接中斷,DNS 客戶機還能
直接查詢另一個子網上的名稱伺服器。      

2)減少廣域鍊路的通信量

如果某個區在遠端有大量客戶機,使用者就可以在遠端添加該區的輔助伺服器,并把遠端的客戶機
配置成先查詢這些伺服器,這樣就能防止遠端客戶機通過慢速鍊路通信來進行DNS 查詢。      

3)減輕主伺服器的負載

輔助伺服器能回答該區的查詢,進而減少該區主伺服器必須回答的查詢數。      

4、DNS 相關概念

(1)DNS 伺服器

運作DNS 伺服器程式的計算機,儲存DNS 資料庫資訊。DNS 伺服器會嘗試解析客戶機的查詢請求。
在解答查詢時,如果DNS 伺服器能提供所請求的資訊,就直接回應解析結果,如果該DNS 伺服器
沒有相應的域名資訊,則為客戶機提供另一個能幫助解析查詢的伺服器位址,如果以上兩種方法
均失敗,則回應客戶機沒有所請求的資訊或請求的資訊不存在。      

(2)DNS 緩存

DNS 伺服器在解析客戶機請求時,如果本地沒有該DNS 資訊,則可以會詢問其他DNS 伺服器,當
其他域名伺服器傳回查詢結果時,該DNS 伺服器會将結果記錄在本地的緩存中,成為DNS 緩存。
當下一次客戶機送出相同請求時,DNS 伺服器能夠直接使用緩存中的DNS 資訊進行解析。      

DNS查詢方式: 遞歸查詢和疊代查詢

看一個DNS查詢過程:

​​通過8個步驟的解析過程就使得用戶端可以順利通路www.163.com​​ 這個域名,但實際應用中,通常這個過程是非常迅速的

【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析
<1> 客戶機送出域名解析請求,并将該請求發送給本地的域名伺服器。
<2> 當本地的域名伺服器收到請求後,就先查詢本地的緩存。如果有查詢的DNS 資訊記錄,則直接傳回查詢的結果。如果沒有該記錄,本地域名伺服器就把請求發給根域名伺服器。
<3> 根域名伺服器再傳回給本地域名伺服器一個所查詢域的頂級域名伺服器的位址。
<4> 本地伺服器再向傳回的域名伺服器發送請求。
<5> 接收到該查詢請求的域名伺服器查詢其緩存和記錄,如果有相關資訊則傳回客戶機查詢結果,否則通知客戶機下級的域名伺服器的位址。
<6> 本地域名伺服器将查詢請求發送給傳回的DNS 伺服器。
<7> 域名伺服器傳回本地伺服器查詢結果(如果該域名伺服器不包含查詢的DNS 資訊,查詢過程将重複<6>、<7>步驟,直到傳回解析資訊或解析失敗的回應)。
<8> 本地域名伺服器将傳回的結果儲存到緩存,并且将結果傳回給客戶機。      

5、兩種查詢方式:

(1)遞歸查詢

遞歸查詢是一種DNS 伺服器的查詢模式,在該模式下DNS 伺服器接收到客戶機請求,必須使用一
個準确的查詢結果回複客戶機。如果DNS 伺服器本地沒有存儲查詢DNS 資訊,那麼該伺服器會詢
問其他伺服器,并将傳回的查詢結果送出給客戶機。      

(2)疊代查詢

DNS 伺服器另外一種查詢方式為疊代查詢,當客戶機發送查詢請求時,DNS 伺服器并不直接回複查詢結果,而是告訴客戶機另一台DNS 伺服器位址,客戶機再向這台DNS 伺服器送出請求,依次循環直到傳回查詢的結果為止。      

6、正向解析與反向解析

1)正向解析

正向解析是指域名到IP 位址的解析過程。      
【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

2)反向解析

反向解析是從IP 位址到域名的解析過程。反向解析的作用為伺服器的身份驗證。
http://dns.aizhan.com/      
【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

7、DNS資源記錄

1)SOA 資源記錄

每個區在區的開始處都包含了一個起始授權記錄(Start of 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.的别名

【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

6)MX 資源記錄

郵件交換(MX)資源記錄,為DNS 域名指定郵件交換伺服器。
郵件交換伺服器是為DNS 域名處理或轉發郵件的主機。處理郵件指把郵件投遞到目的地或轉交另一不同類型的郵件傳送者。轉發郵件指把郵件發送到最終目的伺服器,用簡單郵件傳輸協定SMTP 把郵件發送給離最終目的地最近的郵件交換伺服器,或使郵件經過一定時間的排隊。
以上是相關概念。      
模式: C/S 模式

端口:

[root@xuegod64 ~]# vim /etc/services 
端口:
tcp/53   udp/53    #用于用戶端查詢
tcp/953 udp/953   #用于DNS主從同步      

安裝DNS:

BIND 簡介

​​

​BIND 全稱為Berkeley Internet Name Domain(伯克利網際網路名稱域系統)。​

​​BIND 主要有三個版本:BIND4、BIND8、BIND9。

BIND8 融合了許多提高效率、穩定性和安全性的技術,而BIND9 增加了一些超前的理念:IPv6支援、密鑰加密、多處理器支援、線程安全操作、增量區傳送等等。

安裝程式:

yum install bind bind-chroot bind-utils   -y

bind-9.7.3-8.P3.el6.x86_64.rpm   #該包為DNS 服務的主程式包。
bind-chroot-9.7.3-8.P3.el6.x86_64.rpm   # 提高安全性。
#bind-chroot是bind的一個功能,使bind可以在一個chroot 的模式下運作.也就是說,bind運作時的/(根)目錄,并不是系統真正的/(根)目錄,隻是系統中的一個子目錄而已.這樣做的目的是為了提高安全性.因為在chroot的模式下,bind可以通路的範圍僅限于這個子目錄的範圍裡,無法進一步提升,進入到系統的其他目錄中.
bind-utils-9.7.3-8.P3.el6.x86_64.rpm  #該包為用戶端工具,預設安裝,用于搜尋域名指令。      

DNS伺服器相關配置檔案:

[root@xuegod63 Packages]# ls /etc/named.conf

/etc/named.conf     #  named.conf 是BIND 的核心配置檔案,它包含了BIND 的基本配置,但其并不包括區域資料。

/var/named/ 目錄為DNS資料庫檔案存放目錄,每一個域檔案都放在這裡      

啟動服務檢視端口:

[root@xuegod63 ~]# systemctl start named    # 啟動服務
[root@xuegod63 ~]# systemctl enable named
[root@xuegod63 Packages]# netstat -antup | grep 53
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      11135/named         
tcp        0      0 ::1:53                      :::*                        LISTEN      11135/named         
udp        0      0 127.0.0.1:53                0.0.0.0:*                               11135/named               

此服務的使用方法:

在用戶端配置好DNS伺服器位址。
[root@xuegod63 ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 202.106.46.151

[root@xuegod63 Packages]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=202.106.46.151      
實戰舉例

例1:配置DNS伺服器解析: ​​xuegod.cn​​

[root@xuegod63 ~]# cp /etc/named.conf  /etc/named.conf.bak 
[root@xuegod63 named]#  vim /etc/named.conf      

整體分3段:

options  :對全局生效
zone  : 針對某個區域生效      
【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

重點說一下type參數:

【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

type 字段指定區域的類型,對于區域的管理至關重要,一共分為6種:

Master:主DNS 伺服器:擁有區域資料檔案,并對此區域提供管理資料
Slave:輔助DNS 伺服器:擁有主DNS 伺服器的區域資料檔案的副本,輔助DNS 伺服器會從主DNS 伺服器同步所有區域資料。
Stub:stub 區域和slave 類似,但其隻複制主DNS 伺服器上的NS 記錄而不像輔助DNS 伺服器會複制所有區域資料。
Forward:一個forward zone 是每個域的配置轉發的主要部分。一個zone 語句中的type forward可以包括一個forward 和/或forwarders 子句,它會在區域名稱給定的域中查詢。如果沒有forwarders 語句或者forwarders 是空表,那麼這個域就不會有轉發,消除了options 語句中有關轉發的配置。
Hint:根域名伺服器的初始化組指定使用線索區域hint zone,當伺服器啟動時,它使用根線索來查找根域名伺服器,并找到最近的根域名伺服器清單。      

配置正向解析區域:

授權DNS ​​​伺服器管理xuegod.cn​​​ 區域,​​并把該區域的區域檔案命名為xuegod.cn​​

修改配置檔案:

[root@localhost etc]# vim /etc/named.conf      

例1:

[root@xuegod63 ~]# cat  /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
  listen-on port 53 { any; };
  listen-on-v6 port 53 { any; };
  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; };
  recursion yes;   //預設支援遞歸查詢

  dnssec-enable yes;
  dnssec-validation yes;
  dnssec-lookaside auto;  ##添加這一行

  /* Path to ISC DLV key */
  bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
  type hint;
  file "named.ca";
};

zone "xuegod.cn" IN {
        type master;
        file "xuegod.cn.zone";
};
include "/etc/named.rfc1912.zones";      

建立zone檔案:

[root@localhost chroot]# cd /var/named
[root@xuegod63 named]# cp -a named.localhost  xuegod.cn.zone 要加-a 注意權限。      

xuegod.cn.zone中的内容如下:

【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析
$TTL 1D
xuegod.cn.  IN SOA  dns.xuegod.cn.  root.xuegod.cn. (
          0 ; serial
          1D  ; refresh
          1H  ; retry
          1W  ; expire
          3H )  ; minimum
xuegod.cn.      NS      dns.xuegod.cn.
dns.xuegod.cn.  A       192.168.0.63
www.xuegod.cn.   A       192.168.0.63
www1.xeugod.cn.  CNAME   www.xuegod.cn.      

配置檔案參數說明:

$TTL 1D ;設定有效位址解析記錄的預設緩存時間,預設為1天也就是1D。
xuegod.cn.  IN SOA  dns. xuegod.cn. root. xuegod.cn.
#原來的@表示目前的域xuegod.cn.,為友善大家記憶,我們這裡,直接寫成xuegod.cn. 
#設定SOA記錄為:dns.xuegod.cn.  
#在此配置檔案中寫域名時,都把根. 也要寫上。
#域管理郵箱root.xuegod.cn.0由于@有其他含義,是以用“.”代替@。
0 ;更新序列号,用于标示資料庫的變換,可以在10位以内,如果存在輔助DNS區域,建議每次更新完資料庫,手動加1.
1D ;重新整理時間,從域名伺服器更新該位址資料庫檔案的間隔時間,預設為1天
1H ;重試延時,從域名伺服器更新位址資料庫失敗以後,等待多長時間,預設為為1小時
1W ; 到期,失效時間,超過該時間仍無法更新位址資料庫,則不再嘗試,預設為一周
3H ;設定無效位址解析記錄(該資料庫中不存在的位址)預設緩存時間。設定無效記錄,最少緩存時間為3小時      
【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析
NS @ ;域名伺服器記錄,用于設定目前域的DNS伺服器的域名位址,
A 127.0.0.1 ; 設定域名伺服器的A記錄,位址為ipv4的位址127.0.0.1,可以設定成192.168.100.102
AAAA ::1 ; 設定域名伺服器的A記錄,位址為ipv6的位址。      

資源記錄參數詳解:

1)CNAME 資源記錄

别名(CNAME)資源記錄用于為某個主機指定一個别名
CNAME 資源記錄文法格式:
别名 CNAME 主機名
www1.xuegod.cn.  CNAME   www.xuegod.cn.      

2)MX 資源記錄

MX(郵件交換器)資源記錄提供郵件傳遞資訊。該記錄會指定區域内的郵件伺服器名稱。
MX 資源記錄文法格式:      

3)PTR 資源記錄

指針(PTR)資源記錄。該記錄與A 記錄相反,用于查詢IP 位址與主機名的對應關系。
PTR 資源記錄文法格式:      

根區域設定及對應區域檔案

根區域是一個較為特殊的區域,記錄列出了全球根域名伺服器的資訊,域名通常用“.”表示,

【Linux雲計算架構:第二階段-Linux必會的20多種服務】第5章——搭建DNS伺服器實作域名解析

重新開機DNS伺服器:

[root@xuegod63 named]# service named restart
Stopping named: .umount: /var/named/chroot/var/named: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
                                                           [  OK  ]
Starting named:                                            [  OK  ]
[root@xuegod63 named]# cd
[root@xuegod63 ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]      

修改DNS位址:

[root@xuegod74 ~]# vim /etc/resolv.conf
nameserver 192.168.0.63

[root@localhost named]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE="eth0"
HWADDR="00:0C:29:A7:3D:8D"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.3.248
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=192.168.0.63

[root@xuegod63 ~]# service network restart      

測試:

[[root@xuegod63 ~]# ping www.xuegod.cn
PING www.xuegod.cn (192.168.0.63) 56(84) bytes of data.
64 bytes from xuegod63.cn (192.168.0.63): icmp_seq=1 ttl=64 time=0.196 ms
64 bytes from xuegod63.cn (192.168.0.63): icmp_seq=2 ttl=64 time=0.160 ms      
使用DNS支援遞歸查詢.
[root@localhost etc]#  vim  /etc/named.conf


options {
        listen-on port 53 { any ; };
        listen-on-v6 port 53 { any; };  
        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; };
        recursion yes;     //預設是支援遞歸查詢的

        #dnssec-enable yes;   
        #dnssec-validation yes;
        #dnssec-lookaside auto;
//但是要把這三條内容注釋了,其它内容不用改,這樣用戶端才能通過這個DNS進行遞歸查詢。把dns加密通訊功能關閉,才可以和根伺服器時行疊代查詢。      

測試:

[root@xuegod64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DNS1=192.168.0.63
[root@xuegod64 ~]# 
[root@xuegod64 ~]# service network restart      

2、在另一台主機上進行測試:

[root@localhost network-scripts]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.105) 56(84) bytes of data.
64 bytes from 61.135.169.105: icmp_seq=1 ttl=55 time=318 ms
64 bytes from 61.135.169.105: icmp_seq=3 ttl=55 time=147 ms      
搭建DNS轉發伺服器

家庭路由器就是一個典型的轉發伺服器。

[root@localhost etc]# vim  /etc/named.conf      

改:

把上面添加的
zone "xuegod.cn"IN{
          type master;
          file "xuegod.cn.zone";
};
這三行内容注釋或者删除,再添加兩行内容:
forward  only ;   //僅執行轉發操作 ,only:僅轉發;first:先查找本地zone,再轉發
            forwarders  { 8.8.8.8; };    //指定轉發查詢請求的DNS伺服器清單

即:
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        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; };
        recursion yes;    //允許遞歸查詢

        #dnssec-enable yes;  //注釋這三行
        #dnssec-validation yes;
        #dnssec-lookaside auto;

         forward  only ;   //僅執行轉發操作 ,only:僅轉發;first:先查找本地zone,再轉發
            forwarders  { 8.8.8.8; };    //指定轉發查詢請求的DNS伺服器清單

        bindkeys-file "/etc/named.iscdlv.key";
};      
搭建DNS主從伺服器

搭建一個主DNS伺服器A。配置内容如下:

[root@localhost etc]# vim named.conf 
        #dnssec-enable yes;
        #dnssec-validation yes;

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { any ; };
        listen-on-v6 port 53 { any; };
        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; };
        recursion yes;

        #dnssec-enable yes;
        #dnssec-validation yes;
        #dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
}
zone "." IN {
        type hint;
        file "named.ca";
};

zone "xuegod.cn" IN {
        type master;
        file "xuegod.cn.zone";
        allow-transfer { 192.168.1.0/24; }; #指定允許哪個網段的從DNS伺服器,可以同步主DNS伺服器zone檔案,不寫預設為所有。
};
include "/etc/named.rfc1912.zones";      

從DNS伺服器的配置:

注:主從時間一定要保持一緻

安裝程式:

yum install bind bind-chroot bind-utils   -y

bind-9.7.3-8.P3.el6.x86_64.rpm   #該包為DNS 服務的主程式包。
bind-chroot-9.7.3-8.P3.el6.x86_64.rpm   # 提高安全性。
#bind-chroot是bind的一個功能,使bind可以在一個chroot 的模式下運作.也就是說,bind運作時的/(根)目錄,并不是系統真正的/(根)目錄,隻是系統中的一個子目錄而已.這樣做的目的是為了提高安全性.因為在chroot的模式下,bind可以通路的範圍僅限于這個子目錄的範圍裡,無法進一步提升,進入到系統的其他目錄中.
bind-utils-9.7.3-8.P3.el6.x86_64.rpm  #該包為用戶端工具,預設安裝,用于搜尋域名指令

[root@xuegod64 Packages]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]

[root@localhost etc]# vim /etc/named.conf 

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        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; };
        #recursion no;
        recursion yes;

        #dnssec-enable yes;
        #dnssec-validation yes;
        #dnssec-lookaside auto;

        # forward  only ;

        # forwarders  { 192.168.3.248; };
        bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};
zone "xuegod.cn." IN {
        type slave;
        file "slaves/xuegod.cn.zone.file";
        masters { 192.168.0.63; };
};
include "/etc/named.rfc1912.zones";      

注:這樣從DNS伺服器就可以從主DNS伺服器上擷取DNS解析記錄資訊了。寫時注意slave slaves master 單詞的書寫,有的加s有的不加

重新開機從DNS伺服器會在:/var/named/slaves檔案夾下自動建立一個檔案xuegod.cn.zone.file 這個檔案是從DNS伺服器從主DNS伺服器上擷取的資料

這樣随便一個DNS就可以擷取主DNS伺服器的解析記錄,不安全,文章的後面會講如何進行主從認證。

注:主DNS記錄中應該有兩NS記錄,一條是主DNS的NS記錄,一條是從DNS伺服器的域名記錄。      

測試:

[root@xuegod64 etc]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[root@xuegod64 etc]# ls /var/named/slaves/   #看到這個檔案,說明成功了
xuegod.cn.zone.file      
通過DNS做負載均衡

編輯主DNS伺服器上的配置檔案:

[root@localhost named# cd  /var/named
[root@localhost named]# vim xuegod.cn.zone 
$TTL 1D
xuegod.cn.  IN SOA  dns.xuegod.cn. root.xuegod.cn. (
          1 ; serial
          1D  ; refresh
          1H  ; retry
          1W  ; expire
          3H )  ; minimum
xuegod.cn.  NS  dns.xuegod.cn.
dns.xuegod.cn.  A   192.168.0.63
www.xuegod.cn. 1  A      192.168.0.63 #DNS做簡單的負載均衡,1表示此記錄在用戶端儲存1秒
www.xuegod.cn. 1  A       192.168.0.64
www.xuegod.cn. 1  A       192.168.1.1
www1.xeugod.cn.  CNAME   www.xuegod.cn.
xuegod.cn.        MX  10  mail.xuegod.cn.   #添加郵件記錄
mail.xuegod.cn.    A    192.168.0.63
bbs.xuegod.cn.     CNAME  www.xuegod.cn.      
DNS主從密鑰認證

主伺服器重新開機時,會主動給從伺服器發送資訊,讓從伺服器更新自己的記錄,​

​通訊端口采用TCP 的53端口。​

​​ 注:TSIG (主從DNS的時間必須一樣)

1、同步時間:

[root@localhost named]# vim /etc/ntp.conf  //檢視ntp伺服器
[root@localhost named]# ntpdate 0.rhel.pool.ntp.org #同步時間      

2、生成密鑰,進行主從認證。

在主DNS伺服器上操作。

[root@xuegod63 chroot]# rpm -qf `which dnssec-keygen `
bind-9.7.3-8.P3.el6.x86_64      

(1)、dnssec-keygen -a hmac-md5 -b 128 -n HOST 名字

[root@xuegod63 etc]# cd /var/named/chroot/
[root@xuegod63 etc]#  dnssec-keygen -a hmac-md5 -b 128 -n HOST abc  #生成一對 對稱鑰匙
 -a hmac-md5:采用hmac-md5加密算法。
    -b 128:生成的密鑰長度為128位。
-n 密鑰類型。我們選擇主機類型:HOST 。 
-n <nametype>: ZONE | HOST | ENTITY | USER | OTHER
        (DNSKEY generation defaults to ZONE)
   abc #為生成密鑰的名字      

生成時速度有點慢,因為生成密鑰需要一些随機事件,是以我們可以通過移動滑鼠或執行。

[root@xuegod63 etc]# find /     # 注定等待2分鐘左右
[root@xuegod63 chroot]# ls
dev  etc  Kabc.+157+36589.key  Kabc.+157+36589.private  usr  var     

[root@xuegod63 chroot]# cat Kabc.+157+54214.private    
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: nVk1s0B6XVB4BFfkr+vdfQ==   #這是密鑰

[root@xuegod63 chroot]# cat Kabc.+157+54214.key 
abc. IN KEY 512 3 157 nVk1s0B6XVB4BFfkr+vdfQ==      

修改主DNS配置:

[root@xuegod63 chroot]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
  listen-on port 53 { any; };
  listen-on-v6 port 53 { any; };
  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; };
  recursion yes;

  dnssec-enable yes;   #取原來注釋
  dnssec-validation yes; #取原來注釋
  dnssec-lookaside auto; #取原來注釋

  /* Path to ISC DLV key */
  bindkeys-file "/etc/named.iscdlv.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
  type hint;
  file "named.ca";
};

key abckey {           #先定義密鑰的名字
        algorithm hmac-md5;
        secret "nVk1s0B6XVB4BFfkr+vdfQ==";

 };
zone "xuegod.cn." IN {
  type master;
  file "xuegod.cn.zone";
  allow-transfer { key abckey; };      #采用密鑰進行同步
};
include "/etc/named.rfc1912.zones";      

重新開機服務:

service named restart      

從DNS 伺服器:192.168.0.64:

#先定義密鑰
#采用密鑰進行同步
  [root@xuegod64 chroot]# vim / etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
  listen-on port 53 { any; };
  listen-on-v6 port 53 { any; };
  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; };
  recursion yes;

  dnssec-enable yes;
  dnssec-validation yes;
  dnssec-lookaside auto;

  /* Path to ISC DLV key */
  bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
  type hint;
  file "named.ca";
};
key abckey {    #先定義密鑰名
        algorithm hmac-md5;
        secret "fN6nW73LycZuTzENAQ4ISw==";
        
};

zone "xuegod.cn." IN {
  type slave;
  file "slaves/xuegod.cn.zone.file";
  masters { 192.168.0.63 key abckey; };   #采用密鑰進行同步
};
include "/etc/named.rfc1912.zones";      

重新開機服務進行測試:

[root@xuegod63 chroot]# cd
[root@xuegod63 ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[root@xuegod63 ~]#      

從DNS伺服器:

[root@xuegod64 ~]# rm -rf /var/named /slaves/xuegod.cn.zone.file 
[root@xuegod64 ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[root@xuegod64 ~]# ls /var/named/ slaves/
xuegod.cn.zone.file      
測試工具

nslookup 測試域名解析

(1)非互動式模式:

文法: nslookup 域名或IP 位址
例:
[root@xuegod63 chroot]# nslookup www.xuegod.cn
Server:   8.8.8.8
Address:  8.8.8.8#53
  
Non-authoritative answer:
Name: www.xuegod.cn
Address: 112.124.185.97      

(2)互動模式:

[root@xuegod63 ~]# nslookup 
> www.g.cn
Server:   192.168.0.63
Address:  192.168.0.63#53

Non-authoritative answer:
Name: www.g.cn
Address: 203.208.49.178
Name: www.g.cn
Address: 203.208.49.179
Name: www.g.cn
Address: 203.208.49.180
Name: www.g.cn
Address: 203.208.49.176
Name: www.g.cn
Address: 203.208.49.177      

dig指令:

linux下使用dig指令來查詢域名資訊,當然也可以使用nslookup,但dig比nslookup更友善更強大一些。

安裝:

[root@xuegod63 ~]# rpm -qf `which dig`
bind-utils-9.7.3-8.P3.el6.x86_64      

例: 使用114.114.114.114

DNS伺服器解析www.xuegod.cn
[root@xuegod63 ~]# dig @114.114.114.114 www.xuegod.cn

; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @114.114.114.114 www.xuegod.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23192
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.xuegod.cn.     IN  A

;; ANSWER SECTION:
www.xuegod.cn.    30  IN  A 112.124.185.97

;; Query time: 19 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Wed Mar 11 21:02:29 2015
;; MSG SIZE  rcvd: 47      

補充:雙線智能DNS:

智能DNS(Bind-view):

智能DNS的原理很簡單:在使用者解析一個域名的時候,判斷一下使用者 的IP,然後跟DNS伺服器内部的IP表比對一下,看看使用者是電信還是網通使用者,然後給使用者傳回對應的IP位址。目前的域名服務營運商不提供智能DNS服務,是以必須自行架設DNS服務或者使用網上免費的智能DNS服務,如DNSPOD.      

​​https://www.dnspod.cn/​​

那我們為什麼要使用智能DNS伺服器:1、因為不同ISP廠商有競争,使得我們成為受害者,細心的網友一定會發現,南方的網友通路北方的網站一般都比較慢,北方的網友通路南方的網站也很慢。這些都是廠商之間的競争導緻的。

​​http://gupt12.blog.51cto.com/7651206/1263525​​​​http://linuxfun.me/?p=1023​​

dnsmasq:配置簡單,功能強大。既能配置DHCP,又能配置DNS      

繼續閱讀