Linux之DNS服務Bind

什么是DNS及功能:

DNS(Domain name server),是將IP地址轉換為域名地址。當在互聯網訪問外部服務器時,其主機都是以IP地址及端口標識(被稱之為一個套接字文件),當主機A需要與主機B通信時,A必須知道其B的IP地址,但IP地址不能方便人們的記憶,故使用其計算機名進行標識。早期的互聯網通信下,服務器的計算機名與其IP地址對應關系,被記錄在了hosts文件中,這也正是早期的域名解析模型。但隨著互聯網的服務器增加,單依靠hosts的記錄所有的計算機名映射,會導致查詢速度非常慢、計算機名的變更更新速度慢。其DNS可以解決由hosts文件來解釋域名映射的諸多問題。

IP與計算機名底層轉換機制
  • IP--->hostname : 依賴于getipbyhostname()庫調用來實現
  • hostname-->IP : 依賴于gethostnamebyip()庫調用來實現
客戶端請求域名解析查詢機制:
  • 1、首先查詢本地hosts文件中的記錄,如果有,返回計算機名,否則;
  • 2、查詢/etc/resolv.conf文件中的DNS服務器,如果有,返回所記錄的信息給客戶端, 否則;(此過程為遞歸查詢機制
  • 3、由本地DNS服務器完成查詢請求,并返回其最終結果值給客戶端(此過程為迭代查詢機制)
DNS服務端查詢原理
  • 正向解析: hostname ---> IP
    • 訪問示例:
    • A客戶端請求www.zhenping.me --> 由DNS服務器完成(1、查詢本地緩存記錄,如果有直接返回,2、向root"."發起查詢查詢,查詢.me的NS記錄返回其.me的NS服務器))--->再向.me的NS服務器查詢"zhenping"域的NS服務器,并返回其結果值---->根據zhenping的NS服務器記錄地址,---> NS服務器查詢其所對應的www主機所對應的IP地址,并返回給服務器。
    • 正向解析的層級如下:
      • .
      • com
      • zhenping
      • www
  • 反向解析: IP ---> hostname
    • 訪問示例:
    • A客戶端請求反向記錄1.2.3.4 ---> 由DNS發起請求查詢"."域,由"."返回其ip-addr.arpa的NS記錄,--> 服務器查詢ip-addr.arpa的NS服務器,由NS服務器返回"1"區域的NS服務器地址,并將結果返回到服務器--->服務器查詢"1"區域中的記錄,由"1"區域返回"2"區域中的NS記錄--->服務器向"2"區域查詢"3"區域,由2區域返回3區域中的NS記錄--->服務器再讓3區域中的NS記錄,3區域查詢并返回4的主機所對應的主機地址。
    • 反向解析的層級如下:
      • .
      • ip-addr.arpa
      • 1
      • 2
      • 3
      • 4 (其是一個主機)
正向解析的區域及資源記錄組成分解(各對應的二級域) :
  • . : 資源記錄配置如下:

      com IN NS ns
      ns  IN  A   1.1.1.1
      me  IN  NS  ns
      ns  IN  A   2.2.2.2
          注意:有多個頂級域(TLD)時,應該解析多個頂級域的NS記錄
    
  • .me :中的資源記錄配置如下:

      zhenping IN NS ns
      ns IN   A   3.3.3.3
      
          注意:諸多的域名區域,都應該有一個所對應的NS記錄
    
  • zhenping : 中的資源記錄配置如下:

      cw IN NS  ns
      ns  IN A    4.4.4.4
    
  • cw.zhenping : 中的資源記錄配置如下:

          IN  NS  ns
      ns  IN  A   5.5.5.5 
    

注意: 其反向區域也應為此類區域及資源記錄組成格式。所有的區域定義在/etc/named.conf文件中。資源記錄可以為系統中的任何一個文件來記錄,但需要在區域文件中指明

DNS服務器的類型:
  • 負責解析至少一個域
    • 主名稱服務器
    • 輔助名稱服務器(當主DNS服務器停止工作后,輔助的DNS服務器也瘵停止解析)
  • 不負責域解析
    • 緩存名稱服務器
