1. 程式人生 > >Linux(RHEL7及CentOS7)下DNS伺服器的搭建與配置

Linux(RHEL7及CentOS7)下DNS伺服器的搭建與配置

一、基本概念

DNS即Domain Name System,域名系統,因特網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議執行在UDP協議之上,使用埠號53。在RFC文件中RFC 2181對DNS有規範說明,RFC 2136對DNS的動態更新進行說明,RFC 2308對DNS查詢的反向快取進行說明(摘自百度百科)。
DNS伺服器的功能
每個IP地址都可以有一個主機名,主機名由一個或多個字串組成,字串之間用小數點隔開。有了主機名,就不要死記硬背每臺IP裝置的IP地址,只要記住相對直觀有意義的主機名就行了。這就是DNS協議所要完成的功能。主機名到IP地址的對映有兩種方式:
1.靜態對映,每臺裝置上都配置主機到IP地址的對映,各裝置獨立維護自己的對映表,而且只供本裝置使用;
2.動態對映,建立一套域名解析系統(DNS),只在專門的DNS伺服器上配置主機到IP地址的對映,網路上需要使用主機名通訊的裝置,需要到DNS伺服器上查詢主機所對應的IP地址。
通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。在解析域名時,可以首先採用靜態域名解析的方法,如果靜態域名解析不成功,再採用動態域名解析的方法。可以將一些常用的域名放入靜態域名解析表中,這樣可以大大提高域名解析效率。
DNS常用的資源記錄型別


A:地址 此記錄列出特定主機名的 IP 地址。這是名稱解析的重要記錄。
CNAME:標準名稱 此記錄指定標準主機名的別名。
MX:郵件交換器此記錄列出了負責接收發到域中的電子郵件的主機。
NS:名稱伺服器此記錄指定負責給定區域的名稱伺服器。
搭建DNS伺服器需要的三個軟體:bind,bind-chroot,bind-utils。

二、環境配置

1、系統、相關軟體版本:CentOS Linux release 7.4.1708 (Core)、bind-chroot-9.9.4-51.el7_4.1.x86_64、bind-9.9.4-51.el7_4.1.x86_64、bind-utils-9.9.4-51.el7_4.1.x86_64。
2、DNS伺服器的IP配置:10.1.1.21。
3、正向解析設計思路:以10.1.1.21的機器為DNS伺服器,10.1.1.23通過DNS伺服器10.1.1.21解析後以域名user.geeklp來訪問10.1.1.23,在10.1.1.23上通過域名test.geeklp來登入10.1.1.21。
4、反向解析設計思路:以10.1.1.21為DNS伺服器,通過10.1.1.23主機的IP來查詢其域名:tomcat.geeklp

三、安裝DNS伺服器相關軟體,修改配置檔案

1、DNS伺服器需要安裝bind、bind-chroot、bind-utils

[root@Geeklp-DNS ~]# yum -y install bind bind-utils bind-chroot

編輯配置檔案/etc/named.conf,找到listen-on這一行,改為:

listen-on port 53 { any; };

找到allow-query這一行,改為:

allow-query     { any; };

對DNS配置檔案進行一下語法檢查:

[root@Geeklp-DNS ~]# named-checkconf /etc/named.conf

啟動dns服務:

[root@Geeklp-DNS ~]# systemctl start named

配置防火牆:

[root@Geeklp-DNS ~]# firewall-cmd --permanent --add-service=dns
[root@Geeklp-DNS ~]# firewall-cmd --reload

測試:

[root@Geeklp-DNS ~]# dig www.baidu.com @10.1.1.21

返回資料無異常。初步配置完成!
2、配置正向解析。
(1)根據named.conf中include “/etc/named.rfc1912.zones”這一行,我們需要在named.rfc1912.zones中新增需要解析的域。當然,我們也可在直接在named.conf檔案中操作,均能起到同樣的效果。在末尾加上如下幾行:

zone "geeklp"  IN {
        type master;
        file "data/master.geeklp.zone";
};

(2)從第三步可以看出,我們把test這個域放到了/var/named/data目錄下,建立檔案master.test.zone(touch master.test.zone),加入以下內容:

$TTL 3600
@          IN  SOA  geeklp  admin.geeklp. (
                                           0         ; serial
                                           1D      ; refresh
                                           1H      ; retry
                                           1W     ; expire
                                           3H )    ; minimum
@           IN       NS     10.1.1.21.
test        IN       A      10.1.1.21
user        IN       A      10.1.1.23

