Linux環境下搭建主從DNS服務器

一、bind簡介
Linux中通常使用bind來實現DNS服務器的架設,bind軟件由isc(www.isc.org)維護。在yum倉庫中可以找到軟件,配置好yum源,直接使用命令yum install bind就可以安裝,監聽窗口爲53。bind的主要配置文件爲/etc/named.conf,此文件主要用於配置區域,並指定區域數據庫文件名稱。區域數據庫文件通常保存於/var/named/目錄下,用於定義區域的資源類型。
——————————————————————————————————————————————————————————————————
二、架設主DNS服務器、
實例操作:以域名zym.com爲例配置一個DNS服務器,實現正向解析。
配置一臺ip爲172.18.24.17/16的主機作爲DNS服務器。
爲了實驗能成功進行,我們把selinux和防火牆先關閉

[root@centos7~ ]#setenforce 0    #設置selinux爲permissvie
[root@centos7~ ]#systemctl stop firewalld   #關閉防火牆
[root@centos7~ ]#ss -ntl         #查看53號端口是否打開,監聽本機的IP

修改主配置文件

[root@centos7~ ]#vim /etc/named.conf
options {
listen-on port 53 { 127.0.0.1;localhost;}; #監聽本地所有的IP
allow-query     { any;};    #所有的客戶端都可以查詢區域數據庫,實現解析 
}

定義用戶自定義域

[root@centos7~ ]#vim /etc/named.rfc1912.zones  #用戶自定域,也可以把域寫在/etc/named.conf文件中
zone "zym.com" IN {     #添加zym.com域
        type master;    #指定類型爲主                                            
        file "zym.com.zone";   #指定區域數據庫文件名                                    
};

寫解析數據庫文件

[root@centos7~ ]#vim /var/naemd/zym.com.zone
$TTL 1D
@   2D  IN  SOA  dns1 admin.magedu.com. (       
      200005    ; serial  #版本號,版本號可以任意數值,位數不能超過10個
      1D        ; refresh #更新間隔時間,1D表示一天
      1H        ; retry   #同步數據失敗後,再次嘗試同步間隔時間。1H表示1小時
      1W        ; expire #一直不能同步數據,此間隔時間後從服務器不再提供解析服務
      3H )      ; minimum  #錯誤請求間隔時間,此時間內不再重啓查詢,直接將結果返回給客戶端
               NS             dns1          #指明服務器名稱
dns1    2D IN  A              172.18.24.17  #服務器IP
www            CNAME              web       #指明www爲web的別名 
web            A              172.18.24.26  #域名對應的IP
zym.com.       A              172.18.24.27        
[root@centgos7 named]# ll zym.com.zone 
-rw-r----- 1 root root 296 Sep 22 05:49 zym.com.zone 
#只有所有者和所屬組有讀的權限,這裏所有主和所屬組都是root用戶,其他用戶沒有讀的權限,故需要下面的一步修改,讓named有讀解析數據文件的權限
[root@centos7~ ]#chgrp named /var/named/zym.com.zon  
#很重要的一步,把zym.com.zon解析數據文件的屬組改爲named,這是DNS服務創建的一個用戶,用於方便調用DNS服務,這裏把屬組改成named,named就有權限爲客戶端讀取解析數據,達到查詢解析的目的

主配置文件語法檢查

[root@centos7~ ]#named-checkconf  #檢查配置文件中的語法/etc/named.conf /etc/named.rfc1912.zones
[root@centos7~ ]#named-checkzone zym.com /var/named/zym.com.zone #解析庫文件語法檢查
[root@centos7~ ]#rndc reload     #加載DNS配置文件  

這裏寫圖片描述

測試主DNS服務器能否解析
用IP爲172.18.24.6/16的主機測試IP爲172.18.24.17的DNS主服務器能否正常解析域名
保證兩臺主機能正常通信
在IP爲172.18.24.6/16的主機上用yum安裝bind-utils包,安裝此包中有dig命令dig命令的這裏不詳細講解了,有興趣的同學可以看我另外一篇關於DNS的博客,裏面有詳解講解dig的用法

[root@centos7~ ]#dig www.zym.com @172.18.24.17  #在指定ip爲172.18.24.17的主機上查詢域名爲www.zym.com的ip地址
[root@centos7~ ]#dig zym.com @172.18.24.17  #在指定ip爲172.18.24.17的主機上查詢域名爲zym.com的ip地址,這裏

這裏寫圖片描述
——————————————————————————————————————————————————————————————————
三、架設從DNS服務器
準備:
1. 一臺IP爲172.18.24.7/24的主機,並且能於IP爲172.18.24.17/16主DNS服務器、IP爲172.18.24.6/測試主機通信。
2. 爲了保證實驗順利進行,我們先把selinux和防火牆關閉,第二步架設主DNS服務器有寫,這裏不再贅述。

同理修改主配置文件