DNS的解析返回結果分類:
  • 權威回答
    • DNS服務器自己直接負責的域返回的答案
  • 非權威回答
    • DNS服務器未負責的域,由緩存或者查詢到的記錄返回的答案
DNS服務器返回結果答案類別:
  • 有查詢結果(肯定答案)
  • 不存在查詢結果(否定答案)
主從DNS服務器的數據復制選項
  • serial : 序列號,即主DNS數據庫的版本號,主服務器數據庫內容發生變化時,其版本號需要遞增,從服務器會對比與主服務器的數據庫版本號,一樣的版本號就不需要更新,否則需要更新
  • refresh : 從服務器每多久到主服務器檢查序列號的變化
  • retry : 從服務器到服務器請求同步解析庫失敗時,再次發起解析請求的時間間隔,這個時間需短時刷新時間
  • expire : 從服務器始終聯系不到主服務器時,多久之后放棄從主服務器同步數據,超過此時間后,從服務器也將停止解析
  • negative answer : 否定答案的緩存時長

注意:以上選項時間單位都支持W,D,H,M,這參數定義在資源記錄的文件中,位置為SOA的后面,以()包含,其括號前后都有空格

主從DNS之間的區域傳送機制:
  • axfr : 全量傳送,一般為從服務器第一次讀取,將會傳送整個數據庫
  • ixf : 僅傳送變化的數據
資源記錄組成部分,簡稱rr:

資源記錄的定義格式: name [ttl] IN RR_TYPE vlue

  • SOA : start of authority,起始授權記錄,一個區域解析庫只有一個SOA記錄,而且必須放在所有記錄的最前面

      @ IN SOA @ admin.zhenping.me. 
      
          注意:第一個@:表示區域名稱,即zhenping.me.
                第二個@: NS服務器的名稱,也可以寫為ns1.zhenping.me.
    
  • NS : name server,域名服務記錄,一個區域解析可以有多個NS記錄,其中一個為主的

      IN NS ns1
          或者
       IN NS  ns.zhenping.me.
       
       注意:NS的name可以省略,可以從/etc/named.conf文中zone的名稱繼承
    
  • A : address, 地址記錄,從FQDN--->IPV4的記錄

      www IN  A   1.1.1.1
    
  • AAAA : 地址記錄,從FQDN--->IPV6的記錄

  • CNAME : Canonical name,別名記錄

      www1 IN CNAME www
    
  • PTR : Pointer, IP--->FQDN的記錄

      4   IN PTR  www.zhenping.me.
    
  • MX : mail exchange,郵件交換器,其有優先級,一般是0到99,數值越小優先級越高

注意:
  • 1、TTL值可以從全局承
  • 2、@表示當前區域的名稱
  • 3、相信的兩條記錄其name相同時, 下條的name記錄可以省略
  • 4、對于正向區域,各MX,NS的類型的記錄的value為FQDN,此FQDN應該有一個A記錄,NS類型的name可以省略

BIND服務

簡介

BIND(berkeley internet name domain ),由berkeley大學開發,現由ISC組織維護,其是DNS協議的實現解決軟件,服務端的運行進程為named

BIND程序包說明
  • bind : 提供的DNS Server主軟件程序包
  • bind-libs : 被bind和bind-utils包中的程序共同用到的文件
  • bind-utils : bind客戶端程序集,包含了如dig,host,nslookup等工具
  • bind-chroot : 選裝,讓named運行于一個jail(沙箱)模式下
BIND的工作端口
  • 53/UPD
  • 53/TCP (其主要工作在UDP端口,如果傳送的數據太大導致失敗,其會以TCP模式嘗試重傳)
  • 953/TCP : rndc的連接端口
BIND的配置文件及工作目錄
  • /etc/named.conf : named主配置文件,定義各種運行參數
  • /etc/named.rfc1912.zones : 定義各區域的配置文件
  • /var/named/ : 資源記錄文檔的存放位置
  • /var/named/slaves : 從服務器的資源配置文件存放路徑
