DNS服務原理與基礎

前言

又到了日常週末學習總結。
linux深度學習,進入服務架設階段。
這一篇主要講到DNS服務的原理,與一些基礎DNS服務的功能。
應付日常生活與非DNS服務提供公司,足矣。
爲什麼會有DNS服務的出現?
整個internet大家庭中連接了數以億記的服務器,個人主機,其中大部分的網站、郵件服務等服務器都是用了域名形式的地址,如www.google.com、mail.163.com等。很顯然這種地址形式要比使用64.233.289.147、202.108.33.74的IP地址形式更加直觀,更加容易被用戶記住。

國際慣例,我先講一下什麼是DNS服務基本原理。(轉載至百度百科,原諒我不想翻牆使用維基百科)

DNS服務器

    DNS服務器和域名服務器同義。

    DNS(Domain Name Server,域名服務器)是進行域名(domain name)和與之相對應的IP地址 
(IP address)轉換的服務器。DNS中保存了一張域名(domain name)和與之相對應的IP地址 (IP 
address)的表,以解析消息的域名。 域名是Internet上某一臺計算機或計算機組的名稱,用於在數據
傳輸時標識計算機的電子方位(有時也指地理位置)。域名是由一串用點分隔的名字組成的,通常包含組織名,
而且始終包括兩到三個字母的後綴,以指明組織的類型或該域所在的國家或地區

    DNS是計算機域名系統 (Domain Name System 或Domain Name Service) 的縮寫,它是由域名
解析器和域名服務器組成的。域名服務器是指保存有該網絡中所有主機的域名和對應IP地址,並具有將域名轉
換爲IP地址功能的服務器。其中域名必須對應一個IP地址,一個IP地址可以有多個域名,而IP地址不一定有
域名。域名系統採用類似目錄樹的等級結構。域名服務器通常爲客戶機/服務器模式中的服務器方,它主要有
兩種形式:主服務器和轉發服務器。將域名映射爲IP地址的過程就稱爲“域名解析”。

DNS原理

DNS服務,往最簡單易懂的方向解釋,其實就是:
別人把一個IP地址和一個域名地址綁定到一起,
而我想要訪問這個IP,我可以訪問這個域名,通過DNS解析找到這個IP。
(這就是DNS最基本功能之一的正向解析)
而我想知道這個IP他到底綁定了多少個域名,可以通過DNS解析找個這些個域名。
(DNS另外一個比較少見的功能,反向解析)

基本概念

DNS 系統在網絡中的作用就是維護着一個地址數據庫,其中記錄了各種主機域名;
與 IP地址的對應關係,以便爲客戶程序提供正向或反向的地址查詢服務,
即正向解析與反向解析

(1)正向解析:根據域名查 IP 地址,是 DNS 服務最常用的基本功能 
(2)反向解析:根據 IP 查域名,不是很常用,應用於例如反垃圾郵件的驗證等 

每臺 DNS 服務器都負責管理一個有限範圍(一個或幾個域)內的主機域名和 IP 地址的對應關係,這些特定的 DNS 域或 IP 地址段稱爲“zone”(區域)。

常見DNS分類

據地址解析的方向不同,DNS 區域相應的分爲正向區域(包含域名到 IP 地址的解析記錄)
和反向區域(包含 IP 地址到域名的解析記錄)。

根據管理的區域地址數據的來源不同,DNS 系統可以分爲不同的類型:

(1)緩存域名服務器 
    只提供域名解析結果的緩存功能,目的在於提高數據查詢速度和效率,但是沒有自己控制的區域地址數據。
構建緩存域名服務器時,必須設置根域或指定其他 DNS 服務器作爲解析來源。 
(2)主域名服務器 
    維護某一個特定 DNS 區域的地址數據庫,對其中的解析記錄具有自主控制權,是指定區域中唯一存在
的權威服務器、官方服務器。構建主域名服務器時,需要自行建立所有負責區域的地址數據文件。 
(3)從域名服務器 
    與主域名服務器提供完全相同的 DNS 解析服務,通常用於 DNS 服務器的熱備份。對客戶機來說,
無論使用主域名服務器還是從域名服務器,查詢結果都是一樣的。
    從DNS服務器:從主服務器或從服務器“複製”(區域傳輸)解析
