Linux运维实战之DNS的高级配置(转发器、视图等)
上次博文我們具體配置了一臺DNS服務(wù)器并實(shí)現(xiàn)了主輔之間的區(qū)域傳送,本次博文我們來看看DNS的一些高級配置。
在進(jìn)行DNS的高級配置之前,必須要理解DNS的原理(參見http://sweetpotato.blog.51cto.com/533893/1596973)
并且對DNS的基礎(chǔ)配置也要熟練(參見http://sweetpotato.blog.51cto.com/533893/1598225)
【本次博文的主要內(nèi)容】
- 子域授權(quán)
- 轉(zhuǎn)發(fā)域
- acl
- 視圖(view)
【實(shí)驗(yàn)環(huán)境】
實(shí)驗(yàn)說明:
本次博文的實(shí)驗(yàn)只做正向解析;
VMware station 10
BIND服務(wù)器:兩臺CentOS 6.4虛擬機(jī)做主輔DNS
windows 7物理機(jī)做客戶端
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主機(jī):www.test.com.? ??????? 192.168.80.11?? 192.168.1.201?? 192.168.80.14
ftp主機(jī):ftp.test.com.? CNAME?? www.test.com.
mx郵件服務(wù)器:mx.test.com.? 192.168.80.11
######################################規(guī)劃子域##################################################
子域:SubZone.test.com.
子域DNS:ns1.SubZone.test.com.??? 192.168.80.12
web主機(jī):www.SubZone.test.com.??? 192.168.80.12
imap:CNAME?? www
一、子域授權(quán):
【DNS服務(wù)器的主輔配置】
按照上次博文的介紹,將主輔DNS的基本配置做好(參考http://sweetpotato.blog.51cto.com/533893/1598225)
主DNS配置好后,test.com區(qū)域文件如下所示:
輔助DNS上的區(qū)域文件是從主DNS復(fù)制過去的,如下所示:
所有資源記錄都有了哈。下面我們來配置子域DNS,并在其父域DNS上完成授權(quán)。
【子域授權(quán)】
子域授權(quán)的基本理論在我的前兩次博文中具體介紹過了,這里不再贅述(參見http://sweetpotato.blog.51cto.com/533893/1596973)。
子域授權(quán)創(chuàng)建步驟:
第一步、劃分子域:
這里,我們劃分的子域?yàn)?/font>SubZone.test.com. 在192.168.80.12主機(jī)上,配置子域的區(qū)域解析文件:
(1)修改主配置文件,在/etc/named.rfc1912.zones文件中添加如下條目:
(2)創(chuàng)建“SubZone.test.com.zone”區(qū)域解析文件,并修改屬組和權(quán)限:
(3)檢查主配置文件和區(qū)域文件的語法錯(cuò)誤(語法檢查沒問題了別急著啟動(dòng)服務(wù)或重新載入?yún)^(qū)域文件,需要先到父域DNS上完成授權(quán))
[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第二步、完成授權(quán):
(1)在主DNS(192.168.80.11主機(jī))上完成子域的授權(quán),即在區(qū)域文件/var/named/test.com.zone中添加子域相應(yīng)的NS記錄和粘附A記錄:
(2)檢查區(qū)域文件語法錯(cuò)誤并重新加載主DNS的區(qū)域文件:
[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,啟動(dòng)named服務(wù)或重新加載區(qū)域文件;
至此,子域授權(quán)的過程結(jié)束。
【驗(yàn)證子域授權(quán)】:
1、回到父域DNS,查看區(qū)域解析情況:
授權(quán)是自上而下的哈,父域能知道子域的存在。
Tis:如果檢查區(qū)域文件語法錯(cuò)誤時(shí)出現(xiàn)了以下情況:
[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記錄時(shí),只給出了NS記錄而沒有對應(yīng)的粘附A記錄。這種情況是由于/etc/resolv.conf配置了多個(gè)DNS(且能夠與公網(wǎng)通信),并且主機(jī)配置了多塊網(wǎng)卡造成。將/etc/resolv.conf文件中的其它記錄都注釋掉,把DNS指向本機(jī)IP地址即解決問題(這是我遇見的情況,大家遇到的情況可能有所不同,歡迎多交流)。2、在父域的輔助DNS(192.168.80.13主機(jī))上,查看區(qū)域解析情況:
3、回到子域DNS,查看區(qū)域解析情況:
能夠解析,而且是權(quán)威應(yīng)答哈。思考一下,子域DNS能夠解析父域嗎?我你們來試一下哈!
結(jié)論:授權(quán)是自上而下的,上級(父域)知道下級(子域)的存在,而下級(子域)并不知道上級(父域)的存在(因此子域的解析從根開始層層往下迭代)
那如何才能讓子域解析父域呢?通過轉(zhuǎn)發(fā)!
二、DNS名稱解析轉(zhuǎn)發(fā)器:
1、問題的引入:什么是轉(zhuǎn)發(fā)器?為什么需要轉(zhuǎn)發(fā)器?
擔(dān)當(dāng)DNS名稱解析的服務(wù)器被稱為“DNS轉(zhuǎn)發(fā)器”。轉(zhuǎn)發(fā)器也是網(wǎng)絡(luò)上的DNS服務(wù)器,用來將內(nèi)部DNS名稱的DNS查詢轉(zhuǎn)發(fā)給該網(wǎng)絡(luò)外的DNS服務(wù)器。
如果不將特定DNS服務(wù)器指定為轉(zhuǎn)發(fā)器,所有DNS服務(wù)器可使用其根提示在網(wǎng)絡(luò)外發(fā)送查詢。這樣,許多內(nèi)部可能非常重要的DNS信息都可暴露在公網(wǎng)上。除了安全和隱私問題,該解析方法可導(dǎo)致大量的外部通信,且通信費(fèi)用昂貴,對于慢速Internet連接的網(wǎng)絡(luò)或Internet服務(wù)成本很高的公司來說效率低下。而將DNS服務(wù)器指定為轉(zhuǎn)發(fā)器時(shí),轉(zhuǎn)發(fā)器將負(fù)責(zé)處理外部通信,從而將DNS服務(wù)器有限地暴露給公網(wǎng)。轉(zhuǎn)發(fā)器將建立外部DNS信息的巨大緩存,因?yàn)榫W(wǎng)絡(luò)中的所有外部DNS查詢都是通過它解析的。你在很短的時(shí)間內(nèi),轉(zhuǎn)發(fā)器將使用該緩存數(shù)據(jù)解析大部分外部DNS查詢,從而減少網(wǎng)絡(luò)的Internet通信與DNS客戶端的響應(yīng)時(shí)間。
2、轉(zhuǎn)發(fā)的原理:
轉(zhuǎn)發(fā)是一種鏈?zhǔn)浇Y(jié)構(gòu),如下圖所示:
(1)當(dāng)本地DNS服務(wù)器(也是轉(zhuǎn)發(fā)器)收到查詢時(shí),它會嘗試使用它主持和緩存的主要和輔助區(qū)域解析該查詢;
(2)如果不能使用本地?cái)?shù)據(jù)解析查詢,此時(shí)它作為客戶端,會將查詢轉(zhuǎn)發(fā)給外網(wǎng)DNS服務(wù)器;
(3)本地DNS(轉(zhuǎn)發(fā)器)收到客戶端的請求后會等待一段很短的時(shí)間,等待來自外網(wǎng)DNS的應(yīng)答;
(4)對于外網(wǎng)DNS來說,它接收到的查詢請求是遞歸查詢,此時(shí),它自己需要向外層層迭代找到最終答案返回給轉(zhuǎn)發(fā)器(此時(shí)轉(zhuǎn)發(fā)器作為DNS客戶端)
(5)轉(zhuǎn)發(fā)器將外網(wǎng)DNS返回的查詢結(jié)果送到客戶端(非權(quán)威答案),完成解析過程。
注:轉(zhuǎn)發(fā)的前提——接收轉(zhuǎn)發(fā)請求的服務(wù)器(這里是外網(wǎng)DNS)必須能夠?yàn)檎埱笳?#xff08;這里是本地DNS,也是轉(zhuǎn)發(fā)器)做遞歸查詢;
3、轉(zhuǎn)發(fā)的類型:
??? (1)無條件轉(zhuǎn)發(fā):轉(zhuǎn)發(fā)所有針對非本機(jī)負(fù)責(zé)解析的區(qū)域的請求;?
???????
??? (2)條件轉(zhuǎn)發(fā):僅轉(zhuǎn)發(fā)對特定區(qū)域的請求(即轉(zhuǎn)發(fā)域); zone "區(qū)域名稱" IN {type forward; forwarders { ip; }; forward ; };
【舉例說明】
######################################規(guī)劃轉(zhuǎn)發(fā)器#################################################
上面的例子中,子域DNS(192.168.80.12主機(jī))無法與外網(wǎng)通信,且無法解析父域;
輔助DNS服務(wù)器(192.168.80.13主機(jī))能夠與外網(wǎng)通信,現(xiàn)在將其作為子域DNS的轉(zhuǎn)發(fā)器;
1、無條件轉(zhuǎn)發(fā):在子域DNS上設(shè)置轉(zhuǎn)發(fā),讓子域能夠解析父域且能夠通過轉(zhuǎn)發(fā)器解析公網(wǎng)的查詢:
第一步、在子域DNS上配置轉(zhuǎn)發(fā)。修改主配置文件/etc/named.conf,實(shí)現(xiàn)無條件轉(zhuǎn)發(fā)即轉(zhuǎn)發(fā)所有非本機(jī)負(fù)責(zé)解析的區(qū)域的請求:
第二步、重新加載配置文件,并清空DNS緩存:
[root@Centos ~]# rndc reconfig [root@Centos ~]# rndc flush第三步、用dig命令進(jìn)行測試,看看通過轉(zhuǎn)發(fā)子域是否能夠解析父域:
第四步、用dig命令測試,看看通過轉(zhuǎn)發(fā)能否解析外網(wǎng)的查詢:
可以看出,通過無條件轉(zhuǎn)發(fā),可以解析針對非本地負(fù)責(zé)的區(qū)域的查詢哈。
現(xiàn)在假設(shè)這樣一個(gè)場景:
如果子域DNS能夠與外網(wǎng)通信而轉(zhuǎn)發(fā)器DNS服務(wù)器(192.168.80.13主機(jī))不能與外網(wǎng)通信,并且子域DNS能夠根據(jù)根提示做DNS查詢,那么將轉(zhuǎn)發(fā)選項(xiàng)設(shè)置為“first”,結(jié)果怎樣呢?
(1)設(shè)置外網(wǎng)網(wǎng)關(guān),讓子域DNS服務(wù)器能夠與外網(wǎng)通信:
(2)在轉(zhuǎn)發(fā)器DNS服務(wù)器(192.168.80.13主機(jī))上,設(shè)置網(wǎng)關(guān),讓其無法與外網(wǎng)通信:
(3)在子域DNS上修改主配置文件,把轉(zhuǎn)發(fā)選項(xiàng)改為”first“:
(4)重新加載子域DNS的配置文件并清除DNS緩存:
(5)用dig命令測試,看是否還能夠解析外網(wǎng)的區(qū)域:
能夠解析哈,說明不能從轉(zhuǎn)發(fā)器查詢外網(wǎng)之后,它自己用根提示出去迭代查詢到了結(jié)果。
2、條件轉(zhuǎn)發(fā):配置轉(zhuǎn)發(fā)域,使得只對test.com域的查詢能夠通過轉(zhuǎn)發(fā)器解析:
第一步、修改主配置文件/etc/named.conf,將上例中的無條件轉(zhuǎn)發(fā)選項(xiàng)注釋掉:
第二步、修改/etc/named.rfc1912.zone,配置轉(zhuǎn)發(fā)域test.com:
第三步、在轉(zhuǎn)發(fā)器DNS服務(wù)器上(192.168.80.13主機(jī)),設(shè)置“允許遞歸”:
第四步、在子域DNS上用dig命令進(jìn)行測試,看是否可以解析轉(zhuǎn)發(fā)域:
能夠解析哈,那現(xiàn)在是否可以解析baidu.com呢?試試看哈。
不能解析哈。
三、DNS的ACL配置:
1、問題的引入:為什么需要ACL?
因?yàn)榘踩虳NS服務(wù)器性能,如果沒有ACL,那么任何人都可以到我們的DNS服務(wù)器上做遞歸查詢,這樣是非常危險(xiǎn)的。而且DNS的區(qū)域傳送是多主復(fù)制,如果不設(shè)置ACL,那么任何主機(jī)都可以到我們的DNS上來做完全區(qū)域傳送,這也是很危險(xiǎn)的,而且會讓我們的DNS服務(wù)器忙死。
2、BIND的ACL:
(1)BIND中常用4個(gè)常用的控制指令:
//允許做區(qū)域傳送的指令//允許做查詢的指令//允許做遞歸查詢的ip列表,一般來說只允許給本地客戶端做遞歸查詢//用于DDNS(動(dòng)態(tài)DNS:與DHCP聯(lián)動(dòng)),比較危險(xiǎn),一般不允許更新數(shù)據(jù)文件(2)BIND的ACL:
如果allow-transfer 和 allow-query 放到區(qū)域配置中一般后期修改ip地址會非常的麻煩,所以可以定義acl訪問規(guī)則:
#對于配置文件的格式以及參數(shù)調(diào)整,具體可以查看man手冊 ,命令:man named.conf
定義acl的格式如下:
acl 名稱 定義acl規(guī)則可以看到如上所示信息,定義格式非常簡單:使用bind訪問控制列表,明確定義一組客戶端或者一組主機(jī)并使用一個(gè)名稱來定義它們;
其中,定義的參數(shù)有四種,分別是:any、none、local、localnet。
acl只有先定義才可以使用,因此acl定義必須在acl調(diào)用的最上方即放在配置文件的最上方。
【配置ACL】
在子域DNS上配置ACL,只允許本機(jī)地址127.0.0.1查詢:
(1)先定義acl:
(2)acl定義后需要應(yīng)用在區(qū)域文件中(編輯區(qū)域配置文件/etc/named.rfc1912.zone):
(3)重新載入配置文件;
(4)驗(yàn)證結(jié)果(在子域DNS服務(wù)器上用dig命令測試):
首先用本機(jī)的IP地址192.168.80.12來解析:
拒絕查詢哈!
然后用127.0.0.1來解析:
能夠解析哈,說明ACL起作用了。
四、通過VIEW實(shí)現(xiàn)智能DNS:
1、BIND VIEW是什么:
BIND的view是基于人的腦裂(brain split)原理,靈活控制哪些客戶機(jī)能看到哪個(gè)view視圖的訪問控制列表,view功能可以實(shí)現(xiàn)不同網(wǎng)段發(fā)出同樣的請求卻得到不同的DNS解析結(jié)果,可以有效的分流網(wǎng)絡(luò)流量,提高訪問控制能力。
2、VIEW語句的介紹:
通過view語句可以完成DNS的智能解析功能,其語法如下:?
3、配置VIEW,實(shí)現(xiàn)智能DNS解析:
######################################規(guī)劃VIEW##################################################
實(shí)驗(yàn)拓?fù)溥€是采用子域授權(quán)的那一個(gè),每個(gè)虛擬機(jī)上都配置了兩塊網(wǎng)卡(參見拓?fù)鋱D),將來自192.168.80.0/24網(wǎng)段的IP作為內(nèi)網(wǎng)的主機(jī),192.168.1.0/24網(wǎng)段的IP和所有其它IP作為外網(wǎng)的主機(jī),用win7物理機(jī)與虛擬機(jī)通信時(shí),訪問192.168.80.0/24網(wǎng)段采用的是NAT地址轉(zhuǎn)換,會將物理機(jī)的IP地址192.168.1.3轉(zhuǎn)換為192.168.80.254來訪問。使用acl來定義控制列表。
【配置VIEW】
(1)在主DNS(192.168.80.11主機(jī))上,編輯主配置文件/etc/named.conf,配置acl和view:
options {directory "/var/named"; };acl internal { //定義acl列表,來自192.168.80.0/24網(wǎng)段的客戶端均為內(nèi)網(wǎng)用戶192.168.80.0/24; };acl external { //定義acl列表,來自192.168.1.0/24網(wǎng)段的客戶端均為外網(wǎng)用戶192.168.1.0/24; };view "internal" { //內(nèi)網(wǎng)視圖,定義了內(nèi)網(wǎng)主機(jī)查詢所使用的區(qū)域解析庫文件match-clients { internal; };recursion yes;zone "test.com" IN {type master;file "internal.test.com.zone";}; };view "external" { //外網(wǎng)視圖,定義了外網(wǎng)主機(jī)查詢所使用的區(qū)域解析庫文件match-clients { external; };recursion yes;zone "test.com" IN {type master;file "external.test.com.zone";}; };(2)使用named-checkconf來檢測主配置文件是否有存在語法錯(cuò)誤:
[root@Centos ~]# named-checkconf [root@Centos ~]#(3)分別創(chuàng)建內(nèi)外網(wǎng)用戶訪問test.com域服務(wù)器所使用的正向解析區(qū)域文件:
內(nèi)網(wǎng)(internal)的zone文件/var/named/internal.test.com.zone :
外網(wǎng)(external)的zone文件/var/named/external.test.com.zone :
(4)將internal和external所使用的解析區(qū)域數(shù)據(jù)文件的屬組及權(quán)限分別改為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所使用的區(qū)域數(shù)據(jù)文件是否存在語法錯(cuò)誤;
(6)重新加載配置文件和區(qū)域文件,并打開查詢?nèi)罩?#xff1a;
[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網(wǎng)段上進(jìn)行測試,并查看結(jié)果:
說明:我的win7物理機(jī)的IP是192.168.1.3,DNS服務(wù)器上配置了兩塊網(wǎng)卡,IP地址分別為192.168.80.11和192.168.1.58
查詢?nèi)罩镜那闆r如下:
訪問的是內(nèi)網(wǎng)視圖,物理機(jī)的IP(192.168.1.3)被轉(zhuǎn)換成了192.168.80.254;
查詢?nèi)罩厩闆r如下:
由此,通過VIEW實(shí)現(xiàn)了智能DNS哈。
【小結(jié)】
本次博文主要知識點(diǎn):
1、DNS的子域授權(quán):
- 子域的概念:在域內(nèi)劃分出小域即為子域。
- 授權(quán)也稱為委派,子域授權(quán)的步驟:
(1)劃分子域
(2)完成授權(quán)
- 授權(quán)是自上而下的過程,父域知道子域的存在并知道子域的主DNS服務(wù)器地址(父域的名稱解析庫中有子域的NS記錄和主機(jī)A記錄),而子域并不知道父域的存在,因此子域需要從根域開始查找。
- 如果想讓子域解析父域,最簡單的辦法就是設(shè)置轉(zhuǎn)發(fā)。
2、DNS的轉(zhuǎn)發(fā):
轉(zhuǎn)發(fā)的前提——接收轉(zhuǎn)發(fā)請求的服務(wù)器必須能夠?yàn)檎埱笳咦鲞f歸查詢;
(1)無條件轉(zhuǎn)發(fā):轉(zhuǎn)發(fā)所有針對非本機(jī)負(fù)責(zé)解析的區(qū)域的請求;#在主配置文件/etc/named.conf的全局選項(xiàng)中添加如下內(nèi)容: options { forwarders { ip; }; forward ; };
(2)條件轉(zhuǎn)發(fā):僅轉(zhuǎn)發(fā)對特定區(qū)域的請求(即轉(zhuǎn)發(fā)域); zone "區(qū)域名稱" IN {type forward; forwarders { ip; }; forward ; };
3、BIND的ACL:
(1)BIND中常用4個(gè)常用的控制指令:
//允許做區(qū)域傳送的指令//允許做查詢的指令//允許做遞歸查詢的ip列表,一般來說只允許給本地客戶端做遞歸查詢//用于DDNS(動(dòng)態(tài)DNS:與DHCP聯(lián)動(dòng)),比較危險(xiǎn),一般不允許更新數(shù)據(jù)文件(2)BIND的ACL定義:
acl 名稱 定義acl規(guī)則其中,定義的參數(shù)有四種,分別是:any、none、local、localnet。
acl只有先定義才可以使用,因此acl定義必須在acl調(diào)用的最上方即放在配置文件的最上方。
4、通過視圖(view)實(shí)現(xiàn)智能DNS:
通過view語句可以完成DNS的智能解析功能,其語法如下:
本次博文的內(nèi)容就這么多哈,下次我們給出一個(gè)綜合案例來總結(jié)下DNS的知識;歡迎各位大大拍磚~~
轉(zhuǎn)載于:https://blog.51cto.com/sweetpotato/1607383
總結(jié)
以上是生活随笔為你收集整理的Linux运维实战之DNS的高级配置(转发器、视图等)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JUnit 测试
- 下一篇: Bootstrap在线编辑器简单分享