單臺DNS服務器搭建(BIND)

1、理論層面

1. DNS的出現及演化

  網絡出現的早期是使用IP地址通信的,那是就幾臺主機通信。可是隨着接入網絡主機的增多,這種數字標識的地址很是不便於記憶,UNIX上就出現了創建一個叫作hosts的文件(Linux和Windows也繼承保留了這個文件)。這個文件中記錄着主機名稱和IP地址的對應表,這樣只要輸入主機名稱,系統就會加載hosts文件並查找對應關係,找到對應的IP,就能夠訪問這個IP的主機了。 可是後來主機太多了,沒法保證全部人都能拿到統一的最新的hosts文件,就出現了在文件服務器上集中存放hosts文件,以供下載使用。互聯網規模進一步擴大,這種方式也不堪重負,並且把全部地址解析記錄造成的文件都同步到全部的客戶機彷佛也不是一個好辦法。這時DNS系統出現了,隨着解析規模的繼續擴大,DNS系統也在不斷的煙花,直到現今的多層架構體系。php

2.DNS概述入門

DNS(Domain Name System,域名系統),因特網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以使用戶方便的訪問互聯網,而不用去記住可以被機器讀取的IP數串。經過主機名,最終獲得該主機名對應的IP地址的過程叫作域名解析(或主機名解析),DNS協議運行在UDP協議之上,使用端口號53 DNS的分佈式數據庫是以域名爲索引的,每一個域名實際上就是一顆很大的逆向數中路徑,這棵逆向樹成爲域名空間(domain name space) 樹的最大深度不超過127層,樹種每一個節點都有一個能夠長達63個字符的文本符號。linux

三、DNS域名解析過程

首先,客戶端如今本地緩存查找有沒有域名緩存,若是沒有,客戶端發送DNS請求翻譯IP地址或主機名,DNS服務器在收到客戶機的請求後: 
(1)檢查Local DNS服務器的緩存,若查到請求的地址或名字,即向客戶機發出應答信息 
(2)若沒有查到,則在數據庫中查找,若查到請求的地址或名字,即向客戶端發出應答信息。 
(3)若沒有查到,則將請求發給根域DNS服務器,並依序從根域查找頂級域,由頂級域查找二級域,二級域查找三級,直至找到要解析的地址或名字,即向客戶機所在的網絡的DNS服務器發出應答信息,DNS服務器收到應該後先在緩存中存儲,並解析結果發給客戶及 
(4)若沒有找到,返回錯誤信息 docker

4.DNS的分類

主DNS服務器:就是一臺存儲着原始資料的DNS服務器 。
從DNS服務器:使用自動更新方式從主DNS服務器同步數據的DNS服務器,也稱輔助DNS服務器 。
緩存服務器:不負責本地解析,採用遞歸方式轉發客戶機查詢請求,並返回結果給客戶機的DNS服務器,同時緩存查詢回來的結果,也叫遞歸服務器。 
轉發器:這臺DNS發現非本機負責的請求後,再也不向根發起請求,而是直接轉發給指定的一臺或多臺服務器,自身並不保存查詢結果。數據庫

SOA: 能夠理解爲一段本身dns作備註說明的文本,通常與ns一致 vim

實例:centos

a.shifen.com .                579            IN          SOA            dns.baidu.com.  sa.baidu.com.            (
                                              1408010001 ; serial number
                                              5 ; refresh 5s
                                              5;  retry 5s
                                           86400 ; expire 1d
                                           3600 ;min TTL 1h
)

相關解釋: 
一、Serial:只是一個序號,但這個序號可被用來做爲slavemaster更新的依據。舉例來講,master序號爲100但slave序號爲90時,那麼這個zone file的資料就會被傳送到slave來更新了。因爲這個序號表明新舊資料,一般咱們創建你能夠利用日期來設定! 
舉例來講,若是資料是在2018/03/21所修改的第一次,因此用2018032101做爲序號表明!(yyymmddnn,nn表明這一天是第幾回修改) 
二、Refresh:除了根據Serial來判斷新舊以外,咱們能夠利用這個refresh(更新)命令slave多久進行一次主動更新; 
三、Retry:若是到了Refresh的時間,可是slave卻沒法鏈接到master時,那麼在多久以後,slave會再次的主動嘗試與主機連線; 
四、Expire:若是slave一直沒法與master鏈接上,那麼通過多久的時間以後,則命令slave不要再鏈接master了!也就是說,此時咱們假設master DNS可能遇到重大問題而沒法上線,則等待系統管理員處理完畢後,再從新來到slave DNS從新啓動bind吧! 
五、Minimun:這個就有點像是TTL緩存

 