named.conf配置參數說明:
  • options { };: 框定全局配置參數
  • directory: 定義named的工作目錄
  • allow-recursion yes | allow-recursion { 172.16.0.0/16; };: 前者表示允許所有客戶端進行遞歸 ,后者表示允許指定范圍的主機遞歸 ,其可以定義在區域中,默認為recurssion yes
  • allow-query { localhost; | 172.16.0.0/16; }; : 前者表示允許本地可查詢負責域的記錄,后者表示指定范圍的主機可以執行查詢操作,其不可以定義在區域中
  • allow-transfer { 10.189.9.203; | none; }; : 前者表示允許10.189.9.203這臺主機做區域傳送,其可以定義在區域中,一般只定義從服務器可以傳送。不允許傳送的區域,是不能使用"dig -t axfr | ixfr weizhenping.me @NS_IP" 的方式來查詢 。
  • notify yes : 表示啟用通知功能,配置變化通知從服務器
  • masters { 10.189.9.202; };:指定主服務器是誰,其定義在區域中,用于從服務器指定主DNS服務器
  • listen-on port 53 { 172.16.36.70; }; : 定義監聽端口和地址
  • forward { first | only } : 配置轉發服務器,可以定義在區域中。其forward一般在NS為緩存服務器時使用
  • forwards { server_ip; }; : 定義轉發服務器的地址,一般配合forward來使用
    • first表示:首先轉發,轉發不成功時,自行迭代查詢

    • only表示:只轉發

        zone "mageedua.com" IN {
            type forward;
            forward first;
            forwarders { 10.189.9.202; };
        };
        
        注意:其也可以配置對區域進行轉發,除此區域的請求,都不會進行轉發操作
      
  • allow update {} : DDNS,是否允許進程動態更新區域數據庫文件中的內容,正常應該為none
  • // : 表示注釋一行
  • /* */ : 表示注釋多行的內容
配置主從DNS服務器
  • 1、修改/etc/named.conf文件中的內容:

      listen-on port 53 { 172.16.36.70; }; #定義監聽端口及IP地址
      directory   "/var/named";   #工作目錄
      allow-query     { 172.16.36.0/16; }; #允許此網段進行查詢請求
      allow-recursion { 172.16.0.0/16; }; #允許指定網段的主機進行遞歸查詢
      dnssec-enable no;   #關閉dnssec功能選項
      dnssec-validation no;   #關閉dnssec功能選項
      dnssec-lookaside no;    #關閉dnssec功能選項
    
  • 2、定義區域,定義到/etc/named.rfc1912.zones文件中,其也可以定義在/etc/named.conf文件中,named.conf文件包含了named.rfc19212.zones文件

      ######定義正向區域
      zone "weizhenping.me" IN {   #域為weizhenping.me
          type master;   #定義為這臺為主NS服務器
          file "weizhenping.me.zone";  #資源記錄文件存放位置
      };          
      
      zone "36.16.172.ip-addr.arpa" IN {  #反向域為36.16.172.ip-addr.arpa 
          type master;    #定義為反向域
          file "36.16.172.ip-addr.arpa";  #資源記錄文件存放位置
      };
    
  • 3、定義正向資源記錄文件/var/named/weizhenping.me.zone

      $TTL 86400
      $ORIGIN weizhenping.me.
      @   IN      SOA     ns1.weizhenping.me.     admin.weizhenping.me. (
                  2016011006 ;serial   #序列號,最長10位
                  1D         ;refresh
                  30M        ;retry
                  2D         ;expire
                  1D  )      ;negative answer ttl
              IN  NS  ns1     #主DNS記錄
              IN  NS  ns2     #從DNS記錄,都需要在下面添加所對應的A記錄
              IN  MX  10  mail
      ns1     IN  A   172.16.36.70
      ns2     IN  A   172.16.36.71
      mail    IN  A   172.16.36.60
      www     IN  A   172.16.30.60
      wap     IN  CNAME   www
      qq      IN  A   172.16.36.72
    
      $TTL 86400 這是一個全局變量,此值都繼承到下面的各資源記錄中,故在整個配置文件中,可以不再標記TTL值
      $ORIGIN weizhenping.me. 這也是一個全局變量,此值也可以繼承到下面中的,如果不定義,其ns1的地址應該正確填寫為ns1.weizhenping.me.  ,mail也應該正常填寫為mail.weizhenping.me.
    
  • 4、定義從服務器的配置

    • a、配置主配置文件/etc/named.conf文件

        listen-on port 53 { 172.16.36.71; }; #定義監聽端口及IP地址
        directory   "/var/named";   #工作目錄
        allow-query     { 172.16.36.0/16; }; #允許此網段進行查詢請求
        allow-recursion { 172.16.0.0/16; }; #允許指定網段的主機進行遞歸查詢
        dnssec-enable no;   #關閉dnssec功能選項
        dnssec-validation no;   #關閉dnssec功能選項
        dnssec-lookaside no;    #關閉dnssec功能選項
      
    • b、配置區域文件

        zone "weizhenping.me" IN {   #定義域名稱
        type slave;     #定義NS級別
        file "slaves/weizhenping.me.zone"; #定義資源記錄文件存放路徑
        masters { 172.16.36.70; };  #定義主服務器的IP地址
        };
      
        zone "36.16.172.ip-addr.arpa" IN {
        type slave;
        file "slaves/36.16.172.ip-addr.arpa";
        masters { 172.16.36.70; };
        };
      
  • 5、檢查named主配置文件及區域配置文件的語法:

    • 檢查named.conf的語法格式:
      • named-checkconf
    • 檢查區域配置文件的語法格式:
      • named-checkzone "weizhenping.me" /var/named/weizhenping.me.zone
  • 6、重啟主DNS服務器

      rndc reload 
          或者
      systemctl restart named
    