庫副本
    序列號:     解析庫版本號,主服務器解析庫變化時,其序列遞增。
    刷新時間間隔:從服務器從主服務器請求同步解析的時間間隔。
    重試時間間隔:從服務器請求同步失敗時,再次嘗試時間間隔。
    過期時長:   從服務器聯繫不到主服務器時,多久後停止服務。

注意:“通知”機制,主服務器解析庫發生變化時,會主動通知從服務器

DNS查詢方式

DNS查詢類型:遞歸查詢、迭代查詢

遞歸查詢:
    遞歸查詢是最常見的查詢方式,域名服務器將代替提出請求的客戶機(下級DNS服務器)進行域名查詢,
若域名服務器不能直接回答,則域名服務器會在域各樹中的各分支的上下進行遞歸查詢,最終將返回查詢結果
給客戶機,在域名服務器查詢期間,客戶機將完全處於等待狀態。
    當收到DNS工作站的查詢請求後,DNS服務器在自己的緩存或區域數據庫中查找,如找到則返回結果,
如找不到,返回錯誤結果。即DNS服務器只會向DNS工作站返回兩種信息:要麼是在該DNS服務器上查找到的結果,
要麼是查詢失敗。該DNS工作站自行向該DNS服務器詢問。“遞歸”的意思是有來有往,並且來、往的次數是一致的。
一般由DNS工作站提出的查詢請求便屬於遞歸查詢。
    由於遞歸查詢是兩者之間的,所以通常查詢起來高效快捷,能最快應答成功或失敗的解析,然而無法成功解析
所有域名。一般發生在客戶端與服務器間,也特殊情況是dns服務器與dns服務器之間。同時與迭代查詢相對.
迭代查詢:
    迭代查詢又稱重指引,當服務器使用迭代查詢時能使其他服務器返回一個最佳的查詢點提示或主機地址,
若此最佳的查詢點中包含需要查詢的主機地址,則返回主機地址信息,若此時服務器不能夠直接查詢到主機地址,
則是按照提示的指引依次查詢,直到服務器給出的提示中包含所需要查詢的主機地址爲止,一般每次指引都會更
靠近根服務器(向上),查尋到根域名服務器後,則會再次根據提示向下查找。B訪問CDE、F、G,
都是迭代查詢,首先B 訪問C,得到了提示訪問D的提示信息後,開始訪問DD又返回給B提示信息,
告訴B應該訪問E,依次類推。

DNS基礎知識

關於一些資源解析庫的基礎知識。
區域解析庫是由衆多RR組成的。

資源記錄

資源記錄:Resource Record, RR
記錄類型:A, AAAA, PTR, SOA, NS, CNAME, MX

SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄而必須爲解析庫的第一條記錄;
A:internet Address,作用,FQDN --> IP
AAAA: FQDN --> IPv6
PTR: PoinTeR,IP --> FQDN
NS: Name Server,專用於標明當前區域的DNS服務器
CNAME:Canonical Name,別名記錄
MX: Mail eXchanger,郵件交換器

資源記錄定義的格式

語法:name [TTL] IN rr_type value
注意:
(1) TTL可從全局繼承;
(2) @可用於引用當前區域的名字;
(3) 同一個名字可以通過多條記錄定義多個不同的值;此時DNS服務器會以輪詢方式響應;
(4) 同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;
此僅表示通過多個不同的名字可以找到同一個主機而已

SOA記錄

SOA:
    name: 當前區域的名字,例如“magedu.com.”;
    value: 有多部分組成
        (1) 當前區域的主DNS服務器的FQDN,也可以使用當前區域的名字;
        (2) 錄前區域管理員的郵箱地址;但地址中不能使用@符號,一般用.替換,
        例如linuxedu.magedu.com;
        (3) (主從服務協調屬性的定義以及否定的答案的統一的TTL)

例子:

magedu.com.     86400   IN  SOA     ns.magedu.com.  nsadmin.magedu.com.     (
                2015042201  ;序列號
                2H          ;刷新時間
                10M         ;重試時間
                1W          ;過期時間
                1D          ;否定答案的TTL值
)

NS記錄

