DNS

DNS

DNS解析

  • DNS名稱解析方式:
    名稱 –> IP:正向解析
    IP –> 名稱:反向解析
    注意:二者的名稱空間,非為同一個空間,即非為同一棵樹;因此,也不是同一個解析庫;

  • DNS查詢類型:
    遞歸查詢:一般是客戶機和服務器之間的查詢;即只發送一個請求,其他的工作交由上層服務器去解決;
    迭代查詢:一般是服務器和服務器之間的凡是,即最起初的DNS服務器,由上而下依次從根發送請求,直到查找到目標主機;

    • 一次完整的查詢請求經過的流程:
      Client –> hosts文件 –> DNS Local Cache –> DNS Server (recursion) –>
      自己負責解析的域:直接查詢數據庫并返回答案;
      不是自己負責解析域:Server Cache –> iteration(迭代)
    • 解析答案:

      • 肯定答案:當請求時正好有結果,然后回應,正向應答;
        否定答案:不存在查詢的主機,因此,不存在與其查詢主機對應的值;
        權威答案:由直接負責的DNS服務器返回的答案;
        非權威答案:DNS服務器中的信息時之前緩存下來的;

DNS服務器

  • 負責解析至少一個域:

    • 主名稱服務器;
      輔助名稱服務器;
  • 不負責解析:

    • 緩存名稱服務器;
  • 主-輔DNS服務器:

    • 主DNS服務器:維護所負責解析的域數據庫的那臺服務器;讀寫操作均可進行;

    • 從DNS服務器:從主DNS服務器那里或其它的從DNS服務器那里“復制”一份解析庫;但只能進行讀操作;

      • “復制”操作的實施方式:

        • 序列號:serial, 也即是數據庫的版本號;主服務器數據庫內容發生變化時,其版本號遞增;
        • 刷新時間間隔:refresh, 從服務器每多久到主服務器檢查序列號更新狀況;
        • 重試時間間隔:retry, 從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔;
          重試時間間隔不能小于刷新時間間隔;
        • 過期時長:expire,從服務器始終聯系不到主服務器時,多久之后放棄從主服務器同步數據;停止提供服務;
          過期時長一般設定比較長,方便管理員進行維修后使得從服務器找到主服務器,而不至于關閉DNS服務
        • 否定答案的緩存時長:
      • 主服務器”通知“從服務器隨時更新數據;

      • 區域傳送:

        • 全量傳送:axfr, 傳送整個數據庫;
          增量傳送:ixfr, 僅傳送變量的數據;

資源記錄

  • DNS數據庫:解析過程中的域名的解析記錄;

    • FQDN –> IP
      正向解析庫;正向區域
    • IP –> FQDN
      反向解析庫;反向區域
  • 區域(zone)和域(domain)
    區域是物理概念;域是邏輯概念;

    • 每個域名所對應的解析記錄稱為zone(區域)
    • FQDN:完整主機名,由主機名和域名構成;
  • 資源記錄:Resource Record, 簡稱RR;
    記錄有類型:A, AAAA, PTR, SOA, NS, CNAME, MX
    語法: name [TTL] IN RR_TYPE value

    • SOA:

      • name: 當前區域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
      • value:有多部分組成
        (1) 當前區域的區域名稱(也可以使用主DNS服務器名稱);
        (2) 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般使用點號來替代;
        (3) (主從服務協調屬性的定義以及否定答案的TTL)

        magedu.com.     86400     IN         SOA     magedu.com. admin.magedu.com.  (
                                2017010801    ;序列號
                                2H            ;刷新時間
                                10M           ; 重試時間
                                1W            ; 過期時間
                                1D )          ; 否定答案的TTL值,     
        除第一個序列號外,其他四個的單位默認為秒,也可指定單位:D(天)、M(分鐘)、H(小時)、W(周)。
    • NS:
      name: 當前區域的區域名稱
      value:當前區域的某DNS服務器的名字,例如ns.magedu.com.;
      注意:一個區域可以有多個ns記錄;

      magedu.com.     86400     IN     NS      ns1.magedu.com.
      magedu.com.     86400     IN     NS      ns2.magedu.com.
    • MX:
      name: 當前區域的區域名稱
      value:當前區域某郵件交換器的主機名;
      注意:MX記錄可以有多個;但每個記錄的value之前應該有一個數字表示其優先級;

      magedu.com.         IN     MX     10      mx1.magedu.com.
      magedu.com.         IN     MX     20      mx2.magedu.com.
    • A:
      name:某FQDN,例如www.magedu.com.
      value:某IPv4地址;

      www.magedu.com.        IN     A    1.1.1.1
      www.magedu.com.        IN     A    1.1.1.2
      bbs.magedu.com.            IN     A    1.1.1.1
    • AAAA:
      name:FQDN
      value: IPv6

    • PTR:
      name:IP地址,有特定格式,IP反過來寫,而且加特定后綴;例如1.2.3.4的記錄應該寫為4.3.2.1.in-addr.arpa.;
      value:FQND

      4.3.2.1.in-addr.arpa.      IN  PTR    www.magedu.com.
    • CNAME:
      name:FQDN格式的別名;
      value:FQDN格式的正式名字;

      web.magedu.com.      IN      CNAME  www.magedu.com.

    注意:
    (1) TTL可以從全局繼承;
    (2) @表示當前區域的名稱;
    (3) 相鄰的兩條記錄其name相同時,后面的可省略;
    (4) 對于正向區域來說,各MX,NS等類型的記錄的value為FQDN,此FQDN應該有一個A記錄;