[root@centos7~ ]#vim /etc/named.conf
options {
    listen-on port 53 { localhost;};   #監聽本地所有的IP
    allow-query       { any;};         #所有的客戶端都可以查詢區域數據庫,實現解析 
}

定義用戶自定義域

[root@centos7~ ]#vim /etc/named.rfc1912.zones  #用戶自定域,也可以把域寫在/etc/named.conf文件中
zone "zym.com" IN {           #添加zym.com域
        type slave;               #指定類型爲從服務器
        masters {172.18.24.17;};   #指定從當前從服務器對應的主服務器IP地址
        file  "slaves/zym.com.slave.zone";  #指定從解析數據庫文件名

這裏我們就不需要在自己寫解析數據文件了,我們要實現主從DNS服務器,那麼數據就必須要同步,接下來,我們就開始同步解析數據文件

[root@localhost ~]#cd /etc/named/slaves 
[root@localhost slaves]#ls
[root@localhost slaves]#rndc reload   #從主服務器同步解析數據到從服務器上
server reload successful
[root@localhost slaves]# ls
zym.com.slave.zone
#注意:區域數據庫文件zym.com.slave.zone在centos6是明文,而在centos7是密文 

在IP爲172.18.24.6/主機上測試兩臺主機能否正常解析
測試主DNS服務器能否正常解析

這裏寫圖片描述

測試主DNS服務器能否正常解析

這裏寫圖片描述

從上面兩個圖可以清楚的看到,主從服務器都能正常解析
——————————————————————————————————————————————————————————————————
四、實現容錯

原理:
搭建主從服務器,除了減輕負載,還有一個更重要的作用,實現容錯。容錯,顧名思義,就是允許出現錯誤,出現問題後任然對外能夠提供服務,實現思想是,一臺服務器壞了,另外一臺能正常工作,對外提供服務。
實驗過程分析:
我們這裏模擬真實環境,dig測試不再指定用哪個服務器來解析域名,那麼我們需要修改測試主機上的網卡配置,指定DNS主從服務器

[root@CentOS6 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
IPADDR=172.18.24.6
PREFIX=16
DNS1=172.18.24.17    #主
DNS2=172.18.24.7     #從
BOOTPROTO=static
GATEWAY=172.18.0.1
[root@CentOS6 ~]#dig www.zym.com 

這裏寫圖片描述

現在我們把主服務器上的ip爲172.18.24.17的網卡down掉,模擬主機服務器出問題。

[root@CentOS7 ~]#ifconfig ens37 down 

這裏寫圖片描述

再次在測試主機上測試
這裏寫圖片描述

測試成功。
說明:在執行 dig www.zym.com 命令後,明顯可以感覺停頓了一兩秒時間才顯示出結果,比down掉網卡前慢了些許,因爲我們配置網卡的時候,把主服務器的IP放在了從服務器IP的前面,當執行解析命令後,主機首先會到主服務器上去查詢,結果主服務器網卡壞掉了,不能提供服務,然後主機會到從服務器去查詢,從服務器正常工作,解析出域名,返回給主機,顯示出結果。
——————————————————————————————————————————————————————————————————
五、安全加強
利用dig命令可以直接抓取的服務器上的解析數據的所有解析記錄,而且是明文,現在存在很大的危險漏洞。
先把第四步禁掉的網卡啓用起來,然後抓取主服務器上的解析紀錄

[root@CentOS7 ~]#ifconfig ens37 up

在測試主機抓取

[root@CentOS6 ~]#dig -t axfr zym.com @172.18.24.17    

這裏寫圖片描述

在主DNS服務器上安全加強

[root@CentOS7 ~]#vim /etc/named.conf
options{
allow-transfer  {172.18.24.7;};  #在options中加入此行,表示只允許172.18.24.7這個IP查詢解析數據,我們知道172.18.24.7是從服務器的IP,所以一般設置的都是從服務器纔有權限查詢解析數據
};

再次測試

這裏寫圖片描述

雖然我們在主服務上設置了安全策略,但是外部主機還是可以照樣抓取從服務器上的解析紀錄,同樣存在安全漏洞。

這裏寫圖片描述

從服務器上安全加強

[root@CentOS7 ~]#vim /etc/named.conf
options{
    allow-transfer  {none;};  #從服務器一般沒有誰需要同步解析紀錄,所以我們這裏設置爲none
};

測試

這裏寫圖片描述

測試成功。
注意:這裏我們只是設置了同步解析數據紀錄的紀錄,並沒有限制查詢,外部的主機都是可以在主從DNS服務器查詢域名的,因爲DNS本身就是對外提供查詢服務的。

總結:這裏我們是實驗環境,爲了方便實驗把防火牆和selinux都關閉了,但是在生產中環境中,可不能隨便把防火牆強關閉,需要提前設置防火牆策略,有安全要求較高的話,還需要設置selinux策略,然後搭建服務。同時我們應該知道,無論是實驗環境還是真實生產環境,原理都是想通的。主從DNS服務器不僅能均衡負載,還可以實現容錯,在生產中廣泛使用。

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