NS: 
    name: 當前區域的名字
    value: 當前區域的某DNS服務器的名字,例如ns.magedu.com.;注意:一個區域可以有多個NS記錄;
例如:
    magedu.com.     IN      NS      ns1.magedu.com.
    magedu.com.     IN      NS      ns2.magedu.com.

注意:
(1) 相鄰的兩個資源記錄的name相同時,後續的可省略;
(2) 對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄;

MX記錄

MX: 
    name: 當前區域的名字
    value: 當前區域的某郵件服務器(smtp服務器)的主機名;

例如:
    magedu.com.     IN      MX  10  mx1.magedu.com.
                    IN      MX  20  mx2.magedu.com.

注意:
(1) 對MX記錄而言,任何一個MX記錄後面的服務器名字,都應該在後續有一個A記錄;
(2)一個區域內,MX記錄可有多個;但每個記錄的value之前應該有一個數字(0-99),
表示此服務器的優先級;數字越小優先級越高.

A記錄

A:
    name: 某主機的FQDN,例如www.magedu.com.
    value: 主機名對應主機的IP地址;
例如:
    www.magedu.com.     IN      A   1.1.1.1
    www.magedu.com.     IN      A   1.1.1.2

    mx1.magedu.com.     IN      A   1.1.1.3
    mx2.magedu.com.     IN      A   1.1.1.3

注意:避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址。

    *.magedu.com.       IN      A   1.1.1.4

AAAA記錄

AAAA:
    name: FQDN
    value: IPv6

PTR記錄

PTR:
    name: IP,有特定格式,把IP地址反過來寫,1.2.3.4,要寫作4.3.2.1;而有特定後綴:
    in-addr.arpa.,所以完整寫法爲:4.3.2.1.in-addra.arpa.
    value: FQDN

注意:FQDN指的是:Fully Qualified Domain Name 完全合格域名/全稱域名

例如:
    4.3.2.1.in-addr.arpa.   IN  PTR     www.magedu.com
    簡寫成:
        4   IN  PTR     www.magedu.com.

注意:網絡地址及後綴可省略;主機地址依然需要反着寫。

CNAME記錄

CNAM:
    name: 別名的FQDN
    value: 正工名字的FQDN;
例如:
    web.magedu.com.     IN      CNAME   www.magedu.com.

DNS服務基礎搭建

BIND的安裝配置:
dns服務,程序包名bind,程序名named。

bind:
服務腳本:/etc/rc.d/init.d/named
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
解析庫文件:/var/named/ZONE_NAME.ZONE

    注意:
        (1) 一臺物理服務器可同時爲多個區域提供解析;
        (2) 必須要有根區域文件;named.ca
        (3) 應該有兩個(如果包括ipv6的,應該更多)實現localhost和本地迴環地址的解析庫;

rndc: remote name domain controller,默認與bind安裝在同一主機,
且只能通過127.0.0.1來連接named進程;提供輔助性的管理功能;
端口:953/tcp
主配置文件:
    全局配置:options {}
    日誌子系統配置:logging {}
    區域定義:本機能夠爲哪些zone進行解析,就要定義哪些zone;
        zone "ZONE_NAME" IN {}

注意:任何服務程序如果期望其能夠通過網絡被其它主機訪問,
至少應該監聽在一個能與外部主機通信的IP地址上.

緩存名稱服務器的配置:
    監聽外部地址即可;

dnssec: 
    建議測試時關閉dnssec;

主DNS名稱服務器

(1):在主配置文件中定義區域.

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

注意:
type類型有 主:從:根:轉發。
file指區域解析庫文件的文件名,默認放在/var/named/目錄下。

(2):定義區域解析庫文件

出現的內容:
    宏定義;
    資源記錄;
示例:
    $TTL 86400
    $ORIGIN magedu.com.
    @   IN  SOA ns1.magedu.com. admin.magedu.com (
                2015042201
                1H
                5M 
                7D
                1D )
        IN  NS      ns1
        IN  NS      ns2
        IN  MX 10   mx1
        IN  MX 20   mx2
    ns1 IN  A   172.16.100.11
    ns2 IN  A   172.16.100.12
    mx1 IN  A   172.16.100.13
    mx2 IN  A   172.16.100.14
    www IN  A   172.16.100.11
    www IN  A   172.16.100.12
    ftp IN  CNAME   www