注意:
1、前期為了不影響服務器之間的通信,建議關閉防火墻功能
2、需要在主NS服務器上,定義從NS的記錄及NS所對應的A記錄
3、在從NS定義區域類型時,需要定義為slave,并定義masters為主NS的地址
4、在Centos 7平臺可以使用systemctl status named,查看其運行狀態,如果有錯誤,可以查看日志
5、配置主從DNS服務器,需要保證服務器之間的時間一致,可以使用ntpdate命令同步時間。
定義二級域
  • 1、在主域名服務器中定義二級域的名稱:

      $TTL 86400
      $ORIGIN weizhenping.me.
      @   IN      SOA     ns1.weizhenping.me.     admin.weizhenping.me. (
                  2016011007 ;serial
                  1H         ;refresh
                  30M        ;retry
                  1W         ;expire
                  1D  )      ;negative answer ttl
              IN  NS  ns1
              IN  NS  ns2
              IN  MX  10  mail
      ns1     IN  A   172.16.36.70
      ns2     IN  A   172.16.36.71
      mail    IN  A   172.16.36.60
      www     IN  A   172.16.30.60
      wap     IN  CNAME   www
      cw      IN  NS  ns1 .cw         #定義二級域為cw.weizhenping.me
      ns1.cw     IN  A   172.16.36.72 #并定義二級域的NS服務器地址
      qq      IN  A   172.16.36.72
      dd      IN  A   172.16.36.73
    
  • 2、在二級域的主NS服務器中配置:

          listen-on port 53 { 172.16.36.72; }; #定義監聽端口及IP地址
          directory   "/var/named";   #工作目錄
          allow-query     { 172.16.36.0/16; }; #允許此網段進行查詢請求
          allow-recursion { 172.16.0.0/16; }; #允許指定網段的主機進行遞歸查詢
          dnssec-enable no;   #關閉dnssec功能選項
          dnssec-validation no;   #關閉dnssec功能選項
          dnssec-lookaside no;    #關閉dnssec功能選項
    
  • 3、在二級域中添加區域配置文件:

      zone "cw.weizhenping.me" IN {     #定義域名稱為cw.weizhenping.me.
      type master;                    #服務器類型為主NS
      file "cw.weizhenping.zone";     #資源配置文件位置
      };
    
  • 4、在二級域的主NS服務器中定義資源記錄:

      $TTL 86400
      $ORIGIN cw.weizhenping.me.
      @       IN      SOA     ns1.cw.weizhenping.me.      admin.cw.weizhenping.me.    (
              201601001
              1D
              30M
              1D
              1D )
              IN      NS      ns1
      ns1     IN      A       172.16.36.72
      www     IN      A       172.16.36.72
      qq      IN      A       172.16.36.72
    
  • 5、檢查二級域的配置是否成功:

      1、在主域的主NS服務器中,使用 dig -t A www.cw.weizhenping.me ,如果能解析到,說明配置OK。
    