DNS協議的實現:

DNS協議 –> BIND, PowerDNS(輕量級)

  • bind程序環境:
    主程序:/usr/sbin/named
    Unit File:/usr/lib/systemd/system/named.service
    配置文件:/etc/named.conf
    區域解析庫文件:/var/named

  • 關閉dnssec功能:
    /etc/named.conf

    dnssec-enable no;
      dnssec-validation no;
  • 解析一個區域:

    • 定義:/etc/named.rfc1912.conf

      zone “ilinux.io" IN {
            type master;
            file "ZONE_FILE";
      }
    • 定義解析庫文件:/var/named/ZONE_FILE

      $TTL 600
      ilinux.io.      IN      SOA     ilinux.io.      nsadmin.ilinux.io. (
                            2017052301
                            1H
                            5M
                            1W
                            6H )
                            IN      NS      dns1.ilinux.io.
                            IN      NS      dns2.ilinux.io.
      dns1.ilinux.io. IN      A       172.16.0.67
      dns2.ilinux.io. IN      A       172.16.0.68
      www.ilinux.io.  IN      A       172.16.0.1
      web             IN      CNAME   www

Bind

BIND: Berkeley Internet Name Domain

  • dns: 一個協議
    bind: dns協議的一種實現
    named:bind程序的運行的進程名

程序包:

  • bind-libs:被bind和bind-utils包中的程序共同用到的庫文件;
    bind-utils:bind客戶端程序集,例如dig, host, nslookup等;
    bind:提供的dns server程序、以及幾個常用的測試程序;
    bind-chroot:選裝,讓named運行于jail模式下;

  • bind程序安裝完成之后,默認即可做緩存名稱服務器使用;如果沒有專門負責解析的區域,直接即可啟動服務;

    • CentOS 6: service named start
      CentOS 7: systemctl start named.service

