1. 程式人生 > >DNS解析過程及相關配置檔案

DNS解析過程及相關配置檔案

參考文獻:http://linux.vbird.org/linux_server/0350dns.php

文章目錄

DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,DNS伺服器將使用者方便記憶的網址轉化為計算機可以識別的IP地址,這一過程就稱為域名解析。DNS協議執行在UDP協議之上,使用埠號53。

通常 Internet 主機域名的一般結構為:主機名.三級域名.二級域名.頂級域名。通常頂級域名又稱為根域,目前全球共有13個根伺服器,其中10個在美國,另外三個位於英國、瑞典、日本。

域名結構為根域、一級域名、二級域名…….最多可以有127個域名。
一級域名就是我們常見的網址的字尾,即com、cn、edu等等。

1. DNS解析過程

在這裡插入圖片描述

<1> 客戶機提交域名解析請求,並將該請求傳送給本地的域名伺服器.
當客戶端在前本地DNS域名伺服器請求前,首先會檢查自己的快取和本地DNS配置。
具體過程包括:

  1. 瀏覽器將會檢查快取中有沒有這個域名對應的解析過的IP地址,如果有該解析過程將會結束。瀏覽器快取域名也是有限制的,包括快取的時間、大小,可以通過TTL屬性來設定。
  2. 如果使用者的瀏覽器中快取中沒有,作業系統會先檢查自己本地的hosts檔案是否有這個網址對映關係,如果有,就先呼叫這個IP地址對映,完成域名解析。(windows中,hosts檔案目錄:c:\windows\system32\drivers\etc)
  3. 如果hosts裡沒有這個域名的對映,則查詢本地DNS解析器快取,是否有這個網址對映關係,如果有,直接返回,完成域名解析。3.如果hosts裡沒有這個域名的對映,則查詢本地DNS解析器快取,是否有這個網址對映關係,如果有,直接返回,完成域名解析。

<2> 當本地的域名伺服器收到請求後,就先查詢本地的快取.

如果有查詢的DNS 資訊記錄,則直接返回查詢的結果.

如果沒有該記錄,本地域名伺服器就把請求發給根域名伺服器.

<3> 根域名伺服器再返回給本地域名伺服器一個所查詢域的頂級域名伺服器的地址.

<4> 本地伺服器再向返回的域名伺服器傳送請求.

<5> 接收到該查詢請求的域名伺服器查詢其快取和記錄,如果有相關資訊則返回客戶機查詢結果,否則通知客戶機下級的域名伺服器的地址.

<6> 本地域名伺服器將查詢請求傳送給返回的DNS 伺服器.

<7> 域名伺服器返回本地伺服器查詢結果(如果該域名伺服器不包含查詢的DNS 資訊,查詢過程將重複<6>、<7>步驟,直到返回解析資訊或解析失敗的迴應).

<8> 本地域名伺服器將返回的結果儲存到快取,並且將結果返回給客戶機.

1.1 DNS解析過程中兩種模式

(1)遞迴查詢(適合DNS本地伺服器,DNS本地伺服器會將最終結果反饋給客戶)

遞迴查詢是一種DNS 伺服器的查詢模式,在該模式下DNS 伺服器接收到客戶機請求,必須使用一個準確的查詢結果回覆客戶機.如果DNS 伺服器本地沒有儲存查詢DNS 資訊,那麼該伺服器會詢問其他伺服器,並將返回的查詢結果提交給客戶機.

(2)迭代查詢(其他高階DNS伺服器,如跟域名伺服器,當本地DNS伺服器請求時,根域名伺服器再返回給本地域名伺服器一個所查詢域的頂級域名伺服器的地址)

DNS 伺服器另外一種查詢方式為迭代查詢,當客戶機發送查詢請求時,DNS 伺服器並不直接回複查詢結果,而是告訴客戶機另一臺DNS 伺服器地址,客戶機再向這臺DNS 伺服器提交請求,依次迴圈直到返回查詢的結果為止.

2.DNS伺服器型別

主名稱伺服器(primary name server)

主名稱伺服器從域管理員構造的本地磁碟檔案中載入域資訊,該檔案(區域檔案)包含著該伺服器具有管理權的一部分域結構的最精確資訊。主伺服器是一種權威性伺服器,因為它以絕對的權威去回答對其管轄域的任何查詢。

從名稱伺服器(secondary name server)

從名稱伺服器它可從主伺服器中複製一整套域資訊。區域檔案是從主伺服器中複製出來的,並作為本地磁碟檔案儲存在輔助伺服器中。這種複製稱為”區域檔案複製”。在輔助域名伺服器中有一個所有域資訊的完整拷貝,可以有權威地回答對該域的查詢。因此,輔助域名伺服器也稱作權威性伺服器。配置輔助域名伺服器不需要生成本地區檔案,因為可以從主伺服器中下載該區檔案。

唯快取記憶體名稱伺服器(caching-only server)

唯快取記憶體名稱伺服器可執行域名伺服器軟體,但是沒有域名資料庫軟體。它從某個遠端伺服器取得域名伺服器查詢的結果,一旦取得一個,就將它放在快取記憶體中,以後查詢相同的資訊時就用它予以回答。快取記憶體伺服器不是權威性伺服器,因為它提供的所有資訊都是間接資訊。

