1. 程式人生 > >模擬構建DNS解析流程

模擬構建DNS解析流程

DNS 應用服務 Linux

背景

DNS初步認識

??DNS(Domain Name Server,域名系統)是互聯網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶方便的訪問互聯網,而不用去費力的記憶IP字符串。通過域名,最終可以得到該域名對應的IP地址的過程叫做域名解析。DNS協議運行在UDP洗衣上,使用的是53號端口。
??
??

DNS的重要性以及高可用(DNS冗余)

重要性

??
??DNS解析是目前互聯網大多數應用的實際的尋址方式;域名技術的不斷發展,和基於域名技術出現的新技術和新思路極大的豐富了互聯網的應用;域名現在起著互聯網的一種類似於身份標記的作用,具有唯一性,因此互聯網的全球化發展也使得域名也成為一種重要的資源

冗余(高可用)

??
??NS服務器在互聯網上承擔的如此重要的任務,因此其高可用性也成為了重點。在一個區域的資源記錄通過手動或自動方式更新到單個主名稱服務器(主DNS)上,主DNS服務器可以是一個或者多個區域的權威名稱服務器。
??冗余的DNS服務器做為同一區域中主服務器的備份服務器,防止主服務器無法訪問或者宕機。輔DNS服務器會定期與主DNS服務器通訊,進而保證它的區域信息文件保持最新。如果不是最新的信息,輔助DNS服務器就會從主DNS服務器上獲取最新的區域數據文件副本。這種將區域文件復制到多臺名稱服務器的過程稱為區域復制。

??
??

環境與架構圖

??

軟件環境

??由於本次試驗要模擬整個DNS的解析流程,因此需要的8臺虛擬機,在其中5臺機器上安裝bind程序提供域名解析服務,2臺虛擬機安裝httpd(web服務)提供網頁訪問服務,剩下的一臺虛擬機模擬客戶端進行DNS查詢。

註意:
??1.實驗前要關閉selinux,防火墻並且清空防火墻規則;
??2.由於機器數量較多最好保持時間同步,以免導致實驗無法正常運行;
??3.自建文件包註意權限問題,以防出現無法解析。

實驗整體架構圖與構建思路

技術分享圖片
??由於僅僅是作為模擬,因此這裏僅在douma.com的域名服務器做了主從備份,這裏僅僅提供正向解析,想了解反向解析的構建的話可以參考之前的文章http://blog.51cto.com/11010461/2105703

??
??

實驗記錄

??

搭建流程

??

基礎配置

??
環境清理
在所有主機上運行

            setenforce 0
            iptables -F
            iptables -X

搭建基礎服務
在準備做dns解析的服務器上安裝bind。

        yum install bind -y

在web服務器上配置httpd提供web服務

        #安裝httpd 135和136兩臺主機
        yum install httpd -y
        #構建相應頁面
        #192.168.99.135
        echo this is web1.douma.com ! > /var/www/html/index.html
        #192.168.99.136
        echo this is web2.douma.com ! > /var/www/html/index.html

技術分享圖片
啟動httpd 並且驗證是否能夠提供服務

        systemctl start httpd
        #使用curl命令訪問httpd
        curl + ip

技術分享圖片

搭建douma.com的dns服務並且配置主從

??
douma.com主服務器192.168.99.133
??
編輯主服務器的配置文件

    vim /etc/named.conf

對主配置文件做如下修改
技術分享圖片
編輯域文件,創建對douma.com域的解析

        vim /etc/named.rfc1912.zones

添加如下字段

zone "douma.com" IN {
        type master;
        file "douma.com.zone";
};

創建douma.com.zone文件

    cd /var/named/
    vim douma.com.zone  

編輯添入信息

$TTL 1D
@       IN      SOA     dns1.douma.com. admin.douma.com.(
                                        2018060205   ;序列號
                                        1D                  ;刷新時間
                                        2H                  ;重試時間
                                        3D                  ;過期時間
                                        1H)                 ;否定答案的TTL值
                       NS     dns1
                       NS     dns2
dns1     IN      A       192.168.99.133
dns2     IN      A       192.168.99.134
@         IN      A       192.168.99.135
@         IN      A       192.168.99.136
www     IN      A       192.168.99.135
www     IN      A       192.168.99.136
*           IN      CNAME   www

技術分享圖片
修改文件權限

chown :named douma.com.zone
chmod 640 douma.com.zone

技術分享圖片
啟動bind服務並且驗證是否可以解析

    systemctl start named
    systemctl status named

    #dig命令在bind-utils包中,如果安裝bind時候未綁定安裝可以後續手動安裝
    dig www.douma.com @192.168.99.133