注意:
SOA記錄裏面小括號裏面的那五行分別指的是 序列號;刷新時間;重試時間;
過期時間;否定答案時間的TLL值。

配置主DNS名稱服務器

現在,我們來做個簡單的實驗…
搭建一個最普通的正向解析的DNS名稱服務器。
並起到簡單的輪詢效果。
要用到專門的測試命令dig,dig用於測試dns系統,因此,不會查詢hosts文件進行解析。
現在我準備了了一臺CentOS6.9的虛擬機,IP 是172.18.25.91
記得關閉防火牆,還有SELINUX。
開始實驗:
(1)用yum安裝bind,並啓動named服務

[root@YGL ~]# yum install bind
[root@YGL ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]

(2)編輯named的全局配置文件
在options模塊中註釋掉兩行。

[root@YGL ~]# vim /etc/named.conf 
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; };
        recursion yes;

注意:
註釋掉第一個,是因爲,他默認是監聽在本地端口上,這樣是不能提供服務的。
可以改成把IP改成localhost,或是你指定的某個IP。註釋後默認監聽在所有本地端口上。
註釋掉第二個,是因爲它裏面寫了localhost,指明瞭只能被本機所使用查詢功能,
註釋後默認所有IP都可以使用,也可以把localhost改成any

(3):編輯named.rfc1912.zones配置文件
我們這裏添加一個對magedu.com的區域解析模塊。

[root@YGL ~]# vim /etc/named.rfc1912.zones

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

注意:找個地方插入的時候,別插入到別的區域定義塊裏面了,還有格式,標點符號,一個都不能少。

(4)現在進入/var/named/目錄下對增加一個區域解析庫文件。

[root@YGL named]# vim magedu.com.zone
$TTL 86400 
$ORIGIN magedu.com.
@   IN  SOA dns1.magedu.com. admin.magedu.com. (
                    2017091909 ; serial
                    86400      ; refresh (1 day)
                    3600       ; retry (1 hour)
                    604800     ; expire (1 week)
                    10800      ; minimum (3 hours)
                    )
magedu.com. NS      dns1
magedu.com. NS      dns2
dns1        A       6.6.6.6
dns2        A       7.7.7.7
www         A       6.6.6.6
www         A       7.7.7.7 

(5)在另外一臺機器上使用dig命令來進行測試

[root@YGL ~]# yum install bind-utils
[root@YGL ~]# dig www.magedu.com @172.18.25.91

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.magedu.com @172.18.25.91
;; global options: +cmd
;; connection timed out; no servers could be reached
[root@YGL ~]# dig www.magedu.com @172.18.25.91

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.magedu.com @172.18.25.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52878
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   7.7.7.7
www.magedu.com.     86400   IN  A   6.6.6.6

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  dns2.magedu.com.
magedu.com.     86400   IN  NS  dns1.magedu.com.

;; ADDITIONAL SECTION:
dns1.magedu.com.    86400   IN  A   6.6.6.6
dns2.magedu.com.    86400   IN  A   7.7.7.7

;; Query time: 0 msec
;; SERVER: 172.18.25.91#53(172.18.25.91)
;; WHEN: 四 9月 21 03:05:50 CST 2017
;; MSG SIZE  rcvd: 145

再次測試會發現IP地址的順序發生了變化

[root@YGL named]# dig www.magedu.com @172.18.25.91

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.magedu.com @172.18.25.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6284
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   7.7.7.7
www.magedu.com.     86400   IN  A   6.6.6.6

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  dns2.magedu.com.
magedu.com.     86400   IN  NS  dns1.magedu.com.

;; ADDITIONAL SECTION:
dns1.magedu.com.    86400   IN  A   6.6.6.6
dns2.magedu.com.    86400   IN  A   7.7.7.7

;; Query time: 0 msec
;; SERVER: 172.18.25.91#53(172.18.25.91)
;; WHEN: Sat Sep 23 13:46:54 2017
;; MSG SIZE  rcvd: 134

[root@YGL named]# dig www.magedu.com @172.18.25.91

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.magedu.com @172.18.25.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49330
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.            IN  A

