Linux运维实战之DNS的高级配置(转发器、视图等)
上次博文我們具體配置了一臺DNS服務器并實現了主輔之間的區域傳送,本次博文我們來看看DNS的一些高級配置。
在進行DNS的高級配置之前,必須要理解DNS的原理(參見http://sweetpotato.blog.51cto.com/533893/1596973)
并且對DNS的基礎配置也要熟練(參見http://sweetpotato.blog.51cto.com/533893/1598225)
【本次博文的主要內容】
- 子域授權
- 轉發域
- acl
- 視圖(view)
【實驗環境】
實驗說明:
本次博文的實驗只做正向解析;
VMware station 10
BIND服務器:兩臺CentOS 6.4虛擬機做主輔DNS
windows 7物理機做客戶端
Domain Name:test.com.???????? 192.168.80.0/24
主DNS:Master.test.com.???????? 192.168.80.11
輔助DNS:Slave.test.com.???????? 192.168.80.13
web主機:www.test.com.? ??????? 192.168.80.11?? 192.168.1.201?? 192.168.80.14
ftp主機:ftp.test.com.? CNAME?? www.test.com.
mx郵件服務器:mx.test.com.? 192.168.80.11
######################################規劃子域##################################################
子域:SubZone.test.com.
子域DNS:ns1.SubZone.test.com.??? 192.168.80.12
web主機:www.SubZone.test.com.??? 192.168.80.12
imap:CNAME?? www
一、子域授權:
【DNS服務器的主輔配置】
按照上次博文的介紹,將主輔DNS的基本配置做好(參考http://sweetpotato.blog.51cto.com/533893/1598225)
主DNS配置好后,test.com區域文件如下所示:
輔助DNS上的區域文件是從主DNS復制過去的,如下所示:
所有資源記錄都有了哈。下面我們來配置子域DNS,并在其父域DNS上完成授權。
【子域授權】
子域授權的基本理論在我的前兩次博文中具體介紹過了,這里不再贅述(參見http://sweetpotato.blog.51cto.com/533893/1596973)。
子域授權創建步驟:
第一步、劃分子域:
這里,我們劃分的子域為SubZone.test.com. 在192.168.80.12主機上,配置子域的區域解析文件:
(1)修改主配置文件,在/etc/named.rfc1912.zones文件中添加如下條目:
(2)創建“SubZone.test.com.zone”區域解析文件,并修改屬組和權限:
(3)檢查主配置文件和區域文件的語法錯誤(語法檢查沒問題了別急著啟動服務或重新載入區域文件,需要先到父域DNS上完成授權)
[root@Centos ~]# named-checkconf [root@Centos ~]# named-checkzone "SubZone.test.com" /var/named/SubZone.test.com.zone zone SubZone.test.com/IN: loaded serial 2015012001 OK第二步、完成授權:
(1)在主DNS(192.168.80.11主機)上完成子域的授權,即在區域文件/var/named/test.com.zone中添加子域相應的NS記錄和粘附A記錄:
(2)檢查區域文件語法錯誤并重新加載主DNS的區域文件:
[root@Centos named]# named-checkzone "test.com" test.com.zone zone test.com/IN: loaded serial 2015012001 OK [root@Centos named]# rndc reload server reload successful(3)回到子域DNS,啟動named服務或重新加載區域文件;
至此,子域授權的過程結束。
【驗證子域授權】:
1、回到父域DNS,查看區域解析情況:
授權是自上而下的哈,父域能知道子域的存在。
Tis:如果檢查區域文件語法錯誤時出現了以下情況:
[root@Centos named]# named-checkzone "test.com" test.com.zone zone test.com/IN: SubZone.test.com/NS 'ns1.SubZone.test.com' extra GLUE A record (192.168.80.12) zone test.com/IN: SubZone.test.com/NS 'ns1.SubZone.test.com' missing GLUE A record (192.99.166.230) zone test.com/IN: loaded serial 2015012004 OK 隨后,在父域DNS用dig命令查詢子域SubZone.test.com的NS記錄時,只給出了NS記錄而沒有對應的粘附A記錄。這種情況是由于/etc/resolv.conf配置了多個DNS(且能夠與公網通信),并且主機配置了多塊網卡造成。將/etc/resolv.conf文件中的其它記錄都注釋掉,把DNS指向本機IP地址即解決問題(這是我遇見的情況,大家遇到的情況可能有所不同,歡迎多交流)。2、在父域的輔助DNS(192.168.80.13主機)上,查看區域解析情況:
3、回到子域DNS,查看區域解析情況:
能夠解析,而且是權威應答哈。思考一下,子域DNS能夠解析父域嗎?我你們來試一下哈!
結論:授權是自上而下的,上級(父域)知道下級(子域)的存在,而下級(子域)并不知道上級(父域)的存在(因此子域的解析從根開始層層往下迭代)
那如何才能讓子域解析父域呢?通過轉發!
二、DNS名稱解析轉發器:
1、問題的引入:什么是轉發器?為什么需要轉發器?
擔當DNS名稱解析的服務器被稱為“DNS轉發器”。轉發器也是網絡上的DNS服務器,用來將內部DNS名稱的DNS查詢轉發給該網絡外的DNS服務器。
如果不將特定DNS服務器指定為轉發器,所有DNS服務器可使用其根提示在網絡外發送查詢。這樣,許多內部可能非常重要的DNS信息都可暴露在公網上。除了安全和隱私問題,該解析方法可導致大量的外部通信,且通信費用昂貴,對于慢速Internet連接的網絡或Internet服務成本很高的公司來說效率低下。而將DNS服務器指定為轉發器時,轉發器將負責處理外部通信,從而將DNS服務器有限地暴露給公網。轉發器將建立外部DNS信息的巨大緩存,因為網絡中的所有外部DNS查詢都是通過它解析的。你在很短的時間內,轉發器將使用該緩存數據解析大部分外部DNS查詢,從而減少網絡的Internet通信與DNS客戶端的響應時間。
2、轉發的原理:
轉發是一種鏈式結構,如下圖所示:
(1)當本地DNS服務器(也是轉發器)收到查詢時,它會嘗試使用它主持和緩存的主要和輔助區域解析該查詢;
(2)如果不能使用本地數據解析查詢,此時它作為客戶端,會將查詢轉發給外網DNS服務器;
(3)本地DNS(轉發器)收到客戶端的請求后會等待一段很短的時間,等待來自外網DNS的應答;
(4)對于外網DNS來說,它接收到的查詢請求是遞歸查詢,此時,它自己需要向外層層迭代找到最終答案返回給轉發器(此時轉發器作為DNS客戶端)
(5)轉發器將外網DNS返回的查詢結果送到客戶端(非權威答案),完成解析過程。
注:轉發的前提——接收轉發請求的服務器(這里是外網DNS)必須能夠為請求者(這里是本地DNS,也是轉發器)做遞歸查詢;
3、轉發的類型:
??? (1)無條件轉發:轉發所有針對非本機負責解析的區域的請求;?
???????
??? (2)條件轉發:僅轉發對特定區域的請求(即轉發域); zone "區域名稱" IN {type forward; forwarders { ip; }; forward ; };
【舉例說明】
######################################規劃轉發器#################################################
上面的例子中,子域DNS(192.168.80.12主機)無法與外網通信,且無法解析父域;
輔助DNS服務器(192.168.80.13主機)能夠與外網通信,現在將其作為子域DNS的轉發器;
1、無條件轉發:在子域DNS上設置轉發,讓子域能夠解析父域且能夠通過轉發器解析公網的查詢:
第一步、在子域DNS上配置轉發。修改主配置文件/etc/named.conf,實現無條件轉發即轉發所有非本機負責解析的區域的請求:
第二步、重新加載配置文件,并清空DNS緩存:
[root@Centos ~]# rndc reconfig [root@Centos ~]# rndc flush第三步、用dig命令進行測試,看看通過轉發子域是否能夠解析父域:
第四步、用dig命令測試,看看通過轉發能否解析外網的查詢:
可以看出,通過無條件轉發,可以解析針對非本地負責的區域的查詢哈。
現在假設這樣一個場景:
如果子域DNS能夠與外網通信而轉發器DNS服務器(192.168.80.13主機)不能與外網通信,并且子域DNS能夠根據根提示做DNS查詢,那么將轉發選項設置為“first”,結果怎樣呢?
(1)設置外網網關,讓子域DNS服務器能夠與外網通信:
(2)在轉發器DNS服務器(192.168.80.13主機)上,設置網關,讓其無法與外網通信:
(3)在子域DNS上修改主配置文件,把轉發選項改為”first“:
(4)重新加載子域DNS的配置文件并清除DNS緩存:
(5)用dig命令測試,看是否還能夠解析外網的區域:
能夠解析哈,說明不能從轉發器查詢外網之后,它自己用根提示出去迭代查詢到了結果。
2、條件轉發:配置轉發域,使得只對test.com域的查詢能夠通過轉發器解析:
第一步、修改主配置文件/etc/named.conf,將上例中的無條件轉發選項注釋掉:
第二步、修改/etc/named.rfc1912.zone,配置轉發域test.com:
第三步、在轉發器DNS服務器上(192.168.80.13主機),設置“允許遞歸”:
第四步、在子域DNS上用dig命令進行測試,看是否可以解析轉發域:
能夠解析哈,那現在是否可以解析baidu.com呢?試試看哈。
不能解析哈。
三、DNS的ACL配置:
1、問題的引入:為什么需要ACL?
因為安全和DNS服務器性能,如果沒有ACL,那么任何人都可以到我們的DNS服務器上做遞歸查詢,這樣是非常危險的。而且DNS的區域傳送是多主復制,如果不設置ACL,那么任何主機都可以到我們的DNS上來做完全區域傳送,這也是很危險的,而且會讓我們的DNS服務器忙死。
2、BIND的ACL:
(1)BIND中常用4個常用的控制指令:
//允許做區域傳送的指令//允許做查詢的指令//允許做遞歸查詢的ip列表,一般來說只允許給本地客戶端做遞歸查詢//用于DDNS(動態DNS:與DHCP聯動),比較危險,一般不允許更新數據文件(2)BIND的ACL:
如果allow-transfer 和 allow-query 放到區域配置中一般后期修改ip地址會非常的麻煩,所以可以定義acl訪問規則:
#對于配置文件的格式以及參數調整,具體可以查看man手冊 ,命令:man named.conf
定義acl的格式如下:
acl 名稱 定義acl規則可以看到如上所示信息,定義格式非常簡單:使用bind訪問控制列表,明確定義一組客戶端或者一組主機并使用一個名稱來定義它們;
其中,定義的參數有四種,分別是:any、none、local、localnet。
acl只有先定義才可以使用,因此acl定義必須在acl調用的最上方即放在配置文件的最上方。
【配置ACL】
在子域DNS上配置ACL,只允許本機地址127.0.0.1查詢:
(1)先定義acl:
(2)acl定義后需要應用在區域文件中(編輯區域配置文件/etc/named.rfc1912.zone):
(3)重新載入配置文件;
(4)驗證結果(在子域DNS服務器上用dig命令測試):
首先用本機的IP地址192.168.80.12來解析:
拒絕查詢哈!
然后用127.0.0.1來解析:
能夠解析哈,說明ACL起作用了。
四、通過VIEW實現智能DNS:
1、BIND VIEW是什么:
BIND的view是基于人的腦裂(brain split)原理,靈活控制哪些客戶機能看到哪個view視圖的訪問控制列表,view功能可以實現不同網段發出同樣的請求卻得到不同的DNS解析結果,可以有效的分流網絡流量,提高訪問控制能力。
2、VIEW語句的介紹:
通過view語句可以完成DNS的智能解析功能,其語法如下:?
3、配置VIEW,實現智能DNS解析:
######################################規劃VIEW##################################################
實驗拓撲還是采用子域授權的那一個,每個虛擬機上都配置了兩塊網卡(參見拓撲圖),將來自192.168.80.0/24網段的IP作為內網的主機,192.168.1.0/24網段的IP和所有其它IP作為外網的主機,用win7物理機與虛擬機通信時,訪問192.168.80.0/24網段采用的是NAT地址轉換,會將物理機的IP地址192.168.1.3轉換為192.168.80.254來訪問。使用acl來定義控制列表。
【配置VIEW】
(1)在主DNS(192.168.80.11主機)上,編輯主配置文件/etc/named.conf,配置acl和view:
options {directory "/var/named"; };acl internal { //定義acl列表,來自192.168.80.0/24網段的客戶端均為內網用戶192.168.80.0/24; };acl external { //定義acl列表,來自192.168.1.0/24網段的客戶端均為外網用戶192.168.1.0/24; };view "internal" { //內網視圖,定義了內網主機查詢所使用的區域解析庫文件match-clients { internal; };recursion yes;zone "test.com" IN {type master;file "internal.test.com.zone";}; };view "external" { //外網視圖,定義了外網主機查詢所使用的區域解析庫文件match-clients { external; };recursion yes;zone "test.com" IN {type master;file "external.test.com.zone";}; };(2)使用named-checkconf來檢測主配置文件是否有存在語法錯誤:
[root@Centos ~]# named-checkconf [root@Centos ~]#(3)分別創建內外網用戶訪問test.com域服務器所使用的正向解析區域文件:
內網(internal)的zone文件/var/named/internal.test.com.zone :
外網(external)的zone文件/var/named/external.test.com.zone :
(4)將internal和external所使用的解析區域數據文件的屬組及權限分別改為named和640:
[root@Centos ~]# chmod 640 /var/named/internal.test.com.zone /var/named/external.test.com.zone [root@Centos ~]# chown :named /var/named/internal.test.com.zone /var/named/external.test.com.zone [root@Centos ~]# ll /var/named/*.zone -rw-r-----. 1 root named 272 Jan 23 13:01 /var/named/external.test.com.zone -rw-r-----. 1 root named 276 Jan 23 00:29 /var/named/internal.test.com.zone(5)使用named-checkzone分別檢測internal和external所使用的區域數據文件是否存在語法錯誤;
(6)重新加載配置文件和區域文件,并打開查詢日志:
[root@Centos ~]# rndc reload server reload successful [root@Centos ~]# rndc querylog [root@Centos ~]# rndc status version: 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 CPUs found: 2 worker threads: 2 number of zones: 34 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is ON recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running(7)分別在192.168.80.0/24和192.168.1.0/24網段上進行測試,并查看結果:
說明:我的win7物理機的IP是192.168.1.3,DNS服務器上配置了兩塊網卡,IP地址分別為192.168.80.11和192.168.1.58
查詢日志的情況如下:
訪問的是內網視圖,物理機的IP(192.168.1.3)被轉換成了192.168.80.254;
查詢日志情況如下:
由此,通過VIEW實現了智能DNS哈。
【小結】
本次博文主要知識點:
1、DNS的子域授權:
- 子域的概念:在域內劃分出小域即為子域。
- 授權也稱為委派,子域授權的步驟:
(1)劃分子域
(2)完成授權
- 授權是自上而下的過程,父域知道子域的存在并知道子域的主DNS服務器地址(父域的名稱解析庫中有子域的NS記錄和主機A記錄),而子域并不知道父域的存在,因此子域需要從根域開始查找。
- 如果想讓子域解析父域,最簡單的辦法就是設置轉發。
2、DNS的轉發:
轉發的前提——接收轉發請求的服務器必須能夠為請求者做遞歸查詢;
(1)無條件轉發:轉發所有針對非本機負責解析的區域的請求;#在主配置文件/etc/named.conf的全局選項中添加如下內容: options { forwarders { ip; }; forward ; };
(2)條件轉發:僅轉發對特定區域的請求(即轉發域); zone "區域名稱" IN {type forward; forwarders { ip; }; forward ; };
3、BIND的ACL:
(1)BIND中常用4個常用的控制指令:
//允許做區域傳送的指令//允許做查詢的指令//允許做遞歸查詢的ip列表,一般來說只允許給本地客戶端做遞歸查詢//用于DDNS(動態DNS:與DHCP聯動),比較危險,一般不允許更新數據文件(2)BIND的ACL定義:
acl 名稱 定義acl規則其中,定義的參數有四種,分別是:any、none、local、localnet。
acl只有先定義才可以使用,因此acl定義必須在acl調用的最上方即放在配置文件的最上方。
4、通過視圖(view)實現智能DNS:
通過view語句可以完成DNS的智能解析功能,其語法如下:
本次博文的內容就這么多哈,下次我們給出一個綜合案例來總結下DNS的知識;歡迎各位大大拍磚~~
轉載于:https://blog.51cto.com/sweetpotato/1607383
總結
以上是生活随笔為你收集整理的Linux运维实战之DNS的高级配置(转发器、视图等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JUnit 测试
- 下一篇: Linux实战考试题:批量创建用户和密码