1. 程式人生 > >linux學習35-DNS服務和BIND

linux學習35-DNS服務和BIND

DNS服務和BIND

1. DNS服務

DNS(Domain Name Service) 應用層協議,基於C/S,伺服器埠號為(53/udp向伺服器查詢時候用到, 主從複製時候用到53/tcp和53/udp)

1.1 DNS概述

  • DNS軟體

    1. BIND:Bekerley Internat Name Domain 官方地址:ISC (www.isc.org),目前最新版本為9.11,centos7.5使用的為9.9版本,市場佔有率高
    2. unbound:遞迴快取DNS解析伺服器,宣傳為更加安全的DNS伺服器,紅帽各版本有整合,目前使用率沒有BIND高 官方地址:http://unbound.net/
  • 名字解析服務的實現方法

    1. DNS服務:分散式服務,只負責解析,不負責連通
    2. 本地名稱解析配置檔案:/etc/hosts,優先順序高於DNS,用於特定環境,例如叢集。也叫分散式的名字解析服務 例如:在檔案中定義 www.magedu.com對應ip為8.8.8.8
      [[email protected]  ~]$vim /etc/hosts
      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      8.8.8.8  www.magedu.com     <=
      =定義域名和IP地址行 [[email protected] ~]$ping www.magedu.com PING www.magedu.com (8.8.8.8) 56(84) bytes of data. <==將地址翻譯成8.8.8.8 64 bytes from www.magedu.com (8.8.8.8): icmp_seq=1 ttl=53 time=67.9 ms
      修改名字解析服務優先順序,不建議修改 /etc/nsswitch.conf
      [[email protected]  ~]$vim /etc/nsswitch.conf
      #hosts:     db files nisplus nis dns
      hosts: files dns myhostname <==將files 與dns換位置,files代表的就是hosts檔案
    3. NIS服務(Network Information Service),一個集中的管理思想,此服務維護了一個數據庫,存放著IP地址與名字的對應關係,使用者訪問NIS服務,NIS查詢資料庫返回相應結果
  • DNS伺服器的型別

    1. 主DNS伺服器 管理和維護所負責解析的域內解析庫的伺服器
    2. 從DNS伺服器 只負責同步資料,不提供修改功能,為備用伺服器 同步方法有兩類
      1. 拉同步:從伺服器主動向主伺服器拉取資料,拉取的觸發條件為同步時間
      2. 推同步:主伺服器將資料推送給從伺服器,觸發條件為解析庫發生變化
    3. 快取DNS伺服器(轉發器)

1.2 域名級別及定址原理

  • 以我們常見的網站格式為例,先來解釋一下各部分名稱

  • 而域名等級劃分時,全稱域名的寫法為www.magedu.com.<==多了個點,倒過來排序

    1. 最右邊的點[.]:表示根域

    2. com:表示頂級域或者一級域(TLD)

      1. 國家頂級域名(nTLDs):中國cn、美國是us、日本是jp等
      2. 國際頂級域名(iTDs):括com net gov org edu mil int tech 等
    3. magedu:表示二級域(SLD)

    4. www:表示主機名

1.3 DNS解析

