DNS協議與DNS服務器搭建(bind)

寫在前面:

    博客書寫牢記5W1H法則:What,Why,When,Where,Who,How。


本篇主要內容:

● tcp/ip回顧

● DNS協議/DNS服務相關概念

● bind安裝配置

  正向解析區域

  反向解析區域

  主從服務器

   子域配置

   轉發配置

● bind安全設置

  acl訪問控制列表

● bind view智能DNS



相關概念回顧:

   tcp/ip

      通信子網--->內核中實現

         傳輸層

            添加源端口與目標端口等信息。

            由於發送方與接收方的速率可能不同,這樣可能會導致數據丟失,所以在傳輸層的tcp首部信息中設置有“window”(窗口)大小設置。

            裸套接字:

               應用層進程的報文自己有控制功能,不通過TCP和UDP支撐,直接調用互聯網層的IP報文,這類報文稱爲裸套接字報文。

            TCP:Transmission Control Protocol

               面向連接的協議,雙方通信之前需要實現建立虛連接。

            UDP:User Datagram Protocol

               用戶數據報協議,雙方通信之前無需建立虛連接。

            sctp等其他協議

         互聯網層

            添加IP等信息,完成網絡通訊

         物理層

            添加MAC地址等信息,萬層本地通訊,轉發、中繼

      應用層

         請求信息數據,包或包組

         應用程序來實現各種協議

         如:http/ftp/郵件發送smtp/郵件接收pop3/


   tcp/ip協議中基於sockets的通訊一般爲C/S結構的。

   Server端需要時刻監聽(listen)在IP:Port上,Client同樣需要一組IP:Port信息與Server通信。


DNS:Domain Name Service,應用層協議

   相關概念:

      將域名與IP地址進行相互轉換的協議。

      C/S結構

         默認端口爲:53/udp、53/tcp

      域名:FQDN(Full Qualified Domain Name)

   層級結構:

      根域:.

         記錄頂級域服務器信息,全球目前有13個根

      頂級域:top level domain(tld)

         記錄二級域服務器信息

         組織域:

            .com商業機構 .net網絡組織 .org非盈利組織 .gov政府部門 .edu教育機構 .mil軍工部門

         國家/行政區域:

            .cn中國 .iq伊拉克 .tw臺灣 .hk香港 .jp日本

      二級域

         記錄三級域服務器信息以及本地域主機信息

         baidu.com域 magedu.com域 com.cn域等

      ...

   DNS查詢方式:

      (1)遞歸查詢

         客戶端向本地DNS查詢記錄,當本地DNS中沒有對應條目時,DNS服務器去網絡中查詢,並將結果返回給客戶端。

         客戶端-->本地DNS

                  |-->根域

                  |-->頂級域 tld

                  |-->二級域

                  |...

      (2)迭代查詢

         客戶端向本地DNS查詢記錄,當本地DNS中沒有對應條目時,DNS返回根域地址給客戶端,客戶端依次去查詢。

         客戶端-->本地DNS

            |-->根域

            |-->頂級域 tld

            |-->二級域

            |...

   DNS名稱解析方式:

      以下兩種解析方式,不是同一個名稱空間、不是同一個目錄樹、也不是同一個解析庫。

      正向解析:FQDN-->IP

      wKioL1cKdB2AH_WGAAAavyxuBk4792.png

      反向解析:IP-->FQDN

      wKioL1cKdCzCHK-LAAAdVYi3Y5M666.png

   域名註冊方式:

      萬網(國內,需備案)、godaddy(國外站點,無需備案)等代理註冊站點。

      注意,一般註冊的是二級域名,如baidu.com,而www.baidu.com只是域中的一臺主機。

   DNS服務器類型

      不負責解析域名:

         緩存名稱服務器

      負責解析至少一個域(也會緩存條目)

         主域名解析服務器

         從域名解析服務器

   服務器返回的解析答案類型

      肯定答案

      否定答案

         不存在查詢的鍵,因此,不存在預期查詢的鍵對應的值。

      權威答案

         返回本DNS服務器直接維護的條目,使用dig命令會有"aa"標識。

      非權威答案

         非本機維護的條目(緩存或轉發)

   主-輔DNS服務器

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

      從DNS服務器:從主DNS服務器或其它從DNS服務器那裏“複製”一份解析庫;但只能進行讀操作;(注意“複製”操作是以區域zone爲單位的)

         主從服務器協調屬性

            序列號:serial

               也即是數據庫的版本號;主服務器數據庫內容發生變化時,手動設置其版本號遞增;

            刷新時間間隔:refresh

               從服務器每多久到主服務器檢查序列號更新狀況;

            重試時間間隔:retry

               從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔;

            過期時長:expire

               從服務器始終聯繫不到主服務器時,多久之後放棄從主服務器同步數據;停止提供服務;

            否定答案的緩存時長:

         注意:時長對應的單位可以是M、H、D、W,對應分鐘、小時、天、星期

         另外,當主服務器數據變動時,主服務器會"主動通知"從服務器更新數據;

         區域傳送

            全量傳送:axfr, 傳送整個數據庫;一般第一次同步時使用。

            增量傳送:ixfr, 僅傳送變動的數據;

         區域(zone)和域(domain)

            區域

               正向解析或反向解析的功能與數據庫的集合。

           

               如baidu.com這個二級域,包含了正向解析和反向解析區域。

   區域數據庫文件zone格式:

      資源記錄Resource Record(rr)

      語法:

         name [TTL] IN RR_TYPE value

      記錄類型(RR_TYPE)

         SOA

            起始授權記錄,必須爲第一條,有且只能有一條

            name:當前區域名稱

               如“fredme.com.”或“4.3.2.in-addr.arpa.”

            value

               (1)當前區域名稱(也可以使用主DNS服務器名稱)

               (2)當前區域管理員郵箱,其中"@"用"."代替

               (3)主從服務器協調屬性定義,放入()內

               (4)“;”後爲註釋信息

 例:

magedu.com.    86400    IN       SOA    magedu.com.    admin.magedu.com.  (
   2017010801   ; serial
   2H          ; refresh
   10M       ; retry
   1W         ; expire
   1D         ; negative answer ttl 
)

         NS

            域名服務器條目

            name:當前區域名稱

            value:當前區域某DNS服務器FQDN名,如ns1.fredme.com

  例:

fredme.com.   86400   IN    NS       ns1.fredme.com.

         MX

           郵件服務器條目

            name:當前區域名稱

            優先級:0-99,數字越小,優先級越高,即使只有一個mx服務器,也需要設置優先級

            value:當前區域某郵件交換器的FQDN名

  例:

fredme.com.   IN    MX    10   mx1.fredme.com.

         A

            IPv4-->FQDN條目

            name:FQDN

            value:IPv4地址

  例:

www.fredme.com.   IN    A    1.1.1.1

         AAAA

            IPv6地址條目

            name:FQDN

            value:IPv6

         CNAME

            FQDN別名

            name:FQDN格式的別名

            value:FQDN正式名稱

  例:

web.fredme.com.    IN    CNAME    www.fredme.com.

         PTR

            FQDN-->IPv4條目

            僅反向區域文件中配置

  例:

23    IN    PTR    www.gredme.com.

         注意

            (1)TTL可以全局繼承。如頭部定義$TTL 3600

            (2)@表示當前區域名稱

            (3)相鄰兩條記錄name相同時,後者可以省略name項

            (4)正向解析區域文件中,各MX、NS記錄中的FQDN應該有對應的A記錄