當BIND被配置為快取伺服器的時候,它只會迴應已快取的請求,並將所有其他的請求轉發到上游的 DNS 伺服器。快取名稱伺服器只需要.這個zone file檔案即可。

3.DNS伺服器安裝配置

CentOS:

yum install bind

3.DNS伺服器配置

3.1相關配置檔案

  • /etc/hosts  
    主機的固定DNS配置檔案,對於簡單的主機名解析(點分表示法),預設在請求DNS或NIS網路域名伺服器前,/etc/named.conf 通常會告訴程式先檢視此檔案。

  • /etc/resolv.conf  :指定檢視那個域名時,使用那個DNS伺服器(如DNS server指定根域名解析伺服器,client指定本地DNS 伺服器)

  • /etc/named.conf  DNS伺服器的執行主配置檔案。設定一般的name引數,指向該伺服器使用的域資料庫的資訊源、許可權過濾配置等;

  • /var/named/named.ca  根域名配置伺服器指向檔案。指向根域名配置伺服器,用於告訴快取伺服器初始化

  • /var/named/localhost.zone  localhost區正向域名解析檔案

用於將本地IP地址(127.0.0.1)轉換為本地回送IP地址(127.0.0.1)

  • /var/named/name.local  localhost區反向域名解析檔案。用於將localhost名字轉換為本地回送IP地址(127.0.0.1)

  • /etc/named.rfc1912.zones  區塊設定檔案,指定當前DNS伺服器管理的區域及區域資料解析資料配置檔案;

3.2 /etc/hosts:全域性本地域名解析配置

該檔案的預設配置:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

一般的配置格式:

IP hostname
192.169.49.121 node1

3.3 /etc/resolv.conf 配置檔案

# Generated by NetworkManager
search DHCP HOST
nameserver 192.168.0.1
nameserver 192.168.1.1

3.4 /etc/named.conf : nameserver總體配置

預設配置:

options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        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     { localhost; };

        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

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

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

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

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


options  定義全域性配置選項和預設值。包括:

  • listen-on port 53 { any; } :監聽在這部主機系統上面的哪個網路介面。預設是監聽在 localhost, 亦即只有本機可以對 DNS 服務進行查詢,那當然是很不合理。 所以這裡要將大括號內的資料改寫成 any。 記得, 因為可以監聽多個介面, 因此 any後面得要加上分號才算結束。另外, 這個專案如果忘記寫也沒有關係,因為預設是對整個主機系統的所有介面進行監聽的。
  • directory “/var/named” : 如果此檔案底下有規範到正、反解的 zone file 檔名時,該檔名預設應該放置在哪個目錄底下的意思。預設放置到 /var/named/ 底下。由於 chroot 的關係,最終這些資料庫檔案會被主動連結到/var/named/chroot/var/named/ 這個目錄。
  • allow-query { any; }: 這個是針對客戶端的設定,到底誰可以對我的 DNS 服務提出查詢請求的意思。原本的檔案內容預設是針對 localhost 開放而已, 我們這裡改成對所有的使用者開放,防火牆也得放行才行。不過,預設 DNS 就是對所有使用者放行,所以這個設定值也可以不用寫。
  • forward only :這個設定可以讓我們的 DNS 伺服器僅進行 forward,即使有 . 這個 zone file 的設定,也不會使用 . 的資料, 只會將查詢權交給上層 DNS 伺服器而已,是 cache only DNS 最常見的設定。
  • forwarders { 114.114.114.114; } :既然有 forward only,就要指定哪部上層 DNS 伺服器進行轉遞,這就是 forwarders 設定值的重要性。

logging  定義日誌內容和位置
zone  定義一個區
include  把其他的檔案包含到配置檔案中

acl  定義ip地址的訪問控制清單
control  定義rndc使用的控制通道
key  定義授權的安全金鑰
server  定義遠端服務的特徵

3.5 /etc/named.rfc1912.zones配置檔案:zone配置,指定每個zone的配置檔案路徑

// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};


3.6 /var/named/xxx.xx:某個zone解析對應的資料檔案,用來正向和反向的解析

3.6.1 DNS區域(ZONE)相關概念

dns區域是為了便於根據實際情況來分散DNS名稱管理工作的負荷,將DNS名稱空間劃分為區域(zone)來進行管理。一個區域就是DNS解析樹上一個獨立管理的子樹。

區域是DNS伺服器的管轄範圍, 是由DNS名稱空間中的單個區域或由具有上下隸屬關係的緊密相鄰的多個子域組成的一個管理單位. 因此, DNS名稱伺服器是通過區域來管理名稱空間的,而並非以域為單位來管理名稱空間,但區域的名稱與其管理的DNS名稱空間的域的名稱是一一對應的.

一臺DNS伺服器可以管理一個或多個區域, 而一個區域也可以由多臺DNS伺服器來管理(例如:由一個主DNS伺服器和多個輔助DNS伺服器來管理). 在DNS伺服器中必須先建立區域, 然後再根據需要在區域中建立子域以及在區域或子域 中新增資源記錄,才能完成其解析工作.

zone 通常具有以下幾種標誌:

  1. SOA:開始驗證 (Start of Authority);
  2. NS:名稱伺服器 (NameServer),後面記錄的資料是 DNS 伺服器的意思;
  3. A:地址 (Address),後面記錄的是 IP 的對應 (最重要)。

/var/named/named.localhost檔案配置:

$TTL 3H
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
~