注意:當前區域10.1.1.21後面的點不可省略,否則報錯。
SOA是Start Of Authority(開始驗證)的意思,與域有關,後面共會接7個引數,這7個引數的意義依次是:

        1> Master DNS 伺服器主機名,即在這個域中哪個DNS作為主伺服器,在本例中,即geeklp。
        2> 管理員的Email。即出現問題可給管理員發郵件。在本例中,是admin.geeklp。
        3> 序號。這個序號代表這個資料庫檔案的陳舊,序號越大,代表越新。當slave要判斷是否主動下載新的資料庫時,就以序號是否比slave上的還有新來判斷。
        4> 重新整理頻率(Refresh)。即slave向master要求資料更新的頻率。
        5> 失敗重新嘗試時間(Retry)。如果因為某些因素,導致slave無法對master達成聯機,那麼在多久的時間內,slave會嘗試重新聯機到master。
        6> 失效時間(Expire)。如果一直失敗嘗試時間,持續聯機到達這個設定值時限,那麼slave將不再繼續嘗試聯機。
        7> 存活時間(Minimum TTL)。如果在這個資料庫zone file中,每筆記錄都沒有顯性設定TTL快取時間的話,那麼就以這個值為主。

區域配置檔案格式如下:
[名稱] [TTL] [網路型別] 資源記錄型別 資料
名稱:指定資源記錄引用的物件名,可以是主機名,也可以是域名。物件名可以是相對名稱也可以是完整名稱。完整名稱必須以點結尾。如果連續的幾條資源記錄型別是同一個物件名,則第一條資源記錄後的資源記錄可以省略物件名。相對名稱表示相對與當前域名來說的,如當前域名為geeklp.com,則表示www主機時,完整名稱為www.geeklp.com.,相對名稱為www。
TTL:指定資源記錄存在快取中的時間,單位為秒。如果該欄位省略,則使用在檔案開始出的TTLINSOANSAPTRMXCNAMESOANSMX便;()SOA@zoneORIGIN :ORIGIN後面跟上的是字串,即要補全的內容。

IP地址的格式可以是如下的幾種形式:
單一主機:x.x.x.x,如172.17.100.100
指定網段:x.x.x.或x.x.x.x/n,如172.17.100.或者是172.17.100.0/24
指定多個地址:x.x.x.xx.x.x.x如,172.17.100.100;172.17.100.200
使用!表示否定:如!172.17.100.100,則排除172.17.100.100
不匹配任何:none
匹配所有:any
本地主機(bind本機):localhost
與bind主機同網段的所有IP地址:localnet
(4)搭建完畢,測試一下。重啟named服務(systemctl restart named)。把10.1.1.23的DNS改為10.1.1.21(可以通過nmtui或編輯網路配置檔案),重啟網路(systemctl restart network)。

[[email protected] ~]# ping test.geeklp
PING test.geeklp (10.1.1.21) 56(84) bytes of data.
64 bytes from 10.1.1.21: icmp_seq=1 ttl=64 time=0.178 ms
64 bytes from 10.1.1.21: icmp_seq=2 ttl=64 time=0.450 ms

再試一下本機10.1.1.21,從配置檔案中我們可以看到本機的域名為test.geeklp。從10.1.1.23ssh登入10.1.1.21。

[[email protected] ~]# ssh test.geeklp
The authenticity of host 'test.geeklp (10.1.1.21)' can't be established.
ECDSA key fingerprint is 98:00:32:6a:c1:a1:a6:fa:6f:be:08:53:94:6e:6b:f7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'test.geeklp,10.1.1.21' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Last login: Tue Jan  2 09:04:27 2018 from 10.1.1.1

正向解析搭建完成。
3.配置反向解析。
(1)修改配置檔案:/etc/named.rfc1912.zones,複製zone “1.0.0.127.in-addr.arpa” 這一行到花括號結束的分號末尾,修改為如下內容:

zone "1.1.10.in-addr.arpa" IN {
        type master;
        file "data/named.23.zone";
        allow-update { none; };
};

注意:反向解析的IP需要反過來寫,並且只寫前三位。
按照上面配置新建/var/named/data/named.23.zone檔案,並將一下內容新增到檔案內部,儲存退出。

$TTL 3600
@   IN  SOA  test.geeklp.  admin.test.geeklp.    (
                                    2017111301; Serial
                                    1H; Refresh
                                    15M; Retry
                                    7D; Expire
                                    1H; TTL
                                    )
   IN   NS        test.geeklp.
23 IN   PTR      tomcat.geeklp.