NS 域的受權名稱服務器服務器

 
NSDName:DNS的FQDN
a.shifen.com.       611 IN  NS  ns4.a.shifen.com.
a.shifen.com.       611 IN  NS  ns3.a.shifen.com.
a.shifen.com.       611 IN  NS  ns2.a.shifen.com.
a.shifen.com.       611 IN  NS  ns1.a.shifen.com.
a.shifen.com.       611 IN  NS  ns5.a.shifen.com.

MX 域的郵件交換器,要跟這一個優先級值,越小越高網絡

 
baidu.com.      7200    IN  MX      20    jpmx.baidu.com.
baidu.com.      7200    IN  MX      20    mx50.baidu.com.
baidu.com.      7200    IN  MX      10    mx.n.shifen.com.
baidu.com.      7200    IN  MX      20    mx1.baidu.com.

A記錄: 將域名指向一個IPv4地址(例如:10.10.10.10),須要增長A記錄 
CNAME記錄:若是將域名指向一個域名,實現與被指向域名相同的訪問效果,須要增長CNAME記錄 
MX記錄: 創建電子郵箱服務,將指向郵件服務器地址,須要設置MX記錄 
NS記錄: 域名解析服務器記錄,若是要將子域名指定某個域名服務器來解析,須要設置NS記錄 
TXT記錄: 可任意填寫(可爲空),一般用作SPF記錄(反垃圾郵件)使用 
AAAA記錄: 將主機名(或域名)指向一個IPv6地址(例如:ff03:0:0:0:0:0:0:c1),須要添加AAAA記錄 
SRV記錄: 記錄了哪臺計算機提供了哪一個服務。格式爲:服務的名字.協議的類型(例如:_example-server._tcp) 
顯性URL:將域名指向一個http(s)協議地址,訪問域名時,自動跳轉至目標地址(例如:將www.net.cn顯性轉發到www.hichina.com後,訪問www.net.cn時,地址欄顯示的地址爲:www.hichina.com)。 
隱性URL: 與顯性URL相似,但隱性轉發會隱藏真實的目標地址(例如:將www.net.cn隱性轉發到www.hichina.com後,訪問www.net.cn時,地址欄顯示的地址仍然爲:www.net.cn)。架構

6.DNS命名規範

一、26個英文字母 
二、「0.1.2.3.4.5.6.7.8.9」十個數字 
三、「-」(英文中的連詞號) 
四、最多63字節長度

7.DIG、NSLOOKUP、HOST的介紹

 host命令是大多數系統軟件庫調用的解析命令,好比php中

[root@www ~]# host baidu.com
baidu.com has address 220.181.57.217
baidu.com has address 111.13.101.208
baidu.com has address 123.125.114.144
baidu.com has address 180.149.132.47
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 10 mx.n.shifen.com.
baidu.com mail is handled by 20 mx1.baidu.com.

Nslookup可以反映出是那個dns server返回的結果

 
[root@www ~]# nslookup baidu.com
Server:     100.100.2.136
Address:    100.100.2.136#53
Non-authoritative answer:
Name:   baidu.com
Address: 180.149.132.47
Name:   baidu.com
Address: 123.125.114.144
Name:   baidu.com
Address: 111.13.101.208
Name:   baidu.com
Address: 220.181.57.217

dig返回整個解析過程的詳細描述,相似traceroute

 
[root@localhost ~]# dig abcdocker.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> abcdocker.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46079
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 16

;; QUESTION SECTION:
;abcdocker.com.			IN	A

;; ANSWER SECTION:
abcdocker.com.		5	IN	A	59.110.69.51

;; AUTHORITY SECTION:
abcdocker.com.		5	IN	NS	dns10.hichina.com.
abcdocker.com.		5	IN	NS	dns9.hichina.com.

;; ADDITIONAL SECTION:
dns9.hichina.com.	5	IN	A	140.205.81.25
dns9.hichina.com.	5	IN	A	106.11.141.115
dns9.hichina.com.	5	IN	A	106.11.141.125
dns9.hichina.com.	5	IN	A	106.11.211.55
dns9.hichina.com.	5	IN	A	106.11.211.65
dns9.hichina.com.	5	IN	A	140.205.41.15
dns9.hichina.com.	5	IN	A	140.205.41.25
dns9.hichina.com.	5	IN	A	140.205.81.15
dns10.hichina.com.	5	IN	A	140.205.41.26
dns10.hichina.com.	5	IN	A	140.205.81.16
dns10.hichina.com.	5	IN	A	140.205.81.26
dns10.hichina.com.	5	IN	A	106.11.141.116
dns10.hichina.com.	5	IN	A	106.11.141.126
dns10.hichina.com.	5	IN	A	106.11.211.56
dns10.hichina.com.	5	IN	A	106.11.211.66
dns10.hichina.com.	5	IN	A	140.205.41.16

;; Query time: 336 msec
;; SERVER: 192.168.222.2#53(192.168.222.2)
;; WHEN: Wed Mar 21 10:41:13 2018
;; MSG SIZE  rcvd: 350

 

 2、單臺DNS服務器部署