bind:

  • 主配置文件:/etc/named.conf
    包含在內的其它文件;
    /etc/named.iscdlv.key
    /etc/named.rfc1912.zones
    /etc/named.root.key

    默認指向的DNS服務器:/etc/resolv.conf

  • 解析庫文件:
    每一個域文件都放在/var/named/目錄下;
    一般名字為:ZONE_NAME.zone

  • 注意:

    1. 一臺DNS服務器可同時為多個區域提供解析;
    2. 必須要有根區域解析庫文件: named.ca;
    3. 還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫;

      • 正向:named.localhost
        反向:named.loopback
    4. rndc:remote name domain contoller
      953/tcp,但默認監聽于127.0.0.1地址,因此僅允許本地使用;
  • 主配置文件格式:/etc/named.conf

    • 全局配置段:
      options { … }

      • 監聽能與外部主機通信的地址;

        listen-on port 53 { 172.16.100.67; };
        //listen-on-v6 port 53 { ::1; };
      • 學習時,建議關閉dnssec

        dnssec-enable no;
          dnssec-validation no;
          dnssec-lookaside no;
      • 關閉僅允許本地查詢:

        allow-query { any; };
        或
        //allow-query  { localhost; };

      注意:每個配置語句必須以分號結尾;

    • 日志配置段:
      logging { … }
    • 區域定義段:
      zone { … }

      zone "ZONE_NAME" IN {
          type master|slave|hint|forward;
          file "ZONE_NAME.zone";
          allow-update { none; };
      };
      
      type:該zone的類型,主要類型有:針對根的hint;主DNS的master;從DNS的slave和專門用于轉發的域類型forward;除了根以外默認為master;
      file:該zone的文件名稱;
      ZONE_NAME:表示要解析的域名;正解時就為域名的本身;反解時有固定的格式:IP 網段倒著寫.ip-addr.arpa;
      • 那些由本機負責解析的區域,或轉發的區域;
    • 檢查配置文件語法錯誤:
      ~]# named-checkconf [檢查:/etc/named.conf]

測試工具