Client -->hosts檔案 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 頂級域名DNS–>二級域名DNS…

  • DNS定址原理

    1. 在根域上有一個DNS伺服器,它的資料庫存放了下級域DNS服務的IP地址和DNS伺服器的名稱
    2. 而每個一級域名也有自己的DNS伺服器,存放的是其下級域的IP地址和DNS伺服器的對應關係
    3. 二級域也維護了各自的DNS伺服器,只維護了自己的二級域名,例如magedu.com,只維護以此結尾的名稱與IP地址
    4. 每個DNS伺服器在安裝時已經內建了根伺服器的地址 5.客戶訪問網站時,首先通過hosts檔案解析
    5. 如果hosts檔案沒有解析,則查本機DNS快取,linux中預設沒有快取。在windows中可在命令欄輸入ipconfig/displaydns查詢,清快取ipconfig/flushdns,
    6. 本機快取沒有,則將請求傳送給本地DNS伺服器,本地DNS伺服器查詢快取中是否有目標地址,如果沒有就找到根,請求目標網站的ip
    7. 根伺服器返回一級域名地址,也就是.com域伺服器
    8. 本地伺服器再去找一級域名伺服器,一級域伺服器返回二級域也就是163.com的地址
    9. 本地伺服器找到二級域伺服器,得到IP地址,將地址寫入快取,並回傳給客戶,客戶再通過http協議(底層為tcp協議),經過握手後訪問網站 在這裡插入圖片描述
  • DNS查詢型別:

    1. 遞迴查詢 DNS域名伺服器代替提出請求的客戶機進行域名查詢,返回最終的結果交給了客戶
    2. 迭代查詢 其他伺服器返回一個最佳的查詢點提示或主機地址,若此最佳的查詢點中包含需要查詢的主機地址,則返回主機地址資訊;若此時伺服器不能夠直接查詢到主機地址,則是按照提示的指引依次查詢,直到伺服器給出的提示中包含所需要查詢的主機地址為止,例如根伺服器返回給本地服務一級伺服器地址,九尾迭代查詢
  • 解析型別: 正反向解析是兩個不同的名稱空間,是兩棵不同的解析樹

    1. 正向解析FQDN --> IP :將名字解析為IP
    2. 反向解析 IP --> FQDN: 將IP解析為名字
      1. 反向解析用到根域下一個特殊的名為ARPA域,叫反向解析域
      2. 反向解析域下面有一個in-addr,再往下為IP地址
      3. 以172.20.0.100為例,查詢路線為訪問根–>arpa域–>in-addr–>172–>20–>0–>100
  • 解析答案:

    1. 肯定答案
      1. 權威答案:標記為aa
      2. 非權威答案
    2. 否定答案:請求的條目不存在等原因導致無法返回結果

1.4 資源記錄

  • 區域解析庫: 如下例中建立的資料庫magedu.com.zone,負責解析magedu.com這個區域,所以稱為區域解析庫,裡面有很多的記錄組合而成,每條記錄叫做資源記錄(RR)

  • 資源記錄:Resource Record, RR 區域解析庫裡面由很多記錄組合而成,每條記錄叫做資源記錄

  • 資源記錄型別

    1. SOA(Start Of Authority) 起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於整個解析庫的第一條記錄,記錄了這個域的相關資訊
    2. A (internet Address) 將名字域IP地址做一個對應關係,FQDN --> IP IPv4地址 示例
      www.magedu.com  86400  IN   A   101.200.188.230
      生成1-254範圍內的HOST記錄,也就是HOST1.moli.com    A    1.2.3.1  ...   HOST100.moli.com    A    1.2.3.100
      $GENERATE 1-254 HOST$ A 1.2.3.$
      即使使用者輸入不加www.,也可以解析的寫法
      @   86400  IN  A   192.168.169.128     
      moli.com. IN A 192.168.169.128     效果與上相同
      避免使用者寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
      *.moli.com.  IN  A  192.168.169.128
      
    3. AAAA 同A,對應的為IPv6地址
      www.magedu.com  86400  IN   AAAA   IPv6
      
    4. PTR (PoinTeR) 將IP地址反向解析為名字,IP --> FQDN
    5. NS (Name Server) 專用於標明當前區域的DNS伺服器,當前域有多少DNS伺服器,名字是什麼,例如備用DNS服務地址
    6. MX(Mail eXchanger) 郵件交換器,設定區域中擔任郵件伺服器的主機,所有要送往那部機器的mail 都要經過mail exchanger 轉送。 而數字則是該主機郵件傳遞時的優先次序,此值越低表示有越高的郵件處理優先權。
    7. TXT: 對域名進行標識和說明的一種方式,一般做驗證記錄時會使用此項,如:SPF(反垃圾郵件)記錄,https驗證等 將來搭建加密http服務時,就要像DNS服務商申請一個DNS的TXT記錄,服務商給你一個很長的字串,貼到DNS伺服器的配置中就可以了 示例:_dnsauth IN TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x
  • 資源記錄定義的格式 不論哪種記錄都包含五項元素

    1. 語法:name [TTL] IN rr_type value
    2. 特點:
      1. @代表當前區域的域名,可以用來引用當前域名,例如@ IN SOA
      2. 同一個名字可以通過多條記錄定義多個不同的值;此時DNS伺服器會以輪詢方式響應
      3. 同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;此僅表示通過多個不同的名字可以找到同一個主機
    3. 釋義:
    元素 含義
    name 指示擁有資源記錄的 DNS 域名,該名稱與資源記錄所在的控制檯樹節點的名稱相同
    TTL 快取的時間,生命期,以秒為單位,可定義為類似變數$TTL 86400,那麼以下各條相同時間的資源記錄就可以省略
    IN 代表Internet,保留下來不動就可以
    rr_type 資源記錄型別,例如SOA,表示起始授權記錄
    value 記錄特定資料,描述資源的資訊