一、環境準備

centos6.7

yum源配置:https://opsx.alibaba.com/mirror 

 yum install bind-utils bind bind-devel bind-chroot -y

二、vim /etc/named.conf   主配置文件

[root@hermes ~]# >/etc/named.conf
[root@hermes ~]# vim /etc/named.conf   DNS首先加載的文件 更多ban9管理員
 options {
  version "1.1.1";
  listen-on port 53 {any;};
  directory "/var/named/chroot/etc/";
  pid-file "/var/named/chroot/var/run/named/named.pid";
  allow-query { any; };
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";
  zone-statistics yes;
  memstatistics-file "log/mem_stats";
  empty-zones-enable no;
  forwarders {202.106.196.115;8.8.8.8; };
};
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {
  channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};
include "/var/named/chroot/etc/view.conf";

 

相關注釋:

options {
  version "1.1.1";
  listen-on port 53 {any;};     #監控端口
  directory "/var/named/chroot/etc/";   #A記錄等配置文件所在的目錄
  pid-file "/var/named/chroot/var/run/named/named.pid";  服務器來的進程號
  allow-query { any; };      #容許誰訪問{}能夠寫IP
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";  #能夠看到DNS解析記錄的數量,成功率有多少域(能夠作監控)DNS狀態等
zone-statistics yes;        #配成yes以後上面纔會寫入
  memstatistics-file "log/mem_stats";     #內存狀態
  empty-zones-enable no;         
  forwarders {202.106.196.115;8.8.8.8; };  轉發(若是我這沒有域名就轉發)
};
key "rndc-key" {     認證的密鑰
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {                      
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {                    日誌  警告路徑 (日誌分2種)
  channel warning {           日誌的相關信息
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {   訪問日誌相關信息
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {     #默認日誌警告級別
    warning;
  };
  category queries {    #訪問日誌級別
    general_dns;
  };
};
include "/var/named/chroot/etc/view.conf";  其餘域的配置文件目錄(view.conf能夠實現簡單的只能DNS的功能,爲之後的只能DNS作準備)

編輯認證

 
vim /etc/rndc.key
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

 

編輯/etc/rndc.conf 

key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};
options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

vim /var/named/chroot/etc/view.conf

 
view "View" {    #「View 說明 之後能夠修改成電信 聯通」
  zone "lnh.com" {     #zone配置
        type    master;   #此處爲master 還有一個slave
        file    "lnh.com.zone";  #經過這個view進行來找file 找哪個
        allow-transfer {         #容許誰來找我要數據(在named.conf(allow-quey)配置)  容許誰來向我發送請求
                10.255.253.211;
        };
        notify  yes;     #當個人master文件發生變動了,去通知下面的IP,如
        also-notify {
                10.255.253.211;
        };
  };
};
若是有多個須要一zone"lnh.com開頭"以};結尾
view "View" {
  zone "lnh.com" {
        type    master;
        file    "lnh.com.zone";
        allow-transfer {
                10.255.253.211;
        };
        notify  yes;
        also-notify {
                10.255.253.211;
        };
  };
};

編輯vim /var/named/chroot/etc/lnh.com.zone

 
$ORIGIN .
$TTL 3600       ; 1 hour
lnh.com                  IN SOA  op.lnh.com. dns.lnh.com. (
                                2000       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.lnh.com.
$ORIGIN lnh.com.
shanks              A       1.2.3.4
op              A       1.2.3.4

  

註釋:

$ORIGIN .     #zone文件生效的域
$TTL 3600       ; 1 hour   #域名生存週期(內網能夠調節端,外網長)
lnh.com    對外說明我是那個zone           IN SOA  op.lnh.com. dns.lnh.com. (  對
                                2000       ; serial   #若是新同步數據須要調節此處的大小
                                900        ; refresh (15 minutes)   #當我slave向我同步數據,同步失敗多久響應
                                600        ; retry (10 minutes)   #10分鐘以後我在發出請求
                                86400      ; expire (1 day)      1年沒有響應我就認爲他宕機了
                                3600       ; minimum (1 hour)
                                )
                        NS      op.lnh.com.   此處A記錄的相關信息
$ORIGIN lnh.com.               #上面NS配置的域名在下面必定要有一個A記錄
shanks              A       1.2.3.4
op              A       1.2.3.4

修改目錄權限,並啓動服務

 
 cd /var && chown -R named.named named/
/etc/init.d/named start              
chkconfig named on   

測試解析結果 

dig @127.0.0.1 a.lnh.com

若是不指定DNS要看本次的dns server服務器

[root@localhost ~]# cat /etc/resolv.conf 
; generated by /sbin/dhclient-script
search localdomain
nameserver 192.168.222.2

 

本文參考:http://blog.csdn.net/linuxlsq/article/details/52606477

相關文章
相關標籤/搜索