;; ANSWER SECTION:
www.magedu.com.     86400   IN  A   6.6.6.6
www.magedu.com.     86400   IN  A   7.7.7.7

;; AUTHORITY SECTION:
magedu.com.     86400   IN  NS  dns2.magedu.com.
magedu.com.     86400   IN  NS  dns1.magedu.com.

;; ADDITIONAL SECTION:
dns1.magedu.com.    86400   IN  A   6.6.6.6
dns2.magedu.com.    86400   IN  A   7.7.7.7

;; Query time: 0 msec
;; SERVER: 172.18.25.91#53(172.18.25.91)
;; WHEN: Sat Sep 23 13:46:55 2017
;; MSG SIZE  rcvd: 134

注意:
配置改好了,最好別重啓服務,可以使用 rndc reload來重載主配置文件和區域解析庫文件,
還有有時候解析有問題,可能是服務器上緩存的問題,可以使用rndc flush來清理緩存,
但是這在生產中是十分危險的事情,丟失緩存會讓很多工作變得異常緩慢。

配置主從服務器

從服務器配置起來十分簡單,應該就是下面的這些要點了。

主從複製:
    1、應該爲一臺獨立的名稱服務器;
    2、主服務器的區域解析庫文件中必須有一條NS記錄是指向從服務器;
    3、從服務器只需要定義區域,而無須提供解析庫文件;解析庫文件應該放置於/var/named/slaves/目錄中;
    4、主服務器得允許從服務器作區域傳送;
    5、主從服務器時間應該同步,可通過ntp進行;
    6bind程序的版本應該保持一致;否則,應該從高,主低;

我從服務器準備的是CentOS7.3的機器,IP是172.18.25.51

首先要安裝基礎包

[root@YGL ~]# yum install bind
[root@YGL ~]# yum install bind-utils

然後去全局修改配置
修改後的部分