dig, host, nslookup,rndc
安裝dig、nslookup,yum install bind-utils –

  • dig命令:
    dig [-t RR_TYPE] name [@SERVER] [query options]

    • 用于測試dns系統,因此其不會查詢hosts文件;

    • 查詢選項:
      +[no]trace:跟蹤解析過程;
      +[no]recurse:進行遞歸解析;

    • 反向解析測試
      dig -x IP

    • 模擬完全區域傳送:
      dig -t axfr DOMAIN [@server]

  • host命令:
    host [-t RR_TYPE] name SERVER_IP

  • nslookup命令:
    nslookup [-options] [name] [server]

    • 交互式模式:

      nslookup>
      server  IP:以指定的IP為DNS服務器進行查詢;
      set  q=RR_TYPE:要查詢的資源記錄類型;
      name:要查詢的名稱;
  • rndc命令:named服務控制命令

    • rndc status
      rndc flush
      rndc reload:讓服務器重載配置文件和區域數據文件

    • 問題示例:

      出現報錯:
          ~]# rndc reload
          rndc: neither /etc/rndc.conf nor /etc/rndc.key was found
      
        分析:可能是配置文件和軟件的版本不匹配
        解決:刪除舊的配置文件,重新安裝bind
              rm -rf /etc/named*
              rm -rf /var/naemd/*

配置解析一個正向區域:

以magedu.com域為例:

  1. 設置主配置文件(/etc/named.conf)中的全局定義;

  2. 定義區域
    在主配置文件中(/etc/named.conf)或主配置文件輔助配置文件(/etc/named.rfc1912.conf)中實現;

    zone  "ZONE_NAME"  IN  {
             type  master|slave|hint|forward;
             file  "ZONE_NAME.zone"; 
     };

    注意:區域名字即為域名;

  3. 建立區域數據文件(主要記錄為A或AAAA記錄)
    在/var/named目錄下建立區域數據文件;

    • 文件為:/var/named/magedu.com.zone

      $TTL 3600
      $ORIGIN magedu.com.
      @       IN      SOA     ns1.magedu.com.   dnsadmin.magedu.com. (
              2017010801
              1H
              10M
              3D
              1D )
              IN      NS      ns1
              IN      MX   10 mx1
              IN      MX   20 mx2
      ns1     IN      A       172.16.100.67
      mx1     IN      A       172.16.100.68
      mx2     IN      A       172.16.100.69
      www     IN      A       172.16.100.67
      web     IN      CNAME   www
      bbs     IN      A       172.16.100.70
      bbs     IN      A       172.16.100.71
    • 權限及屬組修改:

      ~]# chgrp  named  /var/named/magedu.com.zone
      ~]# chmod  o=  /var/named/magedu.com.zone
    • 檢查語法錯誤:

      ~]# named-checkzone  ZONE_NAME   ZONE_FILE
      ~]# named-checkconf
  4. 讓服務器重載配置文件和區域數據文件

    ~]# rndc  reload 或
     ~]# systemctl  reload  named.service

配置解析一個反向區域

  1. 定義區域
    在主配置文件(/etc/named.conf)或主配置文件輔助配置文件中(/etc/named.rfc1912.zones)實現;

    zone  "ZONE_NAME"  IN  {
             type  master|slave|hint|forward;
             file  "ZONE_NAME.zone"; 
     };

    注意:反向區域的名字
    反寫的網段地址.in-addr.arpa ;如:100.16.172.in-addr.arpa

  2. 定義區域解析庫文件(主要記錄為PTR)

    • 示例,區域名稱為100.16.172.in-addr.arpa;

      $TTL 3600
      $ORIGIN 100.16.172.in-addr.arpa.
      @       IN      SOA     ns1.magedu.com.  nsadmin.magedu.com. (
              2017010801
              1H
              10M
              3D
              12H )
              IN      NS      ns1.magedu.com.
      67      IN      PTR     ns1.magedu.com.
      68      IN      PTR     mx1.magedu.com.
      69      IN      PTR     mx2.magedu.com.
      70      IN      PTR     bbs.magedu.com.
      71      IN      PTR     bbs.magedu.com.
      67      IN      PTR     www.magedu.com.
    • 權限及屬組修改:

      ~]# chgrp  named  /var/named/172.16.100.zone
      ~]# chmod  o=  /var/named/172.16.100.zone
    • 檢查語法錯誤:

      ~]# named-checkzone  ZONE_NAME   ZONE_FILE
      ~]# named-checkconf
  3. 讓服務器重載配置文件和區域數據文件

    ~]# rndc  reload 或
     ~]# systemctl  reload  named.service

主從服務器:注意:從服務器是區域級別的概念;

配置一個從區域:

  • On Slave

    1. 定義區域

      定義一個從區域;
      
      zone "ZONE_NAME"  IN {
             type  slave;
             file  "slaves/ZONE_NAME.zone";
             masters  { MASTER_IP; };
      };
    2. 配置文件語法檢查:named-checkconf

    3. 重載配置

      rndc  reload
      systemctl  reload  named.service
  • On Master

    • 確保區域數據文件(/var/named/ZONE_NAME.zone)中為每個從服務配置NS記錄,并且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄,且此A后面的地址為真正的從服務器的IP地址;
      注意:時間要同步;ntpdate命令;

      ...
             IN      NS      ns1.linux.io.
             IN      NS      ns2.linux.io.
      ns1     IN      A       192.168.209.134    master
      ns2     IN      A       192.168.209.135    slave
      ...
  • 測試

    • 注意:使用從服務器進行解析;
  • 當主服務器發生改變時,改變序列號比之前的大–> rndc reload –> tail /var/log/messages,消息顯示從服務器到主服務器中更新數據;

子域授權

  • 在父域服務器中的操作:

    1. 在父域服務器/var/named/ZONE_NAME.zone添加配置:

      示例:在父域/var/named/iounix.com.zone
      
               2017052702          ;修改為:2017052703   序列號增大
       ops     IN      NS      ns1.ops.iounix.com.
       ns1.ops IN      A       192.168.209.138
      
       正向解析區域授權子域的方法:xxx.ZONE_NAME   IN    NS
       ...
       ops.magedu.com.         IN     NS      ns1.ops.magedu.com.
       ops.magedu.com.         IN     NS      ns2.ops.magedu.com.
      
       ns1.ops.magedu.com.     IN     A     IP.AD.DR.ESS
       ns2.ops.magedu.com.     IN     A     IP.AD.DR.ESS
       ...

轉發

  • 定義轉發:
    注意:被轉發的服務器必須允許為當前服務器做遞歸;

    1. 區域轉發:僅為需要轉發的服務器,轉發對某特定區域的解析請求;

      需要轉發的服務器中;如果是子域,可實現對父域中的zone解析;
      
      zone  "ZONE_NAME"  IN {
             type  forward;
             forward  first|only;
             forwarders  { SERVER_IP; };
      };

      first:首先轉發;轉發器不響應時,自行去迭代查詢;
      only:只轉發;

    2. 全局轉發:針對凡本地沒有通過zone定義的區域查詢請求,通通轉給某轉發器;

      在需要轉發的服務器中設置
      
      options {
             ... ...
             forward  first|only;
             forwarders  { SERVER_IP; };
             .. ...
      };

bind中的安全相關的配置:

  • acl:訪問控制列表;把一個或多個地址歸并一個命名的集合,隨后通過此名稱即可對此集全內的所有主機實現統一調用;實現僅對定義的網絡進行控制;

    acl  acl_name  {
            ip;
            net/prelen;
      };
    
      示例:
      acl  mynet {
            172.16.0.0/16;
            127.0.0.0/8;
      };
    • bind有四個內置的acl

      • none:沒有一個主機;
        any:任意主機;
        local:本機;
        localnet:本機的IP所屬的網絡;
  • 訪問控制指令:

    • allow-query { }; 允許查詢的主機;白名單;
      allow-transfer { }; 允許向哪些主機做區域傳送;默認為向所有主機;應該配置僅允許從服務器;
      allow-recursion { }; 允許哪此主機向當前DNS服務器發起遞歸查詢請求;
      allow-update { }; DDNS,允許動態更新區域數據庫文件中內容;

bind view:

  • 視圖:

    view  VIEW_NAME {
              zone
              zone
              zone
      };
    view internal  {
              match-clients { 172.16.0.0/8; };
              zone "magedu.com"  IN {
                    type master;
                    file  "magedu.com/internal";
              };
      };
    view external {
              match-clients { any; };
              zone "magecdu.com" IN {
                    type master;
                    file magedu.com/external";
              };
      };

原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/77273

(0)
ss
上一篇 2017-05-31
下一篇 2017-05-31

相關推薦

  • lvs初探

    1,lvs是什么 lvs是Linux Virtual Server縮寫,linux虛擬服務器,擔任負載調度器(load balance)的角色,它不提供任何服務,用戶請求到這里的時候,它是將客戶需求轉發至后端真正提供服務的服務,LVS分為兩部分組成,ipvsadm管理集群服務的命令行工具,ipvs,是內核模塊。由于ipvs采用基于ip負載均衡技術,所以具有很…

    Linux干貨 2016-10-30
  • 如何自建系統內部 yum 倉庫

       準備:     a.素材:一套centos6.9和一套centos7.3的ISO鏡像光盤     環境:1.centos6.9和centos7.3,安裝好的系統各一套(土豪隨意 )     b.建立前請關閉防火墻,防止防火墻的干擾     &n…

    2017-08-05
  • N26-博客作業-week7

    1、創建一個10G分區,并格式為ext4文件系統;      (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;     ~]# fdisk /dev/sda Welcome to fdisk (util-li…

    Linux干貨 2017-03-19
  • linux系統網絡配置基礎實例(網卡別名、bong、路由)

    概述:本文主要介紹網卡別名(一張網卡多個IP)、bonging(多張網卡綁定一個IP)、以及路由實驗 Linux網絡配置基礎 基本網絡配置 將Linux主機接入到網絡,需要配置網絡相關設置。一般包括如下內容:主機名:hostname示例:臨時有效 [root@centos6 ~]# hostname MyHostName [ro…

    Linux干貨 2016-09-06
  • 重定向和管道

    重定向和管道 今天一起來學習一下重定向的一些相關命令及用法: 我們都知道程序=指令+數據 ,那么我們的數據的輸入(Input)和輸出(Output)是如何實現的呢?!跟小編君一起來看一下吧: 本博文小編君分成了四部分:1.重定向的講解 2.管道符的講解 3.涉及到的一些其他命令 4.練習題 一:重定向 重定向的本質是改變文件的默認位置,即換個地方存儲數據。 …

    2017-08-04
  • 三劍客-sed小結

     sed是一款流編輯器工具,通常我們用來對文本進行過濾與替換操作,特別是當你想要對幾十個配置文件做統一更改時,你會感受到sed的魅力。它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到…

    系統運維 2016-07-26
欧美性久久久久