DNS域名解析服務器

為什么需要DNS

域名解析服務,全稱Domain Name Service,簡稱為DNS。
DNS是一項基礎服務,那他有什么用呢?我們為什么需要他?
他最主要的作用是將全稱域名轉換成IP

試想一下,假如上網的時候,在瀏覽器上面的網址都是IP會是什么樣的一個狀況?
可能我們就需要像電話本一樣,把他們都記錄下來,需要訪問的時候再查看。
因為他們都是IP地址數字,記錄起來不像單詞一樣。

事實上也確實有這么做過,例如我們主機的hosts文件

[root@bc ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.2.201 node1 node1.bc.com
192.168.2.211 node1 node1.bc.com
192.168.2.221 node1 node1.bc.com
192.168.2.202 node2 node2.bc.com
192.168.2.212 node2 node2.bc.com
192.168.2.222 node2 node2.bc.com
192.168.2.203 node3 node3.bc.com
192.168.2.213 node3 node3.bc.com
192.168.2.223 node3 node3.bc.com
192.168.2.204 node4 node4.bc.com
192.168.2.214 node4 node4.bc.com
192.168.2.224 node4 node4.bc.com

這樣我們在瀏覽器中輸入node1.bc.com就會自動地轉換成192.168.2.201這個地址。
這樣的話,即使這個IP地址多么難記,我們要訪問的時候只需要鍵入這個地址就可以了。

那我們有hosts文件了,為什么需要DNS服務呢?

因為hosts文件就像電話簿一樣,是寫死的。
如果有一天,對方的IP地址換了。我們鍵入同樣的域名就訪問不了了。
這個就跟別人換了電話號碼,但是你的手機上的電話簿不會即時更新一樣。

而DNS則是一個在線同步的電話簿,對方改了電話號碼,我們也能夠連通。

當我們在瀏覽器上鍵入網址,名稱解析實際上做了什么?

1.首先,為了解析域名他回去才查找本地的hosts文件
假如hosts文件中有對應的條目,直接就解析成對應的IP地址訪問了。

2.hosts文件中沒有對應的記錄的時候,就會去查找本地的DNS服務器
假如你家連的是電信網絡,這個本地的DNS記錄一般是由電信維護的。
你訪問本地DNS服務器,DNS服務器有記錄并返回一個記錄。這個叫遞歸查詢
當然,遞歸查詢在DNS服務器中是可以關閉的。

3.本地DNS服務器中也沒有的對應記錄的時候,就回去找根服務器
根服務器是最頂級的域,總共有13個。
例如訪問www.example.com的時候:
a.hosts文件中沒有記錄
b.本地dns服務器中也沒有記錄
c.就會去找根服務器,從13個服務器中,從中找到管理com.域名的DNS服務器。

假如,管理com.的服務器告訴我們需要我們去找ns1.example.comDNS服務器。
最后本地dns在ns1.example.com中查找到www.example.com的域名記錄
這個過程,就叫做迭代查詢

舉個通俗的例子,學生問老師一個問題,老師告訴他答案。這叫遞歸查詢。
假如老師也不知道答案,這時老師去問其他老師。這叫迭代查詢。

DNS服務器中的資源類型

SOA記錄:Start Of Authority,起始授權記錄;

SOA記錄包含以下信息:
   (1) 當前區域的主DNS服務器的FQDN,也可以使用當前區域的名字
   (2) 當前區域管理員的郵箱地址
       但地址中不能使用@符號,一般用.替換@
       如bocai.example.com代表bocai@example.com
   (3)主從服務協調屬性的定義以及否定的答案的統一的TTL

區域解析庫有且僅能有一個SOA記錄,而必須為解析庫的第一條記錄;

SOA記錄的一個示例:
bc.com.  86400  IN  SOA  ns1.bc.com.    nsadmin.bc.com.     (
            2015042201        ;序列號
            2H                ;刷新時間
            10M               ;重試時間
            1W              ;過期時間
            1D              ;否定答案的TTL值
)

A記錄:internet Address
作用是將全稱域名解析成IP地址。

  node1.bc.com.      IN      A   192.168.2.201
  node2.bc.com.      IN      A   192.168.2.202

PTR記錄: PoinTeR
作用是將IP地址解析成全稱域名。

  4.3.2.1.in-addr.arpa.     IN  PTR     www.bc.com

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

NS記錄: Name Server,
作用是標明當前區域的DNS服務器

  bc.com.       IN      NS      ns1.bc.com.
  bc.com.       IN      NS      ns2.bc.com.

CNAME記錄:Canonical Name,別名記錄
作用是將多個名字映射到同一臺計算機。

    web.bc.com.             IN      CNAME       www.bc.com.
    mail.bc.com.            IN      CNAME         www.bc.com.
    www.bc.com.          IN     A            1.1.1.1

這樣的話,當在瀏覽器中鍵入web.bc.com或者mail.bc.com實際上都是訪問1.1.1.1
這樣有利于修改的時候可以只修改一條A記錄就達成目的。
MX記錄: Mail eXchanger,郵件交換器
記錄是郵件交換記錄,它指向一個郵件服務器,
用于電子郵件系統發郵件時根據收信人的地址后綴來定位郵件服務器。

  bc.com.       IN          MX  10  mx1.bc.com.

這個一般用來設置個性郵箱名字才使用的
例如你的個性域名是user1@bc.com,實際上是交給了mx1.bc.com這個郵件服務器去處理。

搭建兩個DNS服務器并配置主從復制

主機名 主機地址 角色
node1 192.168.2.201 主DNS服務器
node2 192.168.2.202 從DNS服務器

以上節點均關閉了iptables和selinux

一、修改配置文件:

1./etc/named.conf

這個配置文件用于設置全局配置

[root@node1 named]# vim /etc/named.conf

options {
        listen-on port 53 { 192.168.2.201;127.0.0.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; };

        dnssec-enable no;
        dnssec-validation no;
        #可以用于防止DNS毒化,但是需要購買證書。

}
#定義一個叫bc.com的域,也就是說這臺DNS服務器可以解析這個域
#這里的file使用了相對路徑,也就是需要在/var/named/bc.com.zone這個文件里面定義資源記錄。

注意:
listen-on port 寫成0.0.0.0并不能監聽在全部網址的53號端口上.
往后的相對路徑全部都是相對于directory而言的。

2./etc/named.rfc1912.zones

用于設置服務器可以解析的域

zone "bc.com" IN {
        type master;
        file "bc.com.zone";
};
3.定義資源記錄
[root@node1 named]# vim /var/named/bc.com.zone 
$TTL 86400
$ORIGIN bc.com.
@       IN      SOA     ns1.bc.com.     admin.bc.com (
                        2016042201
                        1H
                        5M
                        7D
                        1D )

                IN      NS      ns1
                IN      NS      ns2
ns1     IN      A               192.168.2.201
ns2     IN      A               192.168.2.202
node1   IN      A               192.168.2.201
node1   IN      A               192.168.2.211
node1   IN      A               192.168.2.221
node2   IN      A               192.168.2.202
node2   IN      A               192.168.2.212
node2   IN      A               192.168.2.222
node3   IN      A               192.168.2.203
node3   IN      A               192.168.2.213
node3   IN      A               192.168.2.223
node4   IN      A               192.168.2.204
node4   IN      A               192.168.2.214
node4   IN      A               192.168.2.224
*               IN      A       192.168.2.201

檢查腳本的語法錯誤(不檢查邏輯上的錯誤)
 [root@node1 named]# named-checkconf

假如沒有問題的話,不會有任何輸出。
下面我們刪除一個分號再運行一次檢查錯誤。

 [root@node1 named]# named-checkconf
  /etc/named.conf:57: missing ';' before '}'
沒有問題,就可以重啟服務了。
[root@node1 named]# service named restart
Redirecting to /bin/systemctl restart  named.service

需要注意的是,DNS的包名叫做bind,服務器名字叫做named
所以yum install named或者yum install dns也是沒有辦法安裝服務的。

二、測試能否解析域名
[root@node1 named]# dig -t A node1.bc.com @192.168.2.201

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @192.168.2.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12316
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
node1.bc.com.       86400   IN  A   192.168.2.211
node1.bc.com.       86400   IN  A   192.168.2.221
node1.bc.com.       86400   IN  A   192.168.2.201

;; AUTHORITY SECTION:
bc.com.         86400   IN  NS  ns2.bc.com.
bc.com.         86400   IN  NS  ns1.bc.com.

;; ADDITIONAL SECTION:
ns1.bc.com.     86400   IN  A   192.168.2.201
ns2.bc.com.     86400   IN  A   192.168.2.202

;; Query time: 0 msec
;; SERVER: 192.168.2.201#53(192.168.2.201)
;; WHEN: Wed Oct 05 03:20:59 EDT 2016
;; MSG SIZE  rcvd: 157
在輸出結果中,我們需要關注的幾個字段:
;; ANSWER SECTION:
node1.bc.com.       86400   IN  A   192.168.2.211
node1.bc.com.       86400   IN  A   192.168.2.221
node1.bc.com.       86400   IN  A   192.168.2.201

;; AUTHORITY SECTION:
bc.com.         86400   IN  NS  ns2.bc.com.
bc.com.         86400   IN  NS  ns1.bc.com.

;; ADDITIONAL SECTION:
ns1.bc.com.     86400   IN  A   192.168.2.201
ns2.bc.com.     86400   IN  A   192.168.2.202
首先我們的命令是向192.168.2.201這臺主機查詢node1.bc.com這個域名的IP地址。
dig -t A node1.bc.com @192.168.2.201

;; ANSWER SECTION:指的就是答案,也就是說查找得到的A記錄,也就是IP地址。
;; AUTHORITY SECTION:指的是,負責解析這個域的DNS服務器。
;; ADDITIONAL SECTION:指的是負責解析的服務器的A記錄,也就是IP地址。

三、配置node2為從服務器
從服務器安裝DNS服務的軟件包
  [root@node2 ~]# yum install named -y
修改全局配置文件
[root@node2 ~]# vim /etc/named.conf 
options {
        listen-on port 53 { 192.168.2.202;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 yes;

        dnssec-enable no;
        dnssec-validation no;
}

修改區域配置文件
  [root@node2 ~]# vim /etc/named.rfc1912.zones 
  zone "bc.com" IN {
        type slave;
        masters { 192.168.2.201; };
        file "slaves/named.bc.com.zone";
  };
重啟服務
  [root@node2 ~]# service named restart
  Redirecting to /bin/systemctl restart  named.service
查看監聽端口是否開啟
[root@node2 ~]# ss -tnlp
State       Recv-Q Send-Q    Local Address:Port      Peer Address:Port 
LISTEN      0      10        192.168.2.202:53          *:*              users:(("named",4689,21))
LISTEN      0      10        127.0.0.1:53              *:*              users:(("named",4689,20))
四、同步需要注意的幾點

1.主從的時間必須同步,否則容易出錯。
2.bind程序的版本應該保持一致;否則,應該從高主低;
3.dnssec功能的開啟會影響查詢。
4.主服務器一旦發生更改,主服務器會通知解析庫中有NS記錄的從服務器
5.防火墻徐璈開放53號端口的tcp和udp連接,UDP用于查詢,TCP用于同步。
6.可以通過手動修改SOA記錄中的序列號,手動+1,可以讓主從同步。
也就是說,假如主從不同步,可以從這幾個方面檢查有沒有設置好。

五、測試從服務器是否同步成功。
向node2查詢node1.bc.com這個域名的A記錄
[root@node1 named]# dig -t A node1.bc.com @192.168.2.202

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @192.168.2.202
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47173
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
node1.bc.com.       86400   IN  A   192.168.2.221
node1.bc.com.       86400   IN  A   192.168.2.211
node1.bc.com.       86400   IN  A   192.168.2.201

;; AUTHORITY SECTION:
bc.com.         86400   IN  NS  ns2.bc.com.
bc.com.         86400   IN  NS  ns1.bc.com.

;; ADDITIONAL SECTION:
ns1.bc.com.     86400   IN  A   192.168.2.201
ns2.bc.com.     86400   IN  A   192.168.2.202

;; Query time: 1 msec
;; SERVER: 192.168.2.202#53(192.168.2.202)
;; WHEN: Fri Dec 30 14:37:18 CST 2016
;; MSG SIZE  rcvd: 157

成功向node2這個DNS服務器查找到node1的A記錄。
因為從服務器只配置了一個zone,資源記錄是空的。
如果沒有從master同步到資源記錄,是解析不了的。

查看node2是否同步到記錄
[root@node2 ~]# vim  /var/named/slaves/named.bc.com.zone 

^@^@^@^B^@^@^@^AXet<86>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@S^@^A^@^F^@^@^@^AQ<80>^@^@^@^A^@^H^Bbc^Ccom^@^@5^Cns1^Bbc^Ccom^@^Eadmin^Bbc^Ccom^Bbc^Ccom^@x+<95>u^@^@^N^P^@^@^A,^@        :<80>^@^AQ<80>^@^@^@8^@^A^@^B^@^@^@^AQ<80>^@^@^@^B^@^H^Bbc^Ccom^@^@^L^Cns1^Bbc^Ccom^@^@^L^Cns2^Bbc^Ccom^@^@^@^@$^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@
^A*^Bbc^Ccom^@^@^Dà¨^Bé^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode1^Bbc^Ccom^@^@^Dà¨^Bé^@^Dà¨^Bó^@^Dà¨^BY^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode2^Bbc^Ccom^@^@^Dà¨^Bê^@^Dà¨^B?^@^Dà¨^BT^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode3^Bbc^Ccom^@^@^Dà¨^B?^@^Dà¨^B?^@^Dà¨^B?^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode4^Bbc^Ccom^@^@^Dà¨^Bì^@^Dà¨^B?^@^Dà¨^Bà^@^@^@&^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@^L^Cns1^Bbc^Ccom^@^@^Dà¨^Bé^@^@^@&^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@^L^Cns2^Bbc^Ccom^@^@^Dà¨^Bê

`如果不想是亂碼,zone可以定義成這樣。
zone "bc.com" IN {
        type slave;
        masters { 192.168.2.201; };
        masterfile-format text; 
        file "slaves/named.bc.com.zone";
};
同步而來的slave文件,顯得十分規范。
[root@node2 ~]# cat /var/named/slaves/named.bc.com.zone

$ORIGIN .
$TTL 86400      ; 1 day
bc.com                  IN SOA  ns1.bc.com. admin.bc.com.bc.com. (
                                2016122230 ; serial
                                3600       ; refresh (1 hour)
                                300        ; retry (5 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.bc.com.
                        NS      ns2.bc.com.
$ORIGIN bc.com.
*                       A       192.168.2.201
node1                   A       192.168.2.201
                        A       192.168.2.211
                        A       192.168.2.221
node2                   A       192.168.2.202
                        A       192.168.2.212
                        A       192.168.2.222
node3                   A       192.168.2.203
                        A       192.168.2.213
                        A       192.168.2.223
node4                   A       192.168.2.204
                        A       192.168.2.214
                        A       192.168.2.224
ns1                     A       192.168.2.201
ns2                     A       192.168.2.202

這樣、我們就配置出一個簡單的DNS主從服務器了。
由于篇幅的原因,下一次我們會將域名服務器的子域授權以及智能解析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互映射的一個分布式數據庫,能...
    一直在努力hard閱讀 4,699評論 3 19
  • 1. 概述 在網絡環境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應服務器獲取相應的...
    ghbsunny閱讀 2,968評論 0 7
  • 目錄: 一些基本概念主機名DNS名稱解析DNS 解析的后端存儲名稱解析總結 大規模域名解析的體系架構DNS 解析需...
    C86guli閱讀 12,542評論 3 34
  • 如今的我,也算是半個社會人了,畢竟學校的課程寥寥無幾,大多數時間都是在為工作而忙碌。 第一次 2016年下半年...
    輕熟階段閱讀 378評論 0 0
  • 這是一個始于校園的故事,非腐勿看~
    愛生活愛瑜洲閱讀 210評論 0 0