(2)重啟服務,新增開機啟動。

[root@Geeklp-DNS ~]# systemctl restart named
[root@Geeklp-DNS ~]# systemctl enable named

(3)測試反向解析過程。

[[email protected] ~]# nslookup 10.1.1.23
Server:     10.1.1.21
Address:    10.1.1.21#53
23.1.1.10.in-addr.arpa  name = tomcat.geeklp.
[[email protected] ~]# dig +trace 10.1.1.23
; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.1 <<>> +trace 10.1.1.23
·············中間省略
23.1.1.10.in-addr.arpa  name = tomcat.geeklp.

四、附加資料

Bind可以使用的區域型別及其說明如下:
master:主DNS區域。擁有該區域的區域資料檔案,對該區域提供管理。
slave:從DNS區域。擁有master區域的區域資料檔案的只讀副本,slave區域從master區域獲取所有的資料,這個過程稱為區域傳輸。
forward:轉發區域。用於轉發DNS客戶端的查詢。
stub:存根區域。和slave區域類似,但是隻複製master區域的NS記錄和NS記錄對應的A記錄。
hint:提示區域,定義根所在的位置。用於查詢根DNS伺服器的位置。
主配置檔案引數(options塊):
listen-on port:指定DNS監聽的埠和地址。如果監聽在本機的所有地址,可以用any。如listen-on port 53 { 172.17.100.1; };
listen-on-v6 port:指定DNS監聽的IPV6的地址和埠。如listen-on-v6 port 53 { ::1; };
directory:指定區域資料檔案所在的路徑。預設為”/var/named”。如果使用了chroot,則該路徑為相對路徑,為/var/named/chroot/var/named
query-source port:指定DNS客戶端在查詢時必須使用的源埠。該引數通常不設定。
allow-query:允許哪些客戶端進行查詢,如果沒有定義此選項,則表示允許所有的客戶端提交的DNS查詢請求。如:allow-query { 172.17.100.200; 172.17.100.210; };則允許172.17.100.200和172.17.100.210這兩個客戶端提交的DNS查詢請求。由外向內。通常都是any。允許所有的客戶端查詢。
allow-recursion:允許哪些客戶端執行遞迴查詢。如果該DNS伺服器不對外開放,即不給網際網路的使用者執行查詢時,則開啟該選項。與allow-query不同的是,不執行客戶端提交的遞迴查詢。allow-query允許迭代查詢和遞迴查詢。allow-recursion由內向外。通常需要放行本地網段和127.0.0.0/8的。
recursion yes:預設為yes,則表示給所有的客戶端執行遞迴。這樣就成為一個開放的DNS伺服器了。
forwarders:指定轉發伺服器。如果定義了多個轉發伺服器,則依次進行嘗試,直到獲得查詢資訊為止。本地的DNS伺服器會將查詢請求轉發到轉發伺服器。如果該專案設定在區域定義之外的話,是對所有非本地區域的解析都轉發到指定的DNS伺服器;如果定義在某個區域內,則是將對該區域的解析轉發到指定伺服器。
forward only|first:only表示只將查詢請求轉發到所定義的轉發伺服器,不通過本機查詢。first表示先將查詢轉發到所定義的轉發伺服器,如果沒有響應,則通過本機進行迭代查詢。預設為first。
querylog:yes啟用查詢日誌記錄功能。no關閉查詢日誌記錄功能。
allow-transfer:允許哪些slave DNS伺服器進行區域傳輸。
recursion:選項指定是否允許客戶端遞迴查詢其他域名伺服器。如果希望對本地客戶端的查詢允許遞迴,但對來自外部的查詢請求禁止遞迴,可以通過“allow-recursion”選項進行定義。allow-recursion選項可以指定一個允許執行遞迴查詢操作的地址列表。
transfer-source x.x.x.x:指定slave在向master進行區域傳輸時所使用的源地址。
notify:是否啟用notify功能。yes表示當Master端資料修改時,通知Slave進行區域傳輸,no表示不通知slave。
allow-update:是否允許通過DHCP獲取IP地址的機器動態更新DNS資訊,none表示不允許。
dnssec-enable:設定BIND是否支援DNSSEC,該技術並不對資料進行加密,它只是驗證您所訪問的站點地址是否有效。是一種端到端的安全協議。預設為yes。在做子域授權時,需要設定為no
dnssec-validation:預設為yes,在做子域授權時,需要設定為no
參考資料:http://blog.csdn.net/xrwwuming/article/details/51505031