1.4.1 SOA記錄內容

  • 元素說明
    1. name: 當前區域的名字,例如“magedu.com.” com後的點必須寫,不然系統會自動將域名再補一次,變成"magedu.com.magedu.com."
    2. value: 有多部分組成,從第3條到第7條使用小括號括起來
      1. 主DNS的名稱 名稱可以自定義,例如ns.magedu.com
      2. DNS伺服器的管理員郵箱 因為@在資源記錄中有特殊含義,這裡用點來代替,例如nsadmin.magedu.com
      3. 序列號:2015042201 主伺服器負責修改查詢,從伺服器只負責同步資料,主從伺服器同步是基於解析庫的版本號,比對版本號得知主從伺服器解析庫版本是否相同,版本號為整數,此記錄在主伺服器上是由管理員手工指定的,主伺服器解析庫變化時,其序列遞增,主伺服器解析庫發生變化時,會主動通知從伺服器
      4. 重新整理時間 從伺服器從主伺服器請求同步解析的時間間隔,預設以秒為單位,支援1h、1d表示,例如:2H
      5. 重試時間 從伺服器請求同步失敗時,再次嘗試時間間隔,應該比同步間隔小 ,例如10m
      6. 過期時間 從伺服器聯絡不到主伺服器時,多久後停止服務,例如1W
      7. 否定答案的TTL值 不存在的記錄快取時長, 將不正確的域名快取起來,直接返回結果給使用者,不需要查詢
  • 示例
    $TTL 86400     <==定義整個記錄的TTL時間為86400	
    |magedu.com. | IN | SOA | ns.magedu.com. | nsadmin.magedu.com.| (
    |     name   | IN |TYPE|     value 1     |       value 2      |
    2015042201 ;serial          <==value 3
    2H         ;refresh         <==value 4           
    10M        ;retry           <==value 5
    1W         ;expire          <==value 6
    1D )       ;minimum         <==value 7
    

1.4.2 NS記錄

  • 元素說明
    1. name: 當前區域的名字
  • 注意
    1. 一個區域可以有多個NS記錄
    2. 相鄰的兩個資源記錄的name相同時,後續的可省略
    3. 對NS記錄而言,任何一個ns記錄後面的伺服器名字,都應該在後續有一個A記錄
  • 示例,本區域的兩臺主備DNS伺服器
    |   name    | TTL | IN |  TYPE |      value     |     
    |magedu.com.|86400| IN |   NS  | ns1.magedu.com.|       
    magedu.com.  86400  IN     NS    ns2.magedu.com.
    
    由於涉及到字串,就必須要有對應的A記錄去解析為IP,所以在A記錄裡要有對應NS地址的記錄
    ns1.magedu.com.    86400  IN   A   192.168.169.5
    ns2.magedu.com.    86400  IN   A   192.168.169.6
    

1.4.3 MX記錄

一個區域內MX記錄可有多個

  • 各元素說明
    1. name: 當前區域的名字
    2. value: 當前區域的某郵件伺服器(smtp伺服器)的主機名,由2部分組成
      1. 伺服器的優先順序,由數字(0-99)表示,表示此;數字越小優先順序越高
      2. 伺服器名
  • 例如
    magedu.com.  86400 IN  MX  10  mail.magedu.com.
    86400  IN  MX  20  mail2.magedu.com.       <==name相同,下面的記錄可以忽略此元素
    
    涉及到名字,需要在A記錄中增加對應解析項
    mail   86400  IN   A   3.3.3.3     <==mail為簡寫,其後沒有加[ . ],會自動補上域名
    