[root@YGL ~]# vim /etc/named.conf 
options {
    listen-on port 53 { 172.18.25.51;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     { any; };

//  recursion no;

//  dnssec-enable no;
//  dnssec-validation no;

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

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

到這裏其實已經成爲了一個緩存名稱服務器,
接下來我們要把它配置成從名稱服務器

我們在區域解析文件中加入我們要求的配置

[root@YGL ~]# vim /etc/named.rfc1912.zones 
找個地方,比如最後面插入
zone "magedu.com" IN {
        type slave;
        masters { 172.18.25.91; };
        file "slaves/magedu.com.zone";
};

注意:一定要寫masters!就算只有一個。
還有注意一定要在主服務器上加入一個NS記錄是指向從服務器的。
不然是不會通知從服務器,我已經被修改過來,快來同步啊的通知的…

這是在主的那臺機器上指向從服務器的操作,修改配置文件
[root@YGL named]# vim /var/named/magedu.com.zone 
$TTL 86400
$ORIGIN magedu.com.
@       IN      SOA     dns1.magedu.com. admin.magedu.com. (
                                        2017091909 ; serial
                                        86400      ; refresh (1 day)
                                        3600       ; retry (1 hour)
                                        604800     ; expire (1 week)
                                        10800      ; minimum (3 hours)
                                        )
                NS              dns1
                NS              dns2
                NS              dns3
dns1            A               6.6.6.6
dns2            A               7.7.7.7
dns3            A               172.18.25.51
www             A               6.6.6.6
www             A               7.7.7.7
www             A               172.18.25.51

我們在從服務器上使用同步命令
查詢是否把區域庫解析文件同步過來
查看日誌

[root@YGL ~]# rndc reload
server reload successful
[root@YGL ~]# ls /var/named/slaves/
magedu.com.zone
[root@YGL ~]# tail /var/log/messages
Sep 21 04:14:42 YGL named[5065]: managed-keys-zone: sync_keyzone:dns_journal_open -> unexpected error
Sep 21 04:14:42 YGL named[5065]: managed-keys-zone: unable to synchronize managed keys: unexpected error
Sep 21 04:14:42 YGL named[5065]: reloading zones succeeded
Sep 21 04:14:42 YGL named[5065]: all zones loaded
Sep 21 04:14:42 YGL named[5065]: running
Sep 21 04:14:42 YGL named[5065]: zone magedu.com/IN: Transfer started.
Sep 21 04:14:42 YGL named[5065]: transfer of 'magedu.com/IN' from 172.18.25.91#53: connected using 172.18.25.51#56166
Sep 21 04:14:42 YGL named[5065]: zone magedu.com/IN: transferred serial 2017091909
Sep 21 04:14:42 YGL named[5065]: transfer of 'magedu.com/IN' from 172.18.25.91#53: Transfer completed: 1 messages, 11 records, 263 bytes, 0.001 secs (263000 bytes/sec)

從日誌上我們可以看到清晰的請求傳送的過程,還有傳送的過程。
到這裏基礎的主從服務器就建設好了。
嗯這裏還有一點要注意的,
CentOS6上傳送過來的庫文件可以之間看到,CentOS7上傳送過來的是加密後的文件…
還有一定要同步時間的。很重要。
還有並不是要等到時間到了才傳送,而是隻要主的區域解析庫被修改了,那麼主就會跑過來通知從過來同步數據了,
而且是增量傳送,就是隻同步修改的那部分。我有點囉嗦了,上文好像已經說到了,但是真的很重要!!!

一個稍微全面點的實驗

我們來模擬一個完整的網絡中的DNS服務器的各種功能。
就是你想法訪問一個網站所經過的DNS服務器的簡略版模擬網絡。
我先上傳一張關於這個模擬過程的草圖…
之前做實驗的機器都恢復快照,重新安裝bind、bind-utils等工具。
下面的實驗,
有模擬根服務器
有多成DNS服務器,比如com域服務器。
還有主從服務器。
這裏寫圖片描述
嗯我們開始實驗。
實驗至少需要6臺服務器。如上圖,安裝好各項工具。
Bind
Openssh-clients
關掉所有機器的防火牆還有SELINUX
systemctl disable firewalld
systemctl stop firewalld
setenforce 0
iptables -X
iptables -F
權限很重要!!!!所屬組很重要!!!
第一步我先搭建 172.18.1.1的DNS服務器,並用他做爲主服務器
1.編輯named的全局配置文件

vim /etc/named.conf
    (直接註釋掉下面兩行,其他的不用變。) 
    options {
    //  listen-on port 53 { localhost; };
        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;172.18.25.1; };

2.編輯named.rfc1912.zones配置文件

    [ root@ygl /etc ]# cat named.rfc1912.zones 
    在裏面插入(注意格式,不要少了任何東西,很重要!!!)
        zone "magedu.com" {
            type master;
            file "magedu.com.zone";
        };

3.現在進入/var/named/目錄下對庫進行編輯
首先我們要創建magedu.com.zone文件

        [ root@ygl /var/named ]# cat magedu.com.zone 
        $TTL 86400 ; 1 day
        @ IN SOA    dns1.magedu.com. admin.magedu.com. (
                    2017091909 ; serial
                    86400      ; refresh (1 day)
                    3600       ; retry (1 hour)
                    604800     ; expire (1 week)
                    10800      ; minimum (3 hours)
                    )
                NS  dns1.magedu.com.
        dns1        A   172.18.1.1
        dns2        A   172.18.25.51
        websrv      A   6.6.6.6
        www     CNAME   websrv  

4.現在我們要編輯named.ca文件,讓他所認爲的根是我指定的根。
最後刪掉多餘的東西,只留下一行記錄,並修改。

        [ root@ygl /var/named ]# cat named.ca 
        ;       This file holds the information on root name servers needed to
        ;       initialize cache of Internet domain name servers
        ;       (e.g. reference this file in the "cache  .  <file>"
        ;       configuration file of BIND domain name servers).
        ;
        ;       This file is made available by InterNIC 
        ;       under anonymous FTP as
        ;           file                /domain/named.cache
        ;           on server           FTP.INTERNIC.NET
        ;       -OR-                    RS.INTERNIC.NET
        ;
        ;       last update:    December 01, 2015
        ;       related version of root zone:   2015120100
        ;
        ; formerly NS.INTERNIC.NET
        ;
        .                        3600000      NS    A.ROOT-SERVERS.NET.
        A.ROOT-SERVERS.NET.      3600000      A     172.18.25.1

5.現在我們主的DNS機器已建好了
使用SCP把named.ca文件發像其他的幾個DNS服務器,偷懶做法,直接覆蓋。

[ root@ygl /var/named ]# scp named.ca 172.18.25.51:/var/named/
[ root@ygl /var/named ]# scp named.ca 172.18.25.52:/var/named/
[ root@ygl /var/named ]# scp named.ca 172.18.25.53:/var/named/
總共4個DNS服務器,都已經知道根了。
[ root@ygl /var/named ]# systemctl restart named

6.現在我們搭建從的服務器
和之前一樣,註釋掉named.conf裏面的兩行

//  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; };

現在修改named.rfc1912.zones 文件
插入

    zone "magedu.com" IN {
        type slave;
        masters {172.18.1.1;};
        file "slaves/magedu.com.zone";
    };

7.檢查從DNS服務是否能從主DNS那裏拿到magedu.com.zone文件
記得每一步做好後都使用dig命令進行檢查

    [root@YGL named]# ls
    data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
    [root@YGL named]# cd slaves/
    [root@YGL slaves]# ls
    magedu.com.zone

8.現在我們要搭建com DNS服務器了(IP 172.18.25.52的機器)
和之前一樣,把named.conf裏面的兩行註釋掉。

[root@YGL etc]# cat named.conf 
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; };

再到named.rfc1912.zones 裏面插入

[root@YGL etc]# cat named.rfc1912.zones 
    zone "com" IN {
        type master;
        file "com.zone";
    };

再進入到/var/named/目錄創建com.zone文件

[root@YGL named]# cat com.zone 
$TTL 86400 ; 1 day
@ IN SOA    dns1.magedu.com. admin.magedu.com. (
            2017091909 ; serial
            86400      ; refresh (1 day)
            3600       ; retry (1 hour)
            604800     ; expire (1 week)
            10800      ; minimum (3 hours)
            )
        NS  dns1
magedu      NS  dns2
magedu      NS  dns3
dns1        A   172.18.25.52
dns2        A   172.18.1.1
www     CNAME   websrv  

再次到客戶端取檢驗,直接dig IP @com服務器,
還可以檢測,主從服務器是否正常,比如把主的服務器給down了。

9.現在我們再取搭建離客戶最近的那臺服務器。
依然,我們還是先編輯named.conf文件

//  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; };

依然是那兩個被註釋了
但是遞歸查詢要被註釋

//  recursion yes;

還有連個關於安全的改成no

    dnssec-enable no;
    dnssec-validation no;

然後就不用在編輯了。
因爲是隻能找根了,我就不配置轉發了…

10.我們現在再來編輯根服務器
首先註釋named.conf裏面的那兩行

//  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; };

然後再,因爲決定自己是根了,不用再去尋找根了,註釋掉尋找的那幾行。

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

再然後,編輯name.rfc1912.zone文件
創建root.zone文件

[ root@centos6 /var/named ]# cat root.zone 
$TTL 86400 ; 1 day
@ IN SOA    dns1 admin.magedu.com. (
            2017091909 ; serial
            86400      ; refresh (1 day)
            3600       ; retry (1 hour)
            604800     ; expire (1 week)
            10800      ; minimum (3 hours)
            )
        NS  dns1
com     NS  dns2
dns1        A   172.18.25.1
dns2        A   172.18.25.52

每個服務修改了配置文件之後都要重啓服務,
好了到這裏就可以取dig你的DNS服務器去尋找www.magedu.com了
試驗完成。

最後

其實一個DNS服務可以講好多,我這裏只是一些最最最基本,基礎的部分了,
還有身邊異地災備,分佈式緩存加速,CDN加速,智能ACL DNS服務…
還有很多很多加深的知識,IT行業這條路是看不到頭的…
但是我們又不是準備去那些DNS服務商的公司去工作…(準備去的當我沒說,那還要學的東西夠多…)
我們一般情況下,會用會排錯,會基礎修改,足矣…
這篇文章就到這了.






ღ ღ ღ 如果覺得文章對您有用,不妨贊一下ღ ღ ღ

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