技術分享圖片
正常解析
配置從服務器
??
從服務器192.168.99.134

編輯bind主配置文件

    vim /etc/named.conf

技術分享圖片

編輯域配置文件添加從服務器配置

vim /etc/named.rfc1912.zones

添加如下字段

zone "douma.com" IN {
        type slave;
        masters {192.168.99.133;};
        file "slaves/douma.com.zone";
};

技術分享圖片
這裏不用手動創建douma.com.zone,在服務啟動後會自動去主服務進行同步

啟動服務

systemctl start named

在從服務器上驗證是否能夠解析

dig www.douma.com @192.168.99.134

技術分享圖片

搭建com服務器

??
com地址是192.168.99.132
編輯配置文件

vim /etc/named.conf

技術分享圖片
編輯named.rfc1912.zones添加解析信息

vim /etc/named.rfc1912.zones

#添加以下信息
zone "com" {
        type master;
        file "com.zone";
};

創建com.zone

    cd /var/named/
    vim com.zone 

添加對應解析信息

    $TTL 1D
@       IN      SOA     dns.com.        admin.com. (
                                        2018010201
                                        1D
                                        2H
                                        3D
                                        3H)
                      NS      dns1
douma           NS      dns2
douma           NS      dns3
dns1              A       192.168.99.132
dns2              A       192.168.99.133
dns3              A       192.168.99.134
    # 修改權限
    chown :named com.zone
    chmod 640 com.zone

技術分享圖片
啟動服務並且驗證是否可以查詢

    systemctl start named
    dig www.douma.com @192.168.99.132

技術分享圖片

搭建根服務器

??
根服務器的IP地址192.168.99.131
編輯/etc/named.conf

        vim /etc/named.conf

由於的模擬根服務器,因此在它之上不能有其他的dns服務器,要註釋掉配置文件最後的根域
技術分享圖片
技術分享圖片
創建根域定義

    vim /etc/named.rfc1912.zones

添加根域信息

    zone "." {
        type master;
        file "root.zone";
};

創建域文件

cd /var/named/
vim root.zone

編輯根解析庫

$TTL 1D
@       IN      SOA     dns1.   admin. (
                                20180601
                                1D
                                2H
                                3D
                                1H)
                    NS      dns1
com             NS      dns2
dns1            A        192.168.99.131
dns2            A        192.168.99.132

修改文件權限

chown :named root.zone
chmod 640 root.zone 

啟動服務並做驗證

systemctl start named
dig www.douma.com @192.168.99.131

技術分享圖片

配置ISP域名緩存服務器

??
ISP地址192.168.99.130
編輯/etc/named.conf文件

    vim /etc/named.conf

技術分享圖片
由於是自己搭建的模擬DNS運行的系統,因此需要修改named.ca文件,將根服務器指向自己構建的根,同時由於僅僅是ISP的服務器,無需定義域,僅僅負責查詢即可。
編輯named.ca文件

        vim /var/named/
        vim named.ca

技術分享圖片

啟動服務並進行驗證

systemctl start named
dig www.douma.com @192.168.99.130

技術分享圖片

Client端設置

??
客戶端僅需要將DNS指向ISP服務器即可

vim /etc/resolv.conf
#添加dns信息
nameserver 192.168.99.130

驗證是否可以解析

dig www.douma.com @192.168.99.130

技術分享圖片

使用curl命令請求web端

    curl www.douma.com

dns的解析是簡單的輪詢
技術分享圖片

總結

??
??雖然DNS的輪詢也是一種負載均衡的方式,成本極低,但是其缺點同樣明顯,DNS作為簡單輪詢無法理解後端服務器的承載能力;輪詢過程僅僅負責將請求轉交,一旦轉交的目標主機故障仍會轉交,無法容錯;要保證數據最新就要設置較小的刷新時間,但會造成額外的DNS流量開銷;一旦某臺服務器宕機,修改DNS設置後,仍需一段時間才能生效。

??DNS輪詢受到各方的影響比較嚴重,並不能算一種很好的負載均衡技術

https://web.stanford.edu/~riepel/lbnamed/
在 named.conf 中可以設置 bind 的 round-robin 的給出結果的順序:

options {
rrset-order { order random; };
};

rrset-order 支持三個參數:fixed, random, cyclic 。
fix 會將多個A記錄按配置文件的順序固定給出;
random 會隨機給出;
cyclic 會循環給出。

模擬構建DNS解析流程