bind安裝配置:

   BIND:

      Berkeley Internet Name Domain,ISC.org

      是DNS協議的一種實現軟件程序,其主程序名稱爲named。

   程序包:

      bind-libs:被bind和bind-utils包中的程序共同用到的庫文件;

      bind-utils:bind客戶端程序集,例如dig, host, nslookup等;

      

      bind:提供的dns server程序、以及幾個常用的測試程序;

      bind-chroot:選裝,讓named運行於jail模式下;

   配置文件:

      主配置文件/etc/named.conf 

         或包含進來其它文件;

            /etc/named.iscdlv.key

            /etc/named.rfc1912.zones

            /etc/named.root.key

         文件格式:

            全局配置段:

               options { ... };

            日誌配置段:

               logging { ... };

            區域配置段:

               zone { ... };

                  定義那些由本機負責解析的區域,或轉發的區域;

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

      解析庫文件:

         /var/named/目錄下;

            一般名字爲:ZONE_NAME.zone

            

         注意

            (1) 一臺DNS服務器可同時爲多個區域提供解析;

            (2) 必須要有根區域解析庫文件: named.ca;

            (3) 還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫;

               正向:named.localhost

               反向:named.loopback

                  

   rndc:remote name domain contoller

      遠程管理bind程序的軟件

      953/tcp,但默認監聽於127.0.0.1地址,因此默認僅允許本地使用;

      命令:

         用於named服務控制

         rndc  status

            查看named服務狀態

         rndc  stats

            查看統計信息

         rndc  reload/stop/restart

            重讀配置文件/停止服務/重啓服務

         rndc  flush

            清空named緩存

         

   緩存名稱服務器的配置:

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

      監聽地址配置:

         修改爲外卡IP,以供能夠訪問此IP的客戶端訪問DNS服務。

         listen-on port 53;

         listen-on port 53 { 172.16.100.67; };

      關閉dnssec

         初學者建議關閉dnssec

         dnssec-enable no;

         dnssec-validation no;

         dnssec-lookaside no;   

      關閉僅允許本地查詢:

         //allow-query  { localhost; };

      注意:

         (1)"{}"左右有空格

         (2)C語言格式的註釋信息,單行註釋//,多行註釋/* */

   檢查配置文件語法錯誤

      named-checkconf   [/etc/named.conf]

   測試工具:

      dig

         用來測試DNS系統,所以不會查詢hosts文件中的記錄

         正向解析測試

            dig [-t RR_TYPE] name [@NS_IP] [query options]

            query options:

               +[no]trace:跟蹤解析過程;

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

         反向解析測試

            dig  -x  IP [@server]

         模擬完全區域傳送

            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:要查詢的FQDN;


   正向解析區域配置:

      (1)修改主配置文件/etc/named.conf

         options部分:

            listen-on

               修改監聽IP地址,此地址爲客戶端能夠訪問的地址

            allow-query

               設定允許查詢的主機。註釋掉,不做限制

            dnssec-enable

            dnssec-validation

               dnssec相關配置,關閉,設置爲no

      (2)根據主配置文件的include項,修改/etc/named.rfc1912.zones

         一般自定義zone配置都寫入到此文件

         新建自定義zone條目:

            zone  "ZONE_NAME"  IN  {

               type  {master|slave|hint|forward};

               file  "ZONE_NAME.zone"; 

            };   

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

      (3)根據上步驟,新建zone文件

         根據上步配置,假設指明的zone文件爲grub2.com.zone,在/var/named/目錄新建此文件,內容爲:

            $TTL 3600  ;單位爲秒

            $ORIGIN grub2.com. ;設定域名

            @   IN       SOA      ns1.grub2.com.    admin.grub2.com. (

               2016041001 ;標識符

               10M ;同步時間

               1H ;重試時間

               1D ;過期時間

               1D ;否定回答的過期時間

               )

               IN       NS       ns1

               IN       MX       10 mx1  ;注意MX記錄有優先級值

            ns1   IN       A       192.18.31.7

            mx1   IN       A       192.18.31.6

            www   IN       A       192.168.31.7

               IN       A       192.168.31.6 ;定義多個相同FQDN條目時,客戶端每次訪問顯示順序不同,相當於進行了負載均衡。省略FQDN表示與上一條目相同。

            web   IN       CNAME    www

         注意:需要修改權限信息以保證數據安全:

            chgrp named grub2.com.zone

            chmod o= grub2.com.zone

      (4)檢查配置文件與zone文件,重讀配置文件

         named-checkconf

         named-checkzone grub2.com. /var/named/grub2.com.zone

         rndc reload

   反向解析區域配置:

      (1)修改/etc/named.rfc1912.zones文件

         自定義zone條目:

         zone  "ZONE_NAME"  IN  {

               type  master|slave|hint|forward;

               file  "FILE.zone"; 

            };

         補充:

            ZONE_NAME:

               反寫的網段地址.in-addr.arpa 

                  31.18.172.in-addr.arpa

            FILE.zone:

               網段.zone即可

                  172.18.31.zone

      (2)定義zone文件

         假設爲:172.18.31.zone

         內容爲:

            $TTL 36000

            $ORIGIN 31.18.172.in-addr-arpa 

            @ IN    SOA    ns1.grub2.com. admin.grub2.com. (

               2016041001

               10M

               1H

               1D

               1D

               )

               IN    NS       ns1.grub2.com.

            7   IN    PTR    ns1.grub2.com.

            6    IN    PTR    mx1.grub2.com.

            7    IN    PTR    www.grub2.com.

            6    IN    PTR    www.grub2.com.

         補充:

            反向解析區域zone文件也可以設置CNAME條目,但與正向解析zone不同,應該填寫IP


   主從服務器:

      從服務器是區域(zone)級別的同步。

      其他從服務器仍然可以從從服務器同步,即級聯

      負載均衡:

         即多臺DNS服務器都發揮作用爲客戶端提供服務的實現。

         (1)將本地客戶端的DNS順序修改一下,一部分將主服務器設置爲主DNS,一部分將從服務器設置爲主DNS

         (2)由上級完成,告知上級DNS服務器有多臺服務器,由上級分發到不同服務器上。

      服務器原則:

         (1)只給本地客戶端遞歸查詢

         (2)非本地客戶端只提供本地管理的域名的查詢

      從DNS配置方法:

         (1)定義區域

            指名類型爲從服務器(slave)

            zone "ZONE_NAME" IN {

               type slave;

               file "slave/ZONE_NAME.zone";

               masters { MASTER_IP; };

            };

            注意:之所以將zone文件指定到salve目錄下,是爲了安全,默認/var/named/目錄對named組沒有寫權限,而修改權限勢必會有安全隱患,所以選擇在salve子目錄是非常明智的。

         (2)檢查配置文件,重載配置或重啓服務

            named-checkconf

            rndc reload

         注意:

            a.需要確保主服務器的區域數據文件中爲此從服務器配置了NS記錄以及對應的A或PTR記錄,修改區域文件後記得序列號修改一下。

            b.主服務器應該設置訪問控制,只允許從DNS進行區域傳送。

            c.需要注意系統時間需要同步,這樣才能保證後續同步操作。

               ntpdate命令。

      子域配置:

         (1)正向解析區域授權子域:

            只需要在上級域中添加子域的NS記錄以及對應的A記錄即可

               子域名稱 IN NS 子域域名服務器的FQDN

               子域服務器FQDN IN A NS_IP

                  例:

                     ops.grub2.com.   IN    NS    ns1.ops.grub2.com.

                     ns1.ops.grub2.com. IN A 172.18.31.9

               注意:如果子域有主從等多臺服務器,需要在上級域中記錄多條。

         (2)子域服務器配置

            正常配置屬於此子域的主機或其子域即可。


      定義轉發:

         當客戶端從子域DNS服務器查詢父域中定義的域名條目時,由於子域中沒有相關記錄,所以子域DNS默認會去根域服務器遞歸查詢,而這樣做顯然沒有必要。比如,客戶端向ops.grub2.com的域服務器請求"www.grub2.com"域名對應IP地址。

         當本地查詢不到條目時,設置轉發到其他特定服務器。

         注意!只有允許遞歸查詢的客戶端請求才會被轉發。參照下面訪問控制指令。

         區域轉發

            僅轉發某特定區域的解析請求

            zone "ZONE_NAME" IN {

               type forward;

               forward first|only;

               forwarders { SEREVER_IP; ... };

            };

            first:首先轉發。服務器不響應時,再去迭代查詢

            only:只轉發。

         全局轉發

            凡本地未定義區域,全部轉發給其他服務器。

            在/etc/named.conf配置文件的開頭options {}中添加

               forward only|first;

               forwarders { SERVER_IP; ... };

   

   bind安全相關配置:

      acl:

         訪問控制列表

         將1個或多個地址歸併爲一個集合,通過集合對集合中所有地址進行統一調用。

         由於acl只能先定義再使用,所以建議放到配置文件最前端。

         在主配置文件/etc/named.conf最前端定義:

            acl ACL_NAME {

               IP;

               NET/PRELEN;

            };

            注意:網段只支持"/數字"的格式

            如:

               acl localnet {

                  172.18.31.0/24;

                  127.0.0.0/8;

                  172.18.30.7;

               };

         內置acl:

            none:空

            any:任意

            local:本機

            localnet:本機IP所屬的網路

         訪問控制指令:

            在主配置文件中options {  };中進行配置。

            allow-query {  }; 

              允許查詢的主機,白名單

            allow-transfer {  }; 

              允許向哪些主機做區域傳送,默認爲所有主機,建議設置爲僅允許從DNS服務器。

            allow-recursion {  }; 

              允許哪些主機可以向當前DNS服務器發起遞歸查詢請求,默認允許所有主機。

               使用時記得先註銷掉options{};中"recursion yes;"條目,此條目表示爲所有主機發起遞歸查詢。

            allow-update {  };

              DDNS,允許動態更新區域數據庫文件內容。


   bind view

      智能DNS。對不同來源的客戶端解析爲不同的IP地址。CDN就是利用這種原理。

      view VIEW_NAME {

         zone

         zone

         ...

      };

      如:

      view internal  {

         match-clients { 172.18.0.0/8; };

         zone "grub2.com"  IN {

            type master;

            file  "grub2.com/internal";

         };

      };

      

      view external {

         match-clients { any; };

         zone "grub2.com" IN {

            type master;

            file grub2.com/external";

         };

      };

      注意:view條目是從上到下匹配的,所以,應該將小範圍view放到前面。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章