1.4.4 PTR記錄

  • 元素說明
    1. name: IP,有特定格式,把IP地址反過來寫(例如1.2.3.4,要寫作4.3.2.1); 然後加特定字尾:in-addr.arpa. 所以完整寫法為:4.3.2.1.in-addr.arpa.
    2. value: FQDN
  • 示例
    4.3.2.1.in-addr.arpa. 86400  IN  PTR   www.magedu.com.
    如1.2.3為網路地址,可簡寫成:
    4 86400  IN  PTR  www.magedu.com.
    
    注意:網路地址及字尾可省略;主機地址依然需要反著寫

1.4.5 CNAME(別名記錄)

  • 元素說明
    1. name: 別名的FQDN
    2. value: 真正名字的FQDN
  • 例如:web-nginx01.magedu.com的別名記錄,
    www.magedu.com   86400  IN   CNAME   web-nginx01.magedu.com
    
    涉及到名字,也需要在A記錄中增加對應的解析記錄
     web-nginx01.magedu.com   86400  IN   A   101.200.188.230
    

2. DNS管理工具BIND

  • DNS伺服器配置檔案注意項

    1. 一臺物理伺服器可同時為多個區域提供解析
    2. 應該有兩個(如果包括ipv6的,應該更多)實現localhost和本地迴環地址的解析庫
  • BIND安裝:centos映象檔案中資源

    [[email protected]  ~]$ yum install bind
    
  • 包檔案介紹

    1. 服務名稱 /usr/lib/systemd/system/named.service
    2. 主配置檔案,/etc/named.conf 任何服務程式如果期望其能夠通過網路被其它主機訪問,至少應該監聽在一個能與外部主機通訊的IP地址上
      `全域性配置`:定義一些功能,比如指定監聽埠,從伺服器,轉發服務型別等
      options {                     
      //      listen-on port 53 { 127.0.0.1; };
      `日誌子系統配置`
      logging {
      channel default_debug {
            file "data/named.run";
             severity dynamic;
      	    };
      };
      `區域定義`:本機能夠為哪些zone進行解析,就要定義哪些zone
      zone "." IN {                <==" . "代表根域
      	type hint;
      	file "named.ca";         <==負責維護域的資料庫,也就是/var/named/named.ca
      };
      
    3. 主程式 /usr/sbin/named
    4. DNS子配置檔案,存放解析資訊,例如負責解析的域 /etc/named.rfc1912.zones
    5. 區域解析資料庫,也就是IP地址與域名的對應關係 /var/named
    6. 配置檔案類似於key驗證,自編譯軟體時候,啟用rndc命令需要用到 /etc/rndc.key
  • rndc命令(remote name domain controller) 預設與bind安裝在同一主機,且只能通過127.0.0.1連線named程序 提供輔助性的管理功能,埠為953/tcp

    1. 格式 rndc COMMAND
    2. 選項:
    選項 作用
    reload 過載主配置檔案和區域解析庫檔案
    reload zonename 過載區域解析庫檔案
    retransfer zonename 手動啟動區域傳送,而不管序列號是否增加
    notify zonename 重新對區域傳送發通知
    reconfig 過載主配置檔案
    querylog 開啟或關閉查詢日誌檔案/var/log/message
    trace 遞增debug一個級別
    trace LEVEL 指定使用的級別
    notrace 將除錯級別設定為 0
    flush 清空DNS伺服器的所有快取記錄
  • 修改DNS服務埠設定,允許其對外服務

    1. 啟動dns服務後,繫結的為本地網絡卡,如果要對外服務,修改配置檔案
      udp   UNCONN     0      0        127.0.0.1:53         *:* 
      tcp   LISTEN     0      10       127.0.0.1:53         *:*                  
      tcp   LISTEN     0      5        192.168.122.1:53     *:* 
      
      修改內容為listen-on port 53
      [[email protected]  ~]$vim /etc/named.conf 
      options {
          listen-on port 53 { 127.0.0.1; };      <==修改這裡,如果要綁在其他ip上,可以寫在後面
          listen-on port 53 { 127.0.0.1;172.20.50.203;192.168.169.131; };  修改後效果,末尾的;必須寫
      
    2. 重新載入服務,檢視效果
      [[email protected]  ~]$systemctl reload named
      [[email protected]  ~]$ss -ntul
      tcp   LISTEN     0      10    192.168.169.131:53         *:*                  
      tcp   LISTEN     0      10    172.20.50.203:53           *:*                  
      tcp   LISTEN     0      10    127.0.0.1:53               *:* 
      
    3. 繫結固定的IP地址,一旦Ip地址變更,可能會發生故障,所以建議寫靈活,利用DNS自帶的關鍵字localhost,在DNS中意思為本地所有的IP
      [[email protected]  ~]$vim /etc/named.conf 
      	 listen-on port 53 { localhost; };  修改後效果,末尾的;必須寫
      

3. 搭建一個域的主DNS

  • 在配置檔案中定義區域的格式

    zone "ZONE_NAME" IN {                <==定義DNS伺服器的管理域
    type {master|slave|hint|forward};    <==此DNS伺服器的型別master()、slave()、hint(root緩衝區域)、forward(代理查詢)
    file "ZONE_NAME.zone";               <==此DNS伺服器的域資料庫檔案,名字自定義
    };
    
  • 主配置檔案語法檢查: named-checkconf

  • 解析庫檔案語法檢查:

    |named-checkzone| "magedu.com" |  /var/named/magedu.com.zone|
    |      命令     |     作用域    |          域資料庫檔案       |
    
  • 將修改後的配置生效

    1. rndc status|reload
    2. service named reload(centos6)
    3. systemctl reload named(centos7)
  • 搭建步驟

    1. 修改子配置檔案定義維護的域 在DNS伺服器搭建要維護的域,例如要管理moli.com域,可以放在/etc/named.conf 中,但為了管理清晰,推薦放在/etc/named.rfc1912.zones

      [[email protected]  /data]$vim /etc/named.rfc1912.zones
      zone "moli.com" IN {             <==IN為語法格式,可寫可不寫,zone表示區域," "中寫要管理的域名
      	    type master;             <==管理的第一個伺服器,要寫為master,表示主
      		file "moli.com.zone";    <==存放以moli.com結尾的域名記錄和IP的對應關係,人為指定,不寫路徑,預設放在/var/named下,需要在其下手動建立
      };
      include "/etc/named.rfc1912.zones";        <==推薦將維護域資訊存放路徑
      include "/etc/named.root.key";
      
    2. 建立區域資料庫檔案,有模板可以參考named.localhost,拷貝一份,改名為配置檔案中定義的資料庫名

      [[email protected] ~]$ls    /var/named/
      named.localhost    <==模板檔案,目錄下還有其他檔案,這裡為顯示效果遮蔽了
      拷貝一份改名為自定義檔案
      [[email protected]  /var/named]$cp named.localhost   moli.com.zone
      
    3. 拷貝檔案要注意屬組變更的問題,需要變更

      [[email protected]  /var/named]$ll
      -rw-r-----. 1 root  root   152 Sep 29 13:20 moli.com.zone
      -rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost    <==原檔案組為named
      

      系統執行是以系統賬號named執行的,拷貝過來的檔案,屬組變為root,named沒有許可權訪問配置檔案,會報錯

      [[email protected]  /var/named]$ps aux|grep named
      named    119598  0.0 10.6 460552 161068 ?       Ssl  08:26   0:00 /usr/sbin/named
      `修改許可權`或者`修改所屬組`或者`拷貝時候-a保留原屬性`
      [[email protected]  /var/named]$ chgrp named moli.com.zone 
      
    4. 修改區域資料庫moli.com.zone,配置自己的DNS服務

      $TTL 1D     <==定義整個記錄TTL時長
      @                IN  SOA  dns1.moli.com.  admin.moli.com. (     <==SOA記錄,定義了	TTL,可忽略
      |@代表本域|IN|型別|  主DNS伺服器  |     管理員郵箱   |
                                              20181001        ; serial    <==最長10位,超過會報錯
                                              1D      ; refresh
                                              1H      ; retry
                                              1W      ; expire
                                              3H )    ; minimum
              NS      dns1               <==NS記錄,name,IN,TTL與上面記錄相同,都可以忽略不寫
      dns1    A       192.168.169.131    <==dns1後面不加點,會自動補上域名,NS記錄的域名解析A記錄
      @       MX  10  mailsrv            <==MX郵件伺服器記錄,假設郵件伺服器地址為mailsrv
      mailsrv A       192.168.169.130    <==MX記錄的域名解析A記錄
      websrv  A       192.168.169.128    <==web伺服器A記錄,假設地址為websrv
      www     CNAME   websrv             <==websrv的別名記錄
      
    5. 檢查配置檔案及區域資料庫格式,有專用命令

      檢查配置檔案錯誤
      [[email protected] ~]$named-checkconf     
      檢查區域資料庫檔案錯誤
      [[email protected] ~]$named-checkzone moli.com /var/named/moli.com.zone	                              
      
    6. 重啟服務生效配置檔案,兩個命令都可以

      [[email protected]  ~]$rndc  reload
      [[email protected]  ~]$systemctl reload named.service
      
    7. 直接用ping命令測,會連線網際網路,而不是我們配置的DNS伺服器

      [[email protected]  /var/named]$ping www.moli.com
      PING www.moli.com (117.18.65.182) 56(84) bytes of data.
      

      這是因為,ping命令會將請求傳送給的是本機指向的DNS伺服器

      [[email protected]  /var/named]$cat /etc/resolv.conf 
      # Generated by NetworkManager
      search localdomain
      nameserver 114.114.114.114    <==DNS為外網
      nameserver 223.6.6.6
      

      將其修改為指向本機,因為我們要做的是DNS解析伺服器

      [[email protected]  /var/named]$cat /etc/resolv.conf 
      # Generated by NetworkManager
      search localdomain
      nameserver 127.0.0.1
      

      再次使用Ping命令,解析出來的就是我們配置的伺服器地址

      [[email protected]  /etc/sysconfig]$ping www.moli.com
      PING websrv.moli.com (192.168.169.128) 56(84) bytes of data.
      64 bytes from 192.168.169.128 (192.168.169.128): icmp_seq=1 ttl=64 time=0.284 ms
      
    8. 成功解析出192.168.169.128,就可以在web伺服器上搭建網站,這裡以http服務來搭建 www.moli.com

      '給頁面寫個歡迎語'
      [[email protected] ~]$echo welcome to molihua > /var/www/html/index.html
      '重啟服務'
      [[email protected] ~]$service httpd restart
      
    9. 在web伺服器上,利用測試工具dig或者host,檢視DNS伺服器連線狀態

      '1. 直接查詢,會經過本地dns伺服器解析'
      [[email protected]  ~]$host www.moli.com       
      www.moli.com has address 101.200.188.230                   <==本地dns伺服器地址
      '2. 只是為了判斷查詢,沒有必要修改配置檔案,以下例格式來手動指向dns伺服器'
      [[email protected]  ~]$dig www.moli.com @192.168.169.132
      ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 53125    <==拒絕訪問
      '3. 用host測試,格式略微不同,不需要在DNS伺服器地址前寫@'
      [[email protected]  ~]$host wwwmoli.com 192.168.169.132
      Host www.moli.com.localdomain not found: 5(REFUSED)         <==查詢結果相同,拒絕訪問
      
    10. 拒絕訪問,說明dns伺服器配置的許可權有問題,修改主配置檔案allow-query行

      [[email protected] ~]$vim /etc/named.conf
            allow-query     { localhost; };        <==未修改時,只允許本地訪問
            allow-query     { 192.168.169.0/24; }; <==表示192.168.169.0/24網段,可以訪問
         	  allow-query     { any; };              <==表示所有人可以訪問
       //   allow-query     { localhost; };        <==註釋掉,也表示所有人可以訪問       
      
    11. 再次使用測試工具檢視,windows中的測試工具,可以使用ping和nslookup

      [[email protected]  ~]$host www.moli.com 192.168.169.132
      Using domain server:
      Name: 192.168.169.132
      Address: 192.168.169.132#53
      Aliases: 
      www.moli.com is an alias for websrv.moli.com.
      websrv.moli.com has address 192.168.169.128      <==解析成功
      
    12. 在windows中將DNS指向我們搭建的DNS伺服器 192.168.169.131,訪問www.moli.com,會看到我們編輯的歡迎語

    13. 在linux系統當做客戶端,要訪問我們搭建的web網站,同樣要修改DNS伺服器指向,修改網絡卡配置檔案新增DNS1=192.168.169.131,重啟服務,會在檔案/etc/resolv.conf生成新的DNS地址

      [[email protected]  ~]$curl  www.moli.com     <==字元介面瀏覽器
      [[email protected]  ~]$links  www.moli.com    <==字元介面瀏覽器
      

4 測試命令

  • 專業測試命令dig dig只用於測試dns系統,不會查詢hosts檔案進行解析

    1. 格式 dig [-t type] name [@SERVER] [query options]
    2. 常用查詢選項: +[no]trace:跟蹤解析過程 ,例如dig +trace magedu.com +[no]recurse:預設遞迴查詢,禁用遞迴+norecurse -t type:表示查詢型別,例如dig -t soa www.baidu.com -x :表示逆向解析,例如dig -x 192.168.169.128 @192.168.169.132
    3. 示例 如果知道對方主機的全稱域名,可以直接查詢
      [[email protected] ~]$dig www.magedu.com
      ;; QUESTION SECTION:                      <==我們提出的請求
      ;www.magedu.com.			IN	A    
      
      ;; ANSWER SECTION:                 <==返回的結果
      www.magedu.com.		86400	IN	CNAME	websrv.magedu.com.                <==別名 
      websrv.magedu.com.	86400	IN	A	192.168.169.128                <==解析的IP地址
      
      還可以根據型別查詢,比如想知道某個域裡誰是郵件伺服器
      [[email protected] ~]$dig -t mx magedu.com
      ;; ANSWER SECTION:
      magedu.com.		86400	IN	MX	10 mailsrv.magedu.com.     <==查詢結果
      
      測試反向解析方法一,選項-x ip @指定DNS伺服器
      [[email protected] ~]$dig -x 192.168.169.128  @192.168.169.132
      
      測試反向解析方法二,dig -t ptr reverseip.in-addr.arpa,ip地址要反著寫
      [[email protected] ~]$dig -t ptr 128.169.168.192.in-addr.arpa. @192.168.169.132
      
  • 專業測試命令host

    1. 格式 host [-t type] name [SERVER]
    2. 常用選項 -a:顯示詳細的DNS資訊 -r:禁用遞迴處理 -t type:選項查詢型別,同dig
    3. 示例 與dig不同的地方為,指定DNS伺服器時不需要加@
      [[email protected] ~]$dig www.moli.com @192.168.50.107
      [[email protected] ~]$host www.moli.com 192.168.50.107
      
  • 專業測試命令nslookup

    1. 格式 nslookup [-option] [name | -] [server]
    2. 互動式模式: nslookup> server IP: 指明使用哪個DNS server進行查詢
      [[email protected] ~]$nslookup
      > server 114.114.114.114      <==指明DNS server
      Default server: 114.114.114.114
      Address: 114.114.114.114#53 
      
      set type=RR_TYPE: 指明查詢的資源記錄型別
      [[email protected] ~]$nslookup
      > set type=mx    <==指定型別
      > magedu.com   <==作用域
      
      NAME: 要查詢的名稱

5. 主從伺服器實現

  • 搭建從伺服器要求
    1. 應該為一臺獨立的名稱伺服器
    2. 主伺服器的區域解析庫檔案中必須有一條NS記錄指向從伺服器
    3. 從伺服器只需要定義區域,而無須提供解析庫檔案;解析庫檔案應該放置於/var/named/slaves/目錄中
    4. 主伺服器得允許從伺服器作區域傳送
    5. 主從伺服器時間應該同步,可通過ntp進行
    6. bind程式的版本應該保持一致;否則,應該從高,主低
  • 定義從區域的方法:
    zone "ZONE_NAME" IN {
    	type slave;                      <==型別要寫成slave	
    	masters { MASTER_IP; };          <==既然是從伺服器,這裡就要指定主伺服器地址
    	file "slaves/ZONE_NAME.zone";    <==同步主伺服器資料庫檔案,同步資料存放路徑	
    
  • 示例,搭接從伺服器
    1. 在從伺服器上安裝DNS服務bind
      [[email protected] ~]$yum install bind
      
    2. 修改配置檔案,允許其對外服務
      [[email protected] ~]$vim /etc/named.conf 
      options {
      //      listen-on port 53 { 127.0.0.1; };    <==註釋掉
      //      allow-query     { localhost; };      <==註釋掉
      
    3. 更改區域資料庫的配置 named服務執行者為系統賬號named,它是沒有許可權在/var/named下建立檔案的,也就是說,將來同步檔案時不能放在此目錄下,需要放在有寫許可權的目錄/var/named/slaves
      [[email protected] ~]$vim /etc/named.rfc1912.zones
      zone "moli.com" {
              type slave;                      <==從伺服器型別要寫'slave'
              masters { 192.168.169.132; }     <==指定主伺服器
              file "slaves/moli.com.zone.cc";  <==同步主伺服器資料庫時,資料存放路徑
      
    4. 在主伺服器中新增從伺服器NS記錄,重讀資料庫檔案,然後啟動從伺服器named服務
      [[email protected]  /var/named]$vim moli.com.zone
      $TTL 1D
      @       IN SOA  dns1.moli.com.  admin.moli.com. (
                                              20181001        ; serial
                                              1D      ; refresh
                                              1H      ; retry
                                              1W      ; expire
                                              3H )    ; minimum
              NS      dns1
              NS      dns2               <==從伺服器NS記錄
      dns1    A       192.168.169.132
      dns2    A       192.168.169.129    <==從伺服器解析記錄
      websrv  A       192.168.169.128
      www     CNAME   websrv
      '重讀如資料庫檔案'
      [[email protected]  ~]$rndc reload 
      '啟動從伺服器named服務 '
      [[email protected] ~]$systemctl start named    
      
    5. 檢視/var/named/slaves目錄,是否成功拉取主伺服器的資料庫檔案
      [[email protected] /etc]$ls /var/named/slaves/
      moli.com.zone.cc    <==centos7中此檔案,被處理過,非文字檔案,在centos6中,為文字檔案
      
    6. 測試備用伺服器是否可以在主伺服器故障時提供服務
      [[email protected] ~]$dig www.moli.com
      ;; Query time: 2 msec
      ;; SERVER: `192.168.169.132#53`(192.168.169.132)     <==正常情況下,在主服務上取得的結果
      
      將主伺服器網絡卡暫時關掉,再從客戶端訪問
      [[email protected] ~]$dig www.moli.com
      ;; SERVER: `192.168.169.129#53`(192.168.169.129)   <==備用伺服器生效,備用伺服器只能查詢,不能修改
      
    7. 實驗主伺服器資料發生改變,從伺服器是否可以同步,編輯主伺服器資料庫檔案,增加一條記錄
      [[email protected]  /var/named]$vim moli.com.zone
      $TTL 1D
      @       IN SOA  dns1.moli.com.  admin.moli.com. (
                                              20181002        ; serial   <==將序列號修改,稍微增大一些
      bbs     A       8.8.8.8   <==新加項,其它與前相同,這裡省略
      [[email protected]  ~]$rndc reload      <==重讀如資料庫檔案
      
    8. 在客戶機指定從DNS伺服器查詢bbs,確認是否同步
      [[email protected] ~]$dig bbs.moli.com @192.168.169.129
      ;; ANSWER SECTION:
      bbs.moli.com.		86400	IN	A	8.8.8.8      <==有這條記錄
      ;; SERVER: 192.168.169.129#53(192.168.169.129)   <==在從伺服器得到的資料
      
    9. 這樣配置有很大的安全隱患,因為即使不在主服務增加NX記錄(只是不能推送資料庫),不影響從伺服器拉取 是可以不通過主伺服器同意,搭建從伺服器的,從而拉取資料,更簡單的方法是使用dig命令直接獲取主伺服器資訊
      [[email protected]  ~]$dig -t axfr moli.com @192.168.169.132
      
    10. 所以一定要加強安全策略,在主、從伺服器編輯主配置檔案,在options專案中新增allow-transfer { any|ip|none; },any表示