ACL及視圖的使用:

1、ACL的定義格式:
acl acl_name {
    ip;
};

#####示例:
acl innet {
    10.189.9.0/24;
    127.0.0.1/8;
    192.168.0.0/24;
};

options {
    directory "/var/named";
    allow-recursion { innet; };
};
2、視圖的定義格式:
  view VIEW_NAME {

  };
ACL及視圖的配合使用,可實現智能DNS的實現:
root@localhost named]# cat /etc/named.conf
    acl telecom {
        10.189.9.0/24;    
    }; 
                #此ACL定義了電信IP的列表
    acl unicom {
        10.189.8.0/24;
    };
                #此ACL定義了聯通IP的列表
    options {
        directory "/var/named";
        allow-recursion {   localnet; };   #定義了允許遞歸請求的主機為NS所在網絡的所有主機
        allow-query { any; };
    };

    view  telecom {
        match-clients { telecom; };
        zone "mageedua.com" IN {
            type master;
            file "telecom.mageedua.com.zone";
        };
    };

    view unicom {
        match-clients { unicom; };
        zone "mageedua.com" IN {
            type master;
            file "unicom.mageedua.com.zone";
        };
    };
     #在named.conf配置文件中,配置view功能,并在視圖區域定義match-clients 參數,讓match-clients引用acl列表,acl可以為電信IP列表,或者聯通IP列表。最后在view視圖中定義需要智能DNS的區域。一般情況,可以將區域劃分三類: 1、內網視圖  2、電信視圖 3、聯通視圖
     [root@localhost named]# cat telecom.mageedua.com.zone
    $TTL 86400
    @   IN  SOA ns1.mageedua.com.   admin.mageedua.com. (
            2015061101
            1D
            1H
            7D
            1D )
        IN  NS  ns1
        IN  MX  10    mail
    ns1 IN  A   10.189.9.110
    mail    IN  A   10.189.9.111
    www IN  A   10.189.9.112   #電信www服務器為112的地址
    [root@localhost named]# cat unicom.mageedua.com.zone
    $TTL 86400
    @   IN  SOA ns1.mageedua.com.   admin.mageedua.com. (
            2015061101
            1D
            1H
            7D
            1D )
        IN  NS  ns1
        IN  MX  10    mail
    ns1 IN  A   10.189.9.110
    mail    IN  A   10.189.9.111
    www IN  A   10.189.9.113  #聯通www服務器為113的地址
    [root@localhost slaves]# dig -t A www.mageedua.com @10.189.9.110   #電信用戶查詢結果

    ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7_0.1 <<>> -t A www.mageedua.com @10.189.9.110
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58349
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
    ;; WARNING: recursion requested but not available

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.mageedua.com.      IN  A

    ;; ANSWER SECTION:
    www.mageedua.com.   86400   IN  A   10.189.9.112

    ;; AUTHORITY SECTION:
    mageedua.com.       86400   IN  NS  ns1.mageedua.com.

    ;; ADDITIONAL SECTION:
    ns1.mageedua.com.   86400   IN  A   10.189.9.110

    ;; Query time: 1 msec
    ;; SERVER: 10.189.9.110#53(10.189.9.110)
    ;; WHEN: 四 6月 11 10:26:21 CST 2015
    ;; MSG SIZE  rcvd: 95
named的內置ACL:
  • none : 沒有一個主機
  • any : 任意
  • local : 本機
  • localnet : 本機IP所屬的網絡

rndc工具

其是named內置提供的遠程管理dns的工具,要以實現DNS的監控,啟動或停止等操作。其默認工作在953端口。

rndc的配置
    [root@Centos6 named]# rndc-confgen  >> /etc/rndc.conf   #使用rndc-confgen生成key文件
    [root@Centos6 named]# vim /etc/rndc.conf #默認在安裝bind服務時,會產生/etc/rndc.key,需刪除
    # Start of rndc.conf
    key "rndc-key" {
            algorithm hmac-md5;
            secret "vAv9U7k+jaHYI0gwdru1dA==";
    };

    options {
            default-key "rndc-key";
            default-server 127.0.0.1;
            default-port 953;
    };
    # End of rndc.conf

    # Use with the following in named.conf, adjusting the allow list as needed:
    # key "rndc-key" {
    #       algorithm hmac-md5;
    #       secret "vAv9U7k+jaHYI0gwdru1dA==";
    # };
    #
    # controls {
    #       inet 127.0.0.1 port 953   #如果需要外部主機遠程監控,需要將127的地址更改為外部IP
    #               allow { 127.0.0.1; } keys { "rndc-key"; };   #允許控制的主機IP地址 
    # };
    # End of named.conf
    #將添加注釋的行添加到/etc/named.conf文件中,并去掉注釋
    [root@Centos6 named]# cat /etc/named.conf
    key "rndc-key" {
       algorithm hmac-md5;
       secret "vAv9U7k+jaHYI0gwdru1dA==";
    };
    controls {
       inet 10.189.9.202 port 953
           allow { 10.189.9.202; } keys { "rndc-key"; };
    };
    [root@Centos6 named]# rndc -c /etc/rndc.conf flush
    [root@Centos6 named]# rndc -c /etc/rndc.conf notify "mageedua.com"
    zone notify queued
    [root@Centos6 named]# rndc -c /etc/rndc.conf stop
    [root@Centos6 named]# rndc -c /etc/rndc.conf status
    #rndc命令,可以使用rndc -h查看相關選項
rndc的指令選項:
  • rndc status : 查看DNS的工作狀態
  • rndc stats : 查看dns的狀態統計信息
  • rndc stop : 停止DNS服務
  • rndc flush :清空服務器緩存
  • rndc reload : 重置加載配置文件

DNS測試工具:

dig 命令
  • 使用格式:dig [-t RR_TYPE] name [@server] [query options]
    • OPTIONS:
      • -t : 指定資源記錄類型,一般為A記錄,或者NS記錄。

      • +[no]trace : DNS解析路由跟蹤

      • +[no]recurse : 進行遞歸解析

      • -x : 反向解析

          dig +trace -t NS weizhenping.me @172.16.36.70
        
host 命令
  • 使用格式:host [-t RR_type] name SERVER_IP
    • 示例:

        host [-t RR_type] name SERVER_IP
      
nslookup
  • 交互式命令,設置參數如下:
    • server 202.96.209.133 #設置默認的解析DNS服務器
    • set type=mx : 設置解析的資源記錄類型
國內著名的智能DNS提供商:
  • dnspod
  • dns.la
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 概述 在網絡環境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應服務器獲取相應的...
    ghbsunny閱讀 2,968評論 0 7
  • 一、實現從根,com,rj.com 模擬互聯網的DNS架構 DNS(Domain Name System,域名系統...
    ssjinyao閱讀 1,530評論 0 7
  • 目錄: 一些基本概念主機名DNS名稱解析DNS 解析的后端存儲名稱解析總結 大規模域名解析的體系架構DNS 解析需...
    C86guli閱讀 12,542評論 3 34
  • DNS簡介DNS解析關鍵概念BIND 一、DNS簡介: (一)DNS服務 DNS:Domain Name Serv...
    哈嘍別樣閱讀 1,817評論 0 2
  • 有感于中國人在房產教育等支付偏好過于強大,號稱無所不能的互聯網思維也沒能解決這個強痛點問題,這個痛點估計就等AI來...
    新時代士的精神閱讀 478評論 0 4