1.? 概述
在網(wǎng)絡(luò)環(huán)境中一般用戶(hù)只需要在瀏覽器中輸入url如www.sunny.com就可以到對(duì)應(yīng)服務(wù)器獲取相應(yīng)的信息蔓姚。事實(shí)上服務(wù)器是不能根據(jù)www.sunny.com這樣的地址找到對(duì)應(yīng)的服務(wù)需要需要根據(jù)ip來(lái)找到對(duì)應(yīng)的服務(wù)。那么網(wǎng)絡(luò)上ip是怎么得到的呢這就要得益于dns服務(wù)器的工作氓润。本文將對(duì)dns的工作原理dns常見(jiàn)的服務(wù)設(shè)置進(jìn)行介紹最后本文將附上一篇dns自動(dòng)化腳本方便用戶(hù)快速搭建dns服務(wù)器赂乐。
2 原理介紹
DNS( Domain Name System)是“域名系統(tǒng)”的英文縮寫(xiě)是一種組織成域?qū)哟谓Y(jié)構(gòu)的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)命名系統(tǒng)它用于TCP/IP網(wǎng)絡(luò)它所提供的服務(wù)是用來(lái)將主機(jī)名和域名轉(zhuǎn)換為IP地址的工作。
DNS的域名結(jié)構(gòu)如下
根域: 全世界只有13臺(tái)這13臺(tái)根域名服務(wù)器應(yīng)該是理解為13組有13個(gè)根域ip地址名字分別為“A”至“M”1個(gè)為主根服務(wù)器在美國(guó)咖气。其余12個(gè)均為輔根服務(wù)器其中9個(gè)在美國(guó)歐洲2個(gè)位于英國(guó)和瑞典亞洲1個(gè)位于日本挨措。
頂級(jí)域即一級(jí)域名Top Level Domain: tld
com, edu, mil, gov, net, org, int,arpa
三類(lèi)組織域、國(guó)家域(.cn, .ca, .hk, .tw)崩溪、反向域
最多是允許127級(jí)域名浅役。
ICANNThe Internet Corporation for Assigned Names and Numbers互聯(lián)網(wǎng)名稱(chēng)與數(shù)字地址分配機(jī)構(gòu)負(fù)責(zé)在全球范圍內(nèi)對(duì)互聯(lián)網(wǎng)通用頂級(jí)域名gTLD以及國(guó)家和地區(qū)頂級(jí)域名ccTLD系統(tǒng)的管理、以及根服務(wù)器系統(tǒng)的管理
這里涉及正向解析和反向解析兩個(gè)概念
FQDN: Fully Qualified Domain Name ?完全合格的域名如www.sunny.com
正向解析將FQDN 解析為 IP
反向解析將IP 解析為 FQDN
解析過(guò)程如下
Client -->hosts文件-->DNS Service Local Cache--> DNS Server (recursion遞歸查看本地配置的解析文件) --> Server Cache --> iteration(迭代) --> 根--> 頂級(jí)域名DNS-->二級(jí)域名DNS…最終本地dns查看結(jié)果后返回給客戶(hù)端
詳細(xì)過(guò)程解釋如下
1伶唯、在瀏覽器中輸入www.sunny.com域名操作系統(tǒng)會(huì)先檢查自己本地的/etc/hosts文件是否有這個(gè)網(wǎng)址映射關(guān)系如果有就先調(diào)用這個(gè)IP地址映射完成域名解析觉既。
2、如果/etc/hosts里沒(méi)有這個(gè)域名的映射則查找本地DNS解析器緩存是否有這個(gè)網(wǎng)址映射關(guān)系如果有直接返回完成域名解析。
3瞪讼、如果hosts與本地DNS解析器緩存都沒(méi)有相應(yīng)的網(wǎng)址映射關(guān)系首先會(huì)找TCP/ip參數(shù)中設(shè)置的首選DNS服務(wù)器在此我們叫它本地DNS服務(wù)器此服務(wù)器收到查詢(xún)時(shí)如果要查詢(xún)的域名包含在本地配置區(qū)域資源中則返回解析結(jié)果給客戶(hù)機(jī)完成域名解析此解析具有權(quán)威性钧椰。
4、如果要查詢(xún)的域名不由本地DNS服務(wù)器區(qū)域解析但該服務(wù)器已緩存了此網(wǎng)址映射關(guān)系則調(diào)用這個(gè)IP地址映射完成域名解析此解析不具有權(quán)威性符欠。
5嫡霞、如果本地DNS服務(wù)器本地區(qū)域文件與緩存解析都失效則根據(jù)本地DNS服務(wù)器的設(shè)置是否設(shè)置轉(zhuǎn)發(fā)器進(jìn)行查詢(xún)?nèi)绻从棉D(zhuǎn)發(fā)模式本地DNS就把請(qǐng)求發(fā)至13臺(tái)根DNS根DNS服務(wù)器收到請(qǐng)求后會(huì)判斷這個(gè)域名(.com)是誰(shuí)來(lái)授權(quán)管理并會(huì)返回一個(gè)負(fù)責(zé)該頂級(jí)域名服務(wù)器的一個(gè)IP。本地DNS服務(wù)器收到IP信息后將會(huì)聯(lián)系負(fù)責(zé).com域的這臺(tái)服務(wù)器希柿。這臺(tái)負(fù)責(zé).com域的服務(wù)器收到請(qǐng)求后如果自己無(wú)法解析它就會(huì)找一個(gè)管理.com域的下一級(jí)DNS服務(wù)器地址(sunny.com)給本地DNS服務(wù)器诊沪。當(dāng)本地DNS服務(wù)器收到這個(gè)地址后就會(huì)找sunny.com域服務(wù)器重復(fù)上面的動(dòng)作進(jìn)行查詢(xún)直至找到www.sunny.com主機(jī)。
6曾撤、如果用的是轉(zhuǎn)發(fā)模式此DNS服務(wù)器就會(huì)把請(qǐng)求轉(zhuǎn)發(fā)至上一級(jí)DNS服務(wù)器由上一級(jí)服務(wù)器進(jìn)行解析上一級(jí)服務(wù)器如果不能解析或找根DNS或把轉(zhuǎn)請(qǐng)求轉(zhuǎn)至上上級(jí)以此循環(huán)端姚。不管是本地DNS服務(wù)器用是是轉(zhuǎn)發(fā)還是根提示最后都是把結(jié)果返回給本地DNS服務(wù)器由此DNS服務(wù)器再返回給客戶(hù)機(jī)。
以上的解析中涉及到dns的兩種查詢(xún)類(lèi)型即 遞歸查詢(xún)和迭代查詢(xún)
遞歸查詢(xún)客戶(hù)端向服務(wù)器查詢(xún)叫遞歸查詢(xún)
迭代查詢(xún)DNS之間的查詢(xún)叫迭代查詢(xún)?nèi)绮樵?xún)www.sunny.com本地dns先詢(xún)問(wèn)根根返回結(jié)果讓本地dns去詢(xún)問(wèn)com.這臺(tái)dns然后本地查詢(xún)com.這臺(tái)dnscom.這臺(tái)返回給本地dns讓其去查詢(xún)sunny.com.這臺(tái)dns本地dns再次查詢(xún)sunny.com.這臺(tái)dns最終sunny.com.這臺(tái)dns告訴本地dnswww.sunny.com的地址挤悉。迭代查詢(xún)結(jié)束
3 dns常見(jiàn)服務(wù)搭建
dns啟用的是C/S結(jié)構(gòu)同時(shí)用到TCP和UDP的53端口還有TCP953端口渐裸。
UDP的53端口用于供用戶(hù)查詢(xún)同時(shí)也是用于主從服務(wù)器的同步
TCP的53端口用來(lái)提供同步主從服務(wù)器的zone文件
tcp的953端口是用來(lái)管理dns服務(wù)器的端口通過(guò)rndc(remote name domain controller)這個(gè)工具進(jìn)行管理rndc--> rndc(953/tcp)
rndcCOMMAND
.COMMAND:
reload: 重載主配置文件和區(qū)域解析庫(kù)文件
reload zonename: 重載區(qū)域解析庫(kù)文件
retransfer zonename: 手動(dòng)啟動(dòng)區(qū)域傳送,而不管序列號(hào)是否增加
notify zonename: 重新對(duì)區(qū)域傳送發(fā)通知
reconfig: 重載主配置文件
querylog: 開(kāi)啟或關(guān)閉查詢(xún)?nèi)罩疚募?var/log/message
trace: 遞增debug一個(gè)級(jí)別
trace LEVEL: 指定使用的級(jí)別
notrace:將調(diào)試級(jí)別設(shè)置為0
flush:清空DNS服務(wù)器的所有緩存記錄
需要安裝的包如下
bind服務(wù)器
bind-libs相關(guān)庫(kù)
bind-utils:客戶(hù)端
bind-chroot:啟用bind-chroot相當(dāng)于是通過(guò)目錄掛載目錄的操作實(shí)現(xiàn)了文件搬家的效果dns服務(wù)相關(guān)的配置會(huì)被重新掛載到/var/named/chroot/目錄下把dns相關(guān)的文件的目錄和文件都進(jìn)行了搬家原來(lái)的路徑和文件還是可以正常訪問(wèn)如果dns被攻擊了那么受到的危害只會(huì)存在/chroot這個(gè)目錄下
3.1 配置文件介紹
.服務(wù)腳本和名稱(chēng)
CentOS6上/etc/rc.d/init.d/named
CentOS7上/usr/lib/systemd/system/named.service
這里介紹dns服務(wù)中涉及到的四類(lèi)配置文件etc/named.conf,/etc/named.rfc1912.zones/var/named/named.ca/var/named/下的正反向資源記錄文件
named.conf
這個(gè)文件總共就記錄三部分內(nèi)容
option配置各種全局的選項(xiàng)
loggin配置和log相關(guān)的文件
zone配置區(qū)域數(shù)據(jù)庫(kù)即服務(wù)器的資源記錄本機(jī)能夠?yàn)槟男﹝one進(jìn)行解析就要定義哪些zone配置區(qū)域數(shù)據(jù)庫(kù)即服務(wù)器的資源記錄
include在配置文件里關(guān)鍵字include表示包含別的配置文件
配置文件每一行都是以分號(hào)結(jié)束
任何服務(wù)程序如果期望其能夠通過(guò)網(wǎng)絡(luò)被其它主機(jī)訪問(wèn)至少應(yīng)該監(jiān)聽(tīng)在一個(gè)能與外部主機(jī)通信的IP地址上
option中有以下五個(gè)選項(xiàng)装悲,介紹如下
allow-query?{}:允許查詢(xún)的主機(jī)橄仆;白名單
allow-transfer?{}:允許區(qū)域傳送的主機(jī);白名單
allow-transfer?{192.168.32.63;192.168.32.71}衅斩,允許指定的ip來(lái)復(fù)制配置文件
allow-recursion?{}:?允許遞歸的主機(jī),建議全局使用
allow-update?{}:?允許更新區(qū)域數(shù)據(jù)庫(kù)中的內(nèi)容
named.rfc1912.zones
這個(gè)是區(qū)域配置文件這些zone配置也可以直接配置在named.conf這個(gè)配置文件里但是一般不建議配置文件太大所n以把對(duì)zone的配置單獨(dú)分離出來(lái)放在named.rfc1912.zones這個(gè)配置文件里。
named.rfc1912.zones這個(gè)文件里的一段配置為例子說(shuō)明
zone?"localhost"?IN?{
type?master;
file?"named.localhost";
allow-update?{?none;?};
};
zone后面的雙引號(hào)內(nèi)localhost是域名表示要解析哪個(gè)域的內(nèi)容
其中urlwww.sunny.comwww是服務(wù)器的主機(jī)名sunny.com是域名
IN表示internet記錄
type類(lèi)型
file區(qū)域數(shù)據(jù)庫(kù)文件如sunny.com.zone這個(gè)文件在目錄/var/named下面其中/var/named/named.localhost是zone模板可以直接拷貝這個(gè)文件進(jìn)行修改拷貝注意要加-p要不然組為named會(huì)被更改掉
allow-update是指運(yùn)行從客戶(hù)端直接運(yùn)行語(yǔ)句對(duì)數(shù)據(jù)庫(kù)解析文件進(jìn)行修改這個(gè)配置只在主服務(wù)器上配置
/var/named/named.ca
named.ca這個(gè)文件是根的資源解析文件默認(rèn)是記錄13臺(tái)根服務(wù)器的NS和A記錄
/var/named/下的正反向資源記錄文件
注意
(1) 一臺(tái)物理服務(wù)器可同時(shí)為多個(gè)區(qū)域提供解析
(2) 必須要有根區(qū)域文件named.ca
(3) 應(yīng)該有兩個(gè)如果包括ipv6的應(yīng)該更多實(shí)現(xiàn)localhost和本地回環(huán)地址的解析庫(kù)
記錄了dns服務(wù)器中的正向和方向解析的資源怠褐。這個(gè)文件是由多個(gè)資源記錄RR:Resource Record組成的畏梆。每個(gè)資源記錄都有各自的記錄類(lèi)型A, AAAA, PTR, SOA, NS, CNAME, MX。
.SOAStart Of Authority起始授權(quán)記錄一個(gè)區(qū)域解析庫(kù)有且僅能有一個(gè)SOA記錄必須位于解析庫(kù)的第一條記錄
.Ainternet Address作用FQDN --> IP
.AAAA: FQDN --> IPv6
.PTR: PoinTeRIP --> FQDN反向解析記錄
.NS: Name Server專(zhuān)用于標(biāo)明當(dāng)前區(qū)域的DNS服務(wù)器
@符號(hào)在dns中代表本域
A記錄和NS記錄是配對(duì)出現(xiàn)的要一起配置NS一般配置在A記錄之前
.CNAMECanonical Name別名記錄
.MX:Mail eXchanger郵件交換器發(fā)郵件的時(shí)候是先查dns然后在把這個(gè)郵件發(fā)到dns對(duì)應(yīng)的郵箱服務(wù)器的ip的郵箱里比如MX后面的10和20值越小優(yōu)先級(jí)越高優(yōu)先使用
接下來(lái)分別針對(duì)每個(gè)記錄類(lèi)型進(jìn)行詳細(xì)介紹
資源記錄定義的格式
語(yǔ)法name? [TTL]? IN rr_type value
.注意
.(1) TTL可從全局繼承,這里是以時(shí)間為單位生命期表示客戶(hù)機(jī)用戶(hù)緩存的有效期默認(rèn)是1天可以修改如果不寫(xiě)就是默認(rèn)的1天
.(2) @可用于引用當(dāng)前區(qū)域的名字也可以用當(dāng)前的域名來(lái)表示如sunny.com.注意com后面的點(diǎn)號(hào)要加上
.(3) 同一個(gè)名字可以通過(guò)多條記錄定義多個(gè)不同的值即ip此時(shí)
DNS服務(wù)器會(huì)以輪詢(xún)方式響應(yīng)
.(4) 同一個(gè)值也可能有多個(gè)不同的定義名字通過(guò)多個(gè)不同的名字指向同一個(gè)值進(jìn)行定義此僅表示通過(guò)多個(gè)不同的名字可以找到同一個(gè)主機(jī)
.(5)$ORIGIN 功能是告知這個(gè)域的域名奈懒。假設(shè)有一個(gè)域名是test.net.奠涌,服務(wù)器名稱(chēng)定義為linux,這里定義$ORIGIN? . ($ORIGIN后面有一個(gè)點(diǎn)號(hào))而不是定義為$ORIGIN? test.net.如果手工在前面加$ORIGIN .的話(huà)磷杏,默認(rèn)域就不是test.net了溜畅,所以在test.net這個(gè)文件中就要用FQDN了,不能用IN NS linux的形式极祸,要寫(xiě)成test.net.??IN NS linux.test.net.
SOA記錄
soa是授權(quán)服務(wù)器回復(fù)給查詢(xún)者SOA記錄表明了誰(shuí)是這個(gè)區(qū)域的所有者即表明自己管理此zone并告知序列號(hào)慈格、刷新時(shí)間、過(guò)期時(shí)間等
.name: 當(dāng)前區(qū)域的名字例如“sunny.com.”
.value: 有多部分組成
.(1) 當(dāng)前區(qū)域的主DNS服務(wù)器的FQDN也可以使用當(dāng)前區(qū)域的名字
.(2) 當(dāng)前區(qū)域管理員的郵箱地址但地址中不能使用@符號(hào)一般用.替換
例如linuxedu.sunny.com
.(3) 主從服務(wù)區(qū)域傳輸相關(guān)定義以及否定的答案的統(tǒng)一的TTL
SOA的格式如下
域名可以用@代替TTL?? IN?? SOA???? dns的server名稱(chēng)郵箱
例子
sunny.com.?86400?IN?SOA?ns.sunny.com.
nsadmin.sunny.com.?(
2017092201?;序列號(hào)
2H?;刷新時(shí)間
10M;重試時(shí)間
1W;過(guò)期時(shí)間
1D;否定答案的TTL值
)
dns數(shù)據(jù)庫(kù)的內(nèi)容如下遥金。這個(gè)文件要自己在/var/named下創(chuàng)建后綴為.zone
dns的server名稱(chēng)可以理解為是注釋用的沒(méi)有實(shí)際作用可以自己指定只要這個(gè)名稱(chēng)和下面配置的A記錄要解析的服務(wù)器一致就可以
郵箱郵箱地址@在dns里有特殊含義表示本域所以要把@符號(hào)換成點(diǎn)號(hào)浴捆。如admin@sunny.com.要改成admin.sunny.com.注意這里以.號(hào)結(jié)束
named.localhost里SOA這條記錄中列號(hào)、刷新時(shí)間稿械、過(guò)期時(shí)間字段解釋如下
序列號(hào)serial解析庫(kù)版本號(hào)主服務(wù)器解析庫(kù)變化時(shí)其序列要手動(dòng)將其遞增版本號(hào)決定該數(shù)據(jù)庫(kù)內(nèi)容是否更新這個(gè)數(shù)字很關(guān)鍵如果dns數(shù)據(jù)庫(kù)有更新這個(gè)數(shù)值要手動(dòng)更新.版本號(hào)最長(zhǎng)10位可以用日期來(lái)作為版本的信息如2017091901
刷新時(shí)間間隔?? refresh從服務(wù)器從主服務(wù)器請(qǐng)求同步解析的時(shí)間間隔
重試時(shí)間間隔retry從服務(wù)器請(qǐng)求同步失敗時(shí)再次嘗試時(shí)間間隔這里相當(dāng)于是pull操作
過(guò)期時(shí)長(zhǎng)expire從服務(wù)器聯(lián)系不到主服務(wù)器時(shí)多久后停止服務(wù)如果超過(guò)這個(gè)時(shí)間還沒(méi)刷新就表示這個(gè)從dns異常該從服務(wù)器將不提供查詢(xún)
最短時(shí)間minimum是指否定結(jié)果的緩存期當(dāng)失敗的時(shí)候也會(huì)緩存緩存時(shí)間就是這個(gè)時(shí)間如當(dāng)用戶(hù)輸入輸入的地址如wwwwww.baidu.com,這個(gè)url是錯(cuò)誤的得到了否定的答案即dns服務(wù)器經(jīng)過(guò)解析后發(fā)現(xiàn)這個(gè)是錯(cuò)誤的地址會(huì)把這個(gè)信息緩存下來(lái)請(qǐng)求的條目不存在等原因?qū)е聼o(wú)法返回結(jié)果在這個(gè)minimum時(shí)間段內(nèi)用戶(hù)再次訪問(wèn)這個(gè)錯(cuò)誤的urldns會(huì)直接返回錯(cuò)誤而不再次進(jìn)行查詢(xún)
主從服務(wù)器在同步時(shí)即更新數(shù)據(jù)庫(kù)文件有兩種機(jī)制
push: 推機(jī)制主服務(wù)器push給從服務(wù)器主服務(wù)器有變則主動(dòng)推送給從服務(wù)器瞬間完成选泻。
pull: 拉機(jī)制從服務(wù)器pull主服務(wù)器從服務(wù)器定期地同步主服務(wù)器即刷新時(shí)間間隔。如果刷新時(shí)間失敗則在重試時(shí)間間隔再次同步。源文檔<http://www.178linux.com/49999>
NS記錄
.name:??當(dāng)前區(qū)域的名字
.value: 當(dāng)前區(qū)域的某DNS服務(wù)器的名字例如?ns.sunny.com.
.注意一個(gè)區(qū)域可以有多個(gè)NS記錄
例如
sunny.com.???IN???NS??ns1.sunny.com.
sunny.com.???IN???NS??ns2.sunny.com.
.注意
(1) 相鄰的兩個(gè)資源記錄的name相同時(shí)后續(xù)的可省略
(2) 對(duì)NS記錄而言任何一個(gè)ns記錄后面的服務(wù)器名字都應(yīng)該在后續(xù)有一個(gè)A記錄
MX記錄
.name: 當(dāng)前區(qū)域的名字
.value: 當(dāng)前區(qū)域的某郵件服務(wù)器(smtp服務(wù)器)的主機(jī)名
.一個(gè)區(qū)域內(nèi)MX記錄可有多個(gè)但每個(gè)記錄的value之前應(yīng)該有一個(gè)數(shù)字(0-99)表示此服務(wù)器的優(yōu)先級(jí)數(shù)字越小優(yōu)先級(jí)越高
.例如
sunny.com.??IN??MX?10?mx1.sunny.com.
IN??MX?20?mx2.sunny.com.
.注意
對(duì)MX記錄而言任何一個(gè)MX記錄后面的服務(wù)器名字都應(yīng)該在后續(xù)有一個(gè)A記錄
A記錄
.name: 某主機(jī)的FQDN例如www.sunny.com.
.value: 主機(jī)名對(duì)應(yīng)主機(jī)的IP地址
.例如
www.sunny.com.???IN?A?1.1.1.1
www.sunny.com.??IN?A???2.2.2.2
mx1.sunny.com.
IN?A?????3.3.3.3
mx2.sunny.com.
IN?A??????4.4.4.4
$GENERATE?1-254
HOST$?A?1.2.3.$
$GENERATE
1-254?HOST$?A?1.2.3.$
#?表示HOST1?對(duì)應(yīng)的ip是1.2.3.1HOST100?對(duì)應(yīng)的解析ip是1.2.3.100
*.sunny.com.?IN?A
5.5.5.5
sunny.com.???IN
A???????6.6.6.6
@???IN?A?192.168.25.123
.避免用戶(hù)寫(xiě)錯(cuò)名稱(chēng)時(shí)給錯(cuò)誤答案可通過(guò)泛域名解析進(jìn)行解析至某特定地址
以下兩個(gè)寫(xiě)法
*.sunny.com表示服務(wù)器端這邊沒(méi)有定義的都是指向規(guī)定的ip表示當(dāng)用戶(hù)輸入sunny前面的任何東西都是可以被解析為192.168.25.106這個(gè)ip如輸入aaaa.sunny.com結(jié)果會(huì)被指向192.168.25.106這個(gè)ip對(duì)應(yīng)的網(wǎng)頁(yè)
@?? IN A 192.168.25.123表示當(dāng)用戶(hù)輸入sunny.com的時(shí)候(sunny前不輸入任何內(nèi)容)就會(huì)解析成192.168.25.123這個(gè)ip
AAAA記錄
指向IPV6地址
name: FQDN
value: IPv6
PTR記錄
反向解析地址到域名
PTR是pointer的簡(jiǎn)寫(xiě)用于將一個(gè)IP地址映射到對(duì)應(yīng)的域名也可以看成是A記錄的反向IP地址的反向解析页眯。PTR主要用于郵件服務(wù)器比如郵箱AAA@XXX.com給郵箱BBB@yahoo.com發(fā)了一封郵件yahoo郵件服務(wù)器接到郵件時(shí)會(huì)查看這封郵件的頭文件并分析是由哪個(gè)IP地址發(fā)出來(lái)的然后根據(jù)這個(gè)IP地址進(jìn)行反向解析如果解析結(jié)果對(duì)應(yīng)XXX.com的IP地址就接受這封郵件反之則拒絕接收這封郵件梯捕。
源文檔<http://www.cnblogs.com/zcy_soft/archive/2013/09/23/3335235.html>
name: IP有特定格式把IP地址反過(guò)來(lái)寫(xiě)1.2.3.4要寫(xiě)
作4.3.2.1而有特定后綴in-addr.arpa.所以完整寫(xiě)法為
4.3.2.1.in-addr.arpa.
value: FQDN
.例如
4.3.2.1.in-addr.arpa. ?IN ?PTRwww.sunny.com.
如1.2.3為網(wǎng)絡(luò)地址可簡(jiǎn)寫(xiě)成
4 IN PTRwww.sunny.com.
.注意網(wǎng)絡(luò)地址及后綴可省略主機(jī)地址依然需要反著寫(xiě)
CNAME記錄
CNAMECanonical Name別名記錄允許您將多個(gè)名字映射到同一臺(tái)計(jì)算機(jī)。通常用于同時(shí)提供WWW和MAIL服務(wù)的計(jì)算機(jī)窝撵。例如有一臺(tái)計(jì)算機(jī)名為“host.mydomain.com”A記錄它同時(shí)提供WWW和MAIL服務(wù)為了便于用戶(hù)訪問(wèn)服務(wù)傀顾。可以為該計(jì)算機(jī)設(shè)置兩個(gè)別名CNAMEWWW和MAIL這兩個(gè)別名的全稱(chēng)就“www.mydomain.com”和“mail.mydomain.com”實(shí)際上他們都指向“host.mydomain.com”忿族。
源文檔<http://www.cnblogs.com/zcy_soft/archive/2013/09/23/3335235.html>
name: 別名的FQDN
value: 真正名字的FQDN
.例如
www.sunny.com.?IN?CNAME?websrv.sunny.com.
3.2 服務(wù)器配置
一般服務(wù)器類(lèi)型可以分成五種:主服務(wù)器 ?從服務(wù)器 ?轉(zhuǎn)發(fā)服務(wù)器 ? 子域服務(wù)器 根服務(wù)器
3.2.1 主DNS服務(wù)器
管理和維護(hù)所負(fù)責(zé)解析的域內(nèi)解析庫(kù)的服務(wù)器
主服務(wù)器需要編輯的文件有/etc/named.conf, /etc/named.rfc1912.zones還有在/var/named這個(gè)目錄下創(chuàng)建一個(gè)解析庫(kù)這個(gè)文件可以復(fù)制/var/named/named.localhost作為副本并且更改名稱(chēng)為在主服務(wù)器上寫(xiě)的file的名稱(chēng)即可一般改名為域名.zone,如域名sunny.com那么file就寫(xiě)sunny.com.zone
配置主DNS服務(wù)器
.主DNS名稱(chēng)服務(wù)器
IP ?192.168.32.63
(1) 在主配置文件/etc/named.conf中定義區(qū)域和配置option設(shè)置锣笨。當(dāng)然,這里如果zone很多道批,建議將定義區(qū)域?qū)懭雴为?dú)的文件/etc/named.rfc1912.zones里面
options?{
listen-on?port?53?{?localhost;?};?//這里的監(jiān)聽(tīng)端口里错英,要把對(duì)應(yīng)的ip加進(jìn)去,但是每次改動(dòng)本地ip可能都要改這里的p
所以如果要監(jiān)聽(tīng)本地的ip隆豹,可以直接把127.0.0.1這一行直接改成localhost;
listen-on-v6?port?53?{?::1;?};
directory???"/var/named";
dump-file???"/var/named/data/cache_dump.db";
statistics-file?"/var/named/data/named_stats.txt";
memstatistics-file?"/var/named/data/named_mem_stats.txt";
allow-query?????{?any;?};?//允許哪些機(jī)器來(lái)查這臺(tái)服務(wù)器進(jìn)行dns的解析查詢(xún)
allow-transfer?{?192.168.32.63;?};?//允許哪臺(tái)從dns來(lái)拷貝區(qū)域解析文件
recursion?yes;
dnssec-enable?yes;
dnssec-validation?yes;
dnssec-lookaside?auto;
/*?Path?to?ISC?DLV?key?*/
bindkeys-file?"/etc/named.iscdlv.key";
managed-keys-directory?"/var/named/dynamic";
};
#正向解析區(qū)域文件
zone?"sunny.com"?IN?{
type?master;
file?"sunny.com.zone";
allow-update?{?none;?};
};
#反向解析區(qū)域文件
zone?"50.18.172.in-addr.arpa"?IN?{
type?master;
file?"50.18.172.zone";
allow-update?{?none;?};
};
其中椭岩,zone的配置模板如下
zone?"ZONE_NAME"?IN?{
type??{master|slave|hint|forward};
file??"ZONE_NAME.zone";
};
zone?"ZONE_NAME"?IN?{
type?{master|slave|forward}晒喷;
file?"網(wǎng)絡(luò)地址.zone"??//這里自己定義宿接,網(wǎng)絡(luò)地址位網(wǎng)絡(luò)按反寫(xiě),如32.168.192谤绳,要和后面數(shù)據(jù)庫(kù)的文件要和這個(gè)同名
};
allow-update是指運(yùn)行從客戶(hù)端直接運(yùn)行語(yǔ)句對(duì)數(shù)據(jù)庫(kù)解析文件進(jìn)行修改碉考,只在主服務(wù)器上配置
(2) 定義區(qū)域解析庫(kù)文件??/var/named/sunny.com.zone
出現(xiàn)的內(nèi)容
宏定義
資源記錄
例子如下
正向解析資源文件
$TTL?1D
$ORIGIN?sunny.com.
@???IN????SOA??masterdns??admin.sunny.com.?(
2017092113??;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
NS??masterdns
NS??slave1
MX?10?mailsrv1
MX?20?mailsrv2
masterdns????????A???192.168.32.61
slave1???????????A???192.168.32.63
www??????????????CNAME??webser
ftp??????????????CNAME??webser
webser???????????A????172.18.50.88
http?????????????A????172.18.50.66
https????????????A????172.18.50.29
tftp?????????????A????172.18.50.96
mailsrv1?????????A????172.18.50.72
mailsrv2?????????A????172.18.50.73
反向解析文件如下
$TTL?1D
@???IN????SOA??masterdns.sunny.com.??admin.sunny.com.?(
2017092122???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
IN????NS??masterdns.sunny.com.
IN??????NS???slave1.sunny.com.
$ORIGIN?50.18.172.in-addr.arpa.
88?????IN????PTR??www.sunny.com.
66?????IN????PTR??http.sunny.com.
88?????IN????PTR??ftp.sunny.com.
29?????IN????PTR??https.sunny.com.
72?????IN????PTR??mailsrv1.sunny.com.
73?????IN????PTR??mailsrv2.sunny.com.
.主配置文件語(yǔ)法檢查
named-checkconf
.解析庫(kù)文件語(yǔ)法檢查
named-checkzone???? "sunny.com"/var/named/sunny.com.zone
重新加載配置兩個(gè)方法如果不能生效建議直接重啟服務(wù)
rndc???status|reload;
service??named?reload
3.2.2 從DNS服務(wù)器
IP ?192.168.32.63
從主服務(wù)器或從服務(wù)器“復(fù)制”區(qū)域傳輸解析庫(kù)副本通過(guò)通知機(jī)制主服務(wù)器解析庫(kù)發(fā)生變化時(shí)會(huì)主動(dòng)通知從服務(wù)器從服務(wù)器會(huì)將主服務(wù)器的區(qū)域解析文件拷貝到本地進(jìn)行更新解析庫(kù)副本塌计。這里涉及到兩種傳輸
完全傳輸傳送整個(gè)解析庫(kù)第一次啟動(dòng)從服務(wù)器的時(shí)候把主服務(wù)器的區(qū)域解析文件全部拷貝下來(lái)
增量傳輸傳遞解析庫(kù)變化的那部分內(nèi)容后續(xù)主服務(wù)器區(qū)域解析文件部分更新時(shí)可以增量傳輸
配置好從服務(wù)器后默認(rèn)會(huì)在/var/named/slaves這個(gè)路徑下生成文件該文件是從主服務(wù)器上拷貝下來(lái)的解析庫(kù)的副本而文件的名稱(chēng)是在配置主文件的時(shí)候?qū)懙膄ile的名稱(chēng)一般是命名為域名.slaves.zone,如域名sunny.com那么file就寫(xiě)sunny.com.slaves.zone
配置文件例子如下
option中,和主的區(qū)別就是沒(méi)有了allow-transfer{ip;};的配置侯谁,其他和主一樣即可
options?{
listen-on?port?53?{?any;?};
listen-on-v6?port?53?{?::1;?};
directory???"/var/named";
dump-file???"/var/named/data/cache_dump.db";
statistics-file?"/var/named/data/named_stats.txt";
memstatistics-file?"/var/named/data/named_mem_stats.txt";
allow-query?????{?any;?};
recursion?yes;
dnssec-enable?no;
dnssec-validation?no;
/*?Path?to?ISC?DLV?key?*/
bindkeys-file?"/etc/named.iscdlv.key";
managed-keys-directory?"/var/named/dynamic";
};
zone?"sunny.com"?IN?{
type?slave;?#定義為從服務(wù)器
masters?{?192.168.32.61;?};
file?"slaves/sunny.com.slave.zone";
};
zone?"50.18.172.in-addr.arpa"?IN?{
type?slave;
masters?{?192.168.32.61;?};
file?"slaves/50.18.172.slave.zone";
};
從服務(wù)器不需要定義區(qū)域解析文件锌仅,重啟dns服務(wù)器,會(huì)將主服務(wù)器上的區(qū)域解析文件復(fù)制到/var/named/slaves/下面墙贱,文件名字會(huì)更改為zone里的file定義的名字
3.2.3 轉(zhuǎn)發(fā)DNS服務(wù)器
IP ?192.168.32.73
轉(zhuǎn)發(fā)DNS服務(wù)器热芹,也叫緩存服務(wù)器,只需啟用dns服務(wù)不需要做配置一般就開(kāi)啟了轉(zhuǎn)發(fā)的功能該dns會(huì)將請(qǐng)求直接拋給根dns服務(wù)器去然后再一步步解析下去惨撇。開(kāi)啟dns服務(wù)后把dns配置文件里關(guān)于安全檢查dnssec-enable和dnssec-validation配置設(shè)為no,關(guān)閉安全檢查伊脓。
例子如下
options?{
listen-on?port?53?{?any;?};
listen-on-v6?port?53?{?::1;?};
directory???"/var/named";
dump-file???"/var/named/data/cache_dump.db";
statistics-file?"/var/named/data/named_stats.txt";
memstatistics-file?"/var/named/data/named_mem_stats.txt";
allow-query?????{?any;?};
recursion?yes;
forward?first;??//這里有first和only兩個(gè)選項(xiàng)
forwarders?{?192.168.32.72;};
dnssec-enable?no;?//充當(dāng)轉(zhuǎn)發(fā)服務(wù)器這兩個(gè)配置要關(guān)閉
dnssec-validation?no;
/*?Path?to?ISC?DLV?key?*/
bindkeys-file?"/etc/named.iscdlv.key";
managed-keys-directory?"/var/named/dynamic";
pid-file?"/run/named/named.pid";
session-keyfile?"/run/named/session.key";
};
重啟dns服務(wù)即可。
forward?first|only;
first用戶(hù)請(qǐng)求發(fā)到本地魁衙,如果沒(méi)有就發(fā)到指定的轉(zhuǎn)發(fā)服務(wù)器上报腔,如果指定的服務(wù)器上沒(méi)有,就自己到互聯(lián)網(wǎng)的根上查找
only只將請(qǐng)求發(fā)到轉(zhuǎn)的dns上纺棺,如果沒(méi)有榄笙,自己也不會(huì)去找根dns了
3.2.4 子域服務(wù)器
父域dns服務(wù)器IP:192.168.32.75,父域?yàn)閏om.
子域dns服務(wù)器IP:192.168.32.61 和192.168.32.63, 子域?yàn)?sunny.com.
子域授權(quán)每個(gè)域的名稱(chēng)服務(wù)器都是通過(guò)其上級(jí)名稱(chēng)服務(wù)器在解析庫(kù)進(jìn)行授權(quán)
嚴(yán)格來(lái)說(shuō)子域服務(wù)器可以不算做是一類(lèi)dns服務(wù)器,因?yàn)樽佑蚍?wù)器可以充當(dāng)主dns服務(wù)器祷蝌。
當(dāng)域中的dns解析的地址較少的時(shí)候不需要授權(quán)其他子dns機(jī)器進(jìn)行管理有兩種解決辦法
a.只需要在其中的一臺(tái)dns服務(wù)器的資源解析文件里把解析記錄寫(xiě)可以如在主dns的解析域里添加以下的解析記錄類(lèi)似根域授權(quán)tld
sunny.com.??IN?NS?ns1.sunny.com.
ns1.sunny.com.?IN?A?2.2.2.1
b.可以新建一個(gè)子域的zone放在同一臺(tái)服務(wù)器上將對(duì)應(yīng)子域的解析資源配置寫(xiě)入新的zone
但是如果下級(jí)域有很多那么建議授權(quán)另一臺(tái)子域服務(wù)器來(lái)管理下級(jí)域的dns解析減少主dns的負(fù)荷也便于管理茅撞。
例子
在父域dns 192.168.32.75上增加4條記錄NS 和A記錄如com這個(gè)域授權(quán)子域dns 192.168.32.61和63 管理sunny.com這個(gè)子域,其中61和63又是主從的關(guān)系,這樣一來(lái)米丘,當(dāng)其中有一臺(tái)宕機(jī)剑令,也不會(huì)影響子域的查詢(xún)
正向解析文件如下
$TTL?1D
@???IN????SOA??masterdns??admin.sunny.com.?(
2017092112??;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
NS??masterdns
sunny.com.?????????NS??dns1.sunny.com.
sunny.com.?????????NS??dns2.sunny.com.
masterdns????????A????192.168.32.75
dns1.sunny.com.?????A????192.168.32.61
dns2.sunny.com.?????A????192.168.32.63
反向解析文件如下
$TTL?1D
@???IN????SOA??masterdns.com.??admin.sunny.com.?(
2017092110???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
IN????NS???masterdns.com.
sunny.com.????IN????NS???sunny1.sunny.com.
sunny.com.????IN????NS???sunny2.sunny.com.
75.50.18.172.in-addr.arpa.?????IN????PTR??masterdns.com.
61.50.18.172.in-addr.arpa.?????IN????PTR??sunny1.sunny.com.
63.50.18.172.in-addr.arpa.?????IN????PTR??sunny2.sunny.com.
在子域dns 192.168.32.61上資源解析文件上/var/named/sunny.com.zone寫(xiě)入如下的配置這樣一來(lái)父域服務(wù)器就可以解析子域上的配置,從服務(wù)器上的63不需要做變更拄查,會(huì)同步主服務(wù)器61上的區(qū)域解析文件的配置吁津,正反解析文件,參考主服務(wù)器的解析文件堕扶。不需要有任何變更
重啟服務(wù)后碍脏,75就完成了對(duì)61和63兩臺(tái)機(jī)器的子域授權(quán)。
3.2.5 根dns服務(wù)器
到這里我們已經(jīng)完成了主從服務(wù)器稍算,轉(zhuǎn)發(fā)服務(wù)器典尾,子域服務(wù)器的結(jié)束。接下來(lái)糊探,增加根服務(wù)器的介紹钾埂。完成一套完整的dns環(huán)境
根服務(wù)器IP:192.168.32.72
com域IP:192.168.32.75
sunny.com.域IP:192.168.32.61和63
轉(zhuǎn)發(fā)服務(wù)器IP:IP:192.168.32.73
注意,由于這里模擬將192.168.32.72根服務(wù)器科平,所以其他4臺(tái)dns的/var/named.ca這個(gè)文件要修改褥紫,不能用默認(rèn)的13臺(tái)dns服務(wù)器的解析文件,將named.ca文件的內(nèi)容修改如下
.???????????518400??IN??NS?root
root????3600000?IN??A???192.168.32.72
named.ca只需要這兩句配置即可
將轉(zhuǎn)發(fā)服務(wù)器的 forwarder {ip;};這句配置的ip改為是192.168.32.72瞪慧,即根dns的ip.
根服務(wù)器上要把配置文件里的這段關(guān)于指定根區(qū)間解析文件的配置的file改成自定義的區(qū)域解析文件髓考,授權(quán)com域。
根服務(wù)器配置文件如下
options?{
listen-on?port?53?{?any;?};
listen-on-v6?port?53?{?::1;?};
directory???"/var/named";
dump-file???"/var/named/data/cache_dump.db";
statistics-file?"/var/named/data/named_stats.txt";
memstatistics-file?"/var/named/data/named_mem_stats.txt";
allow-query?????{?any;?};
recursion?yes;
dnssec-enable?yes;
dnssec-validation?yes;
/*?Path?to?ISC?DLV?key?*/
bindkeys-file?"/etc/named.iscdlv.key";
managed-keys-directory?"/var/named/dynamic";
pid-file?"/run/named/named.pid";
session-keyfile?"/run/named/session.key";
};
zone?"."?IN?{
type?master;
file?"root.zone";
};
zone?"32.168.192.in-addr.arpa"?IN?{
type?master;
file?"32.168.192.zone";
};
根服務(wù)器委派com域弃酌,即在72這臺(tái)的/var/named下添加區(qū)域解析文件绳军,授權(quán)com這個(gè)子域
正向解析文件
$TTL?1D
@???IN????SOA??root??admin.sunny.com.?(
2017092201???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
NS??root
com.?????????????NS??dns2.com.
root?????????????A??192.168.32.72
dns2.com.?????????????A??192.168.32.75
反向解析文件
$TTL?1D
@???IN????SOA??root??admin.sunny.com.?(
2017092201???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
IN????NS??root.
com.???????IN????NS??dns2.com.
72.32.168.192.in-addr.arpa.?????IN????PTR??root.
75.32.168.192.in-addr.arpa.?????IN????PTR??dns2.com.
重啟根dns服務(wù)器后,就完成了完整的dns系統(tǒng)的解析
4 dns 其他相關(guān)功能和服務(wù)介紹
4.1 基于key的主從驗(yàn)證
在dns主從的配置里矢腻,除了設(shè)置允許ip來(lái)拷貝區(qū)域解析文件外,還可以通過(guò)key的驗(yàn)證來(lái)允許射赛,只有和主服務(wù)器配置相同key的從服務(wù)器才能復(fù)制主服務(wù)器的區(qū)域解析文件多柑,進(jìn)一步達(dá)到了安全設(shè)置
4.2 ACL
.bind中基礎(chǔ)的安全相關(guān)的配置:
acl: 把一個(gè)或多個(gè)地址歸并為一個(gè)集合,并通過(guò)一個(gè)統(tǒng)一的名稱(chēng)調(diào)用
.格式:
acl??acl_name{
ip;
net/prelen;
……
};
.示例:
acl?mynet{
172.16.0.0/16;
10.10.10.10;
};
.bind有四個(gè)內(nèi)置的acl:
none: 沒(méi)有一個(gè)主機(jī)
any: 任意主機(jī)
localhost: 本機(jī)
localnet: 本機(jī)的IP同掩碼運(yùn)算后得到的網(wǎng)絡(luò)地址
.注意:只能先定義楣责,后使用竣灌;因此一般定義在配置文件中,處于options的前面
4.3 view 功能
view可以理解成多個(gè)區(qū)域的集合
不同的ip訪問(wèn)同一dns得到不一樣的結(jié)果秆麸,這是根據(jù)根據(jù)view來(lái)實(shí)現(xiàn)
.view:視圖初嘹,一個(gè)bind服務(wù)器可定義多個(gè)view,每個(gè)view中可定義一個(gè)或多個(gè)zone
.每個(gè)view用來(lái)匹配一組客戶(hù)端
.多個(gè)view內(nèi)可能需要對(duì)同一個(gè)區(qū)域進(jìn)行解析沮趣,但使用不同的區(qū)域解析庫(kù)文件
步驟
1.定義acl
2.定義view,把所有的zone都放到對(duì)應(yīng)的view里屯烦,不同view里的zone不一樣,使得的到的dns解析結(jié)果不一樣
3.如果沒(méi)有匹配,就指定match any驻龟,然后給定一個(gè)區(qū)域
.格式:
view?VIEW_NAME?{
match-clients?{?testacl;?};
zone?“sunny.com”?{
type?master;
file?“sunny.com.zone”;};
include?“/etc/named.rfc1912.zones”;
};
.注意:
(1) 一旦啟用了view温眉,所有的zone都只能定義在view中
(2) 僅在允許遞歸請(qǐng)求的客戶(hù)端所在view中定義根區(qū)域
(3) 客戶(hù)端請(qǐng)求到達(dá)時(shí),是自上而下檢查每個(gè)view所服務(wù)的客戶(hù)端列表
智能DNS就是根據(jù)VIEW來(lái)實(shí)現(xiàn)
一些CDN(?Content Delivery Network)加速的功能翁狐,客戶(hù)可以在自己的dns上設(shè)定別名类溢,如www別名為host1.aliyun.com.這里的host1.aliyun.com.是指CDN公司的dns,當(dāng)用戶(hù)訪問(wèn)公司的www網(wǎng)址時(shí)露懒,發(fā)到host1.aliyun.com.這個(gè)dns去做解析闯冷。這個(gè)是智能dns的一個(gè)使用。
關(guān)于以上的這三個(gè)介紹懈词,將在半自動(dòng)化腳本中舉例介紹蛇耀。
5 dns測(cè)試和排錯(cuò)
5.1 測(cè)試
測(cè)試命令:dig,host,nslookup
5.1.1 dig
.dig [-t type] name [@SERVER] [query options]
dig只用于測(cè)試dns系統(tǒng),不會(huì)查詢(xún)hosts文件進(jìn)行解析
-t選項(xiàng)將查詢(xún)類(lèi)型設(shè)置為類(lèi)型钦睡。 它可以是BIND 9支持的任何有效查詢(xún)類(lèi)型蒂窒。默認(rèn)查詢(xún)類(lèi)型為“A”,除非提供-x選項(xiàng)以指示反向查找荞怒。 可以通過(guò)指定一種AXFR來(lái)請(qǐng)求區(qū)域傳輸洒琢。 當(dāng)需要增量區(qū)域傳輸(IXFR)時(shí),類(lèi)型設(shè)置為ixfr = N褐桌。 增量區(qū)域傳輸將包含對(duì)區(qū)域所做的更改衰抑,因?yàn)閰^(qū)域的SOA記錄中的序列號(hào)為N.
.查詢(xún)選項(xiàng):
+[no]trace:跟蹤解析過(guò)程: dig +tracesunny.com
+[no]recurse:進(jìn)行遞歸解析
測(cè)試反向解析:
dig -x IP = dig –t ptrreverseip.in-addr.arpa
模擬區(qū)域傳送:
dig?-t?axfr???ZONE_NAME?@SERVER
dig?-t?axfr???sunny.com?@10.10.10.11
dig?-t?axfr100.1.10.in-addr.arpa?@172.16.1.1
dig?-t?NS?.?@114.114.114.114
dig?-t?NS?.?@a.root-servers.net
關(guān)于axfr的相關(guān)解釋
DNS中有兩種域維護(hù)手段,一種是全量傳輸AXFR(full zone transfer)荧嵌,另一種是增量傳輸IXFR(incremental zone transfer)呛踊。
5.1.2 host
.host [-t type] name [SERVER]
注意,host和dig的語(yǔ)法區(qū)別是server前啦撮,dig加@符號(hào)谭网,同時(shí),dig可以跟查詢(xún)選項(xiàng)赃春,如trace,recurse
host?-t??NS??sunny.com?172.16.0.1
host?-t?soa?sunny.com
host?-t??mx?sunny.com
host?-t??axfr??sunny.com
host?1.2.3.4
5.1.3 nslookup
.nslookup命令:nslookup[-option] [name | -] [server]
.交互式模式:
nslookup>
server IP: 指明使用哪個(gè)DNS server進(jìn)行查詢(xún)
set q=RR_TYPE: 指明查詢(xún)的資源記錄類(lèi)型
NAME: 要查詢(xún)的名稱(chēng)
5.1.4 壓力測(cè)試
.壓力測(cè)試
準(zhǔn)備一個(gè)大文件test.txt(這個(gè)文件里的域名要存在,且有大量的域名愉择,如20000個(gè),可以重復(fù)域名织中,而且可以被當(dāng)前的dns解析)锥涕,測(cè)試dns的性能,實(shí)現(xiàn)壓力測(cè)試狭吼,一般在上線前做的測(cè)試层坠,全負(fù)荷工作。啟用日志功能刁笙,性能也會(huì)降低
test.txt
準(zhǔn)備文件破花,如下
vim?test.txt
www.sunny.com?A
sunny.com?NS
sunny.com?MX
pop3.sunny.com?A
web.sunny.com?A
.打開(kāi)日志功能
rndc querylog
查看rndc的相關(guān)狀態(tài)
rndc status
運(yùn)行如下的命令進(jìn)行壓力測(cè)試
queryperf??-d??test.txt??-s??127.0.0.1
5.2 排錯(cuò)
.查看是否為權(quán)威記錄谦趣,flags:aa標(biāo)記判斷
.被刪除的記錄仍能返回結(jié)果,可能是因?yàn)?記錄存在
.如:*.example.com.INA172.25.254.254
.注意“.”的使用
.避免CNAME指向CNAME記錄旧乞,可能產(chǎn)生回環(huán)
test.example.com. IN CNAME lab.example.com.
lab.example.com. IN CNAME test.example.com.
.正確配置PTR記錄蔚润,許多服務(wù)依賴(lài)PTR,如sshd,MTA
.正確配置輪詢(xún)r(jià)ound-robin記錄.
可使用dig +trace排錯(cuò)尺栖,可能是網(wǎng)絡(luò)和防火墻導(dǎo)致嫡纠。
#dig?A?example.com
;?<<>>DiG9.9.4-RedHat-9.9.4-14.el7?<<>>?A?example.com
;;?global?options:
+cmd
;;?Got?answer:
;;
->>HEADER<<-opcode:?QUERY,?status:?NOERROR,?id:
30523
....
SERVFAIL:Thenameserverencountered?a?problem?whileprocessing?the?query.
根據(jù)status里的不同返回結(jié)果來(lái)定位問(wèn)題
.NXDOMAIN:The queried name does not exist in the zone.
NXDOMAIN查詢(xún)的域名不存在資源記錄器里⊙佣模可能是CNAME對(duì)應(yīng)的A記錄不存在導(dǎo)致
.REFUSED:The nameserverrefused the client's DNS
request due to policy restrictions.可能是DNS策略導(dǎo)致
.NOERROR不代表沒(méi)有問(wèn)題除盏,也可以是過(guò)時(shí)的記錄
6 半自動(dòng)化腳本
#!/bin/bash
#
#******************************************************************************
#Author:???????????????Sunny
#Date:????????????????2017-09-20
#FileName:???????????????install_dns.sh
#version:????????????????1.0
#Your?change?info:
#Description:??????????????For?auto?install?dns?server
#DOC?URL:
#Copyright(C):??????????????2017??All?rihts?reserved
#*****************************************************************************
min_time?()?{
time=`date?+%Y%m%d%H%M`
}
os_version=$(cat?/etc/system-release?|?grep?-o?"?[0-9]"|?cut?-d?"?"?-f2)
echo?"Enter?1?:?install?master?dns"
echo?"Enter?2?:?install?slave??dns"
echo?"Enter?3?:?install?transmit?dns"
echo?"Enter?4?:?install?sub?zone?dns"
echo?"Enter?5?:?See?how?to?config?key?authentication?for?slaves?dns?to?copy?master?dns?zone?resource?file?with?key"
echo?"Enter?6?:?See?how?to?config?acl?function"
echo?"Enter?7?:?See?how?to?config?view?function"
min_time;
rpm?-q?bind?&>/dev/null?||?yum?-y?install?bind?&>/dev/null;
rpm?-q?bind-chroot&>/dev/null?||?yum?-y?install?bind-chroot?&>/dev/null
rpm?-q?bind-utils?&>/dev/null??||?????yum?-y?install?bind-utils?&>/dev/null
[?-e?/etc/named.conf?]?&&?cp?/etc/named.conf?/etc/named.conf."$time".bak?||?{?echo?"/etc/named.conf?is?not?exist,please?check";exit?2;?}
[?-e?/etc/named.rfc1912.zones?]?&&?cp?/etc/named.rfc1912.zones?/etc/named.rfc1912.zones."$time".bak?||?{?echo?"/etc/named.rfc1912.zones?is?not?exist,please";exit?6;?}
mastercheck(){
named-checkconf?||?echo?"Something?wrong?in?/etc/named.conf,Please?check"
named-checkzone?$domain?/var/named/"$domain".zone?||?echo?"something?was?wrong?in?/var/named/"$domain".zone,please?check"
named-checkzone?"$arpaip".in-addr.arpa?/var/named/"$arpaip".zone?||?echo?"something?was?wrong?in?/var/named/"$arpaip".zone,please?check"
}
masterconfzone(){
#config?/etc/named.conf
echo?"Attention:?It?will?install?a?master?dns,which?can?provide?FQDN-->IP?and?IP-->FQDN?query,and?sub-zone"
echo?"The?master?dns?will?allow?any?host?to?query"
sed?-i??'s/listen-on?port.*/listen-on?port?53?{?localhost;?};/g'?/etc/named.conf
sed?-i??'s/allow-query.*/allow-query?????{?any;?};/g'?/etc/named.conf
read?-p?"How?many?hosts?you?will?allow?slaves?to?copy?mastar's?zone?resource?analysis?file(eg:1):?"?slavenu
[[?"$slavenu"?=~?^[0-9]+$??]]?||?{?echo?your?input?is?no?num,no?slaves?will?allow?to?copy?resource?analysis?file,please?check;$slavenu=0;?}
if?[?-z?${slavenu:-}?];then
slavenu=0
fi
if?[?"$slavenu"?-gt?0?];then
read?-p?"Input?which?hosts?ip?was?allow?to?copy(eg:172.18.50.75;172.18.50.63):?"?ip
sed?-i?'s/allow-transfer.*//g'?/etc/named.conf
sed?-i???"/allow-query/?a?allow-transfer?{?$ip;?};?"?/etc/named.conf
fi
#config?/etc/named.rfc1912.zones
read?-p?"Please?input?your?domain?name?in?order?to?make?a?resource?analysis?file?name,such?as?sunny.com.zone,sunny.com?is?domain?name(default:sunny.com)":?domain
if?[?-z?${domain:-}?];then
domain=sunny.com
fi
if??grep?"zone?\"$domain\"?IN"??/etc/named.rfc1912.zones&>/dev/null;then
echo?"$domain"?already?config?in?/etc/named.rfc1912.zones,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/etc/named.rfc1912.zones<
zone?"$domain"?IN?{
type?master;
file?"$domain.zone";
allow-update?{?none;?};
};
eof
fi
read?-p?"Please?input?your?inverse?network?in?order?to?make?a?inverse?resource?analysis?file?name,such?as?50.18.172.in-addr.arpa,50.18.172?is?inverse?network(default:50.18.172)":?arpaip
if?[?-z?${arpaip:-}?];then
arpaip=50.18.172
fi
if??grep?"zone?\"$arpaip.in-addr.apra\"?IN"??/etc/named.rfc1912.zones&>/dev/null;then
echo?"$arpaip.in-addr.arpa"?already?config?in?/etc/named.rfc1912.zones,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/etc/named.rfc1912.zones<
zone?"$arpaip.in-addr.arpa"?IN?{
type?master;
file?"$arpaip.zone";
allow-update?{?none;?};
};
eof
fi
}
read?-p?"Please?input?your?choice(eg:1):?"?choice
case?$choice?in
1)
masterconfzone;
#config?zone?resource?analysis?file
read?-p?"Please?input?the?dns?server?ip(defaults:172.18.50.61):?"?dnsip
if?[?-z?${dnsip:-}?];then
dnsip=172.18.50.61
fi
if?ls?/var/named/"$domain".zone?&>/dev/null?;then
echo?/var/named/"$domain".zone??already?exist,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/var/named/"$domain".zone<
\$TTL?1D
@???IN????SOA??masterdns??admin.sunny.com.?(
$(date?+%Y%m%d)01???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
NS??masterdns
NS??slave1
NS??slave2
masterdns????????A???$dnsip
slave1???????????A??172.18.50.63
slave2???????????A???172.18.50.75
www??????????????CNAME??webser
ftp??????????????CNAME??webser
webser???????????A????172.18.50.88
http?????????????A????172.18.50.66
MX?10?mailsrv1
MX?20?mailsrv2
mailsrv1???A??172.18.50.72
mailsrv2???A??172.18.50.73
tracy.sunny.com.?IN?NS??subzone1.tracy.sunny.com.
subzone1.tracy.sunny.com.?A?172.18.50.62
eof
fi
#you?should?define"?$ORIGIN?50.18.172.in-addr.arpa.?"?before?you?define?PTR?type,or?you?should?write?the?full?arpa?address?when?you?define?slaves,others?it?will?no?tranfer?zone?file?from?master?dns?server?auto?when?master?arpa?resource?file?change
if?ls?/var/named/$arpaip.zone?&>/dev/null?;then
echo?/var/named/$arpaip.zone??already?exist,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/var/named/"$arpaip".zone<
\$TTL?1D
@???IN????SOA??masterdns.$domain.??admin.sunny.com.?(
$(date?+%Y%m%d)01???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
IN????NS??masterdns.$domain.
IN????NS???slave1.sunny.com.
IN????NS???slave2.sunny.com.
tracy.sunny.com.????IN???NS???????subzone1.tracy.sunny.com.
63.50.18.172.in-addr.arpa.?????IN????PTR??slave1.sunny.com.
75.50.18.172.in-addr.arpa.?????IN????PTR??slave2.sunny.com.
62.50.18.172.in-addr.arpa.?????IN????PTR??subzone1.tracy.sunny.com.
61?????IN????PTR???masterdns.$domain.
88?????IN????PTR??www.sunny.com.
66?????IN????PTR??http.sunny.com.
88?????IN????PTR??ftp.sunny.com.
72?????IN????PTR??mailsrv1.sunny.com.
73?????IN????PTR??mailsrv2.sunny.com.
eof
fi
echo?"You?can?run?"vim?/var/named/"$domain".zone"?to?add?more?source?analysis"
mastercheck;
;;
2)
#config?/etc/named.conf
echo?"Attention:?It?will?install?a?slave?dns,which?can?provide?FQDN-->IP?and?IP-->FQDN?query"
echo?"The?slave?dns?will?allow?any?host?to?query"
sed?-i??'s/listen-on?port.*/listen-on?port?53?{?localhost;?};/g'?/etc/named.conf
sed?-i??'s/allow-query.*/allow-query?????{?any;?};/g'?/etc/named.conf
#config?/etc/named.rfc1912.zones
read?-p?"Please?input?master?ip(default:?172.18.50.61?)"?masterip
if?[?-z?${masterip:-}?];then
masterip=172.18.50.61
fi
read?-p?"Please?input?your?domain?name?in?order?to?make?a?resource?analysis?file?name,such?as?sunny.com.zone,sunny.com?is?domain?name(default:sunny.com)":?domain
if?[?-z?${domain:-}?];then
domain=sunny.com
fi
if??grep?"zone?\"$domain\"?IN"??/etc/named.rfc1912.zones&>/dev/null;then
echo?"$domain"?already?config?in?/etc/named.rfc1912.zones,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/etc/named.rfc1912.zones<
zone?"$domain"?IN?{
type?slave;
masters?{?$masterip;?};
file?"slaves/$domain.zone";
};
eof
fi
read?-p?"Please?input?your?inverse?network?in?order?to?make?a?inverse?resource?analysis?file?name,such?as?50.18.172.in-addr.arpa,50.18.172?is?inverse?network(default:50.18.172)":?arpaip
if?[?-z?${arpaip:-}?];then
arpaip=50.18.172
fi
if??grep?"zone?\"$arpaip.in-addr.apra\"?IN"??/etc/named.rfc1912.zones&>/dev/null;then
echo?"$arpaip.in-addr.arpa"?already?config?in?/etc/named.rfc1912.zones,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/etc/named.rfc1912.zones<
zone?"$arpaip.in-addr.arpa"?IN?{
type?slave;
masters?{?$masterip;?};
file?"slaves/$arpaip.zone";
};
eof
fi
;;
3)
echo?"Your?will?install?a?forward?dns?hosts"
echo
echo
sed?-i??'s/listen-on?port.*/listen-on?port?53?{?localhost;?};/g'?/etc/named.conf
sed?-i??'s/allow-query.*/allow-query?????{?any;?};/g'?/etc/named.conf
read?-p?"Input?which?server?you?forward?as?dns?server(defaults:172.18.50.61):"?forwardip
if?[?-z?${forwardip:-}?];then
forwardip=172.18.50.61
fi
echo?"Enter?all?:?to?forward?all?request?to?assign?dns?server"
echo?"Enter?part?:?only?forward?some?zone?request?to?assign?dns?server"
sed?-i?'s/dnssec-enable?yes;/dnssec-enable?no;/g'?/etc/named.conf
sed?-i?'s/dnssec-validation?yes;/dnssec-validation?no;/g'?/etc/named.conf
read?-p?"Please?input?your?choice?(all??or??part):?"?aorp
case?$aorp?in
all)
sed?-i?'s/forward.*//g'?/etc/named.conf
sed?-i?'/dnssec-validation/?a??forward?first;'?/etc/named.conf
sed?-i?"/forward/?a??forwarders?{?$forwardip;?};"?/etc/named.conf
;;
part)
read?-p?"Please?which??domain?zone?you?want?to?forward,such?as?sunny.com.zone,sunny.com?is?domain?name(default:sunny.com)":?forwardzone
if?[?-z?${forwardzone:-}?];then
forwardzone=sunny.com
fi
read?-p?"Please?input?your?inverse?network?in?order?to?make?a?inverse?resource?analysis?file?name,such?as?50.18.172.in-addr.arpa,50.18.172?is?inverse?network(default:50.18.172)":?arpaip
if?[?-z?${arpaip:-}?];then
arpaip=50.18.172
fi
read?-p?"Input?which?server?you?forward?as?dns?server(defaults:172.18.50.61):"?forwardip
if?[?-z?${forwardip:-}?];then
forwardip=172.18.50.61
fi
if??grep?"forwarders?{?$forwardip;?};"??/etc/named.rfc1912.zones&>/dev/null;then
echo?forwarders?"$forwardip"?already?config?in?/etc/named.rfc1912.zones,it?will?not?be?config?one?more?time,please?check.
else
#?"If?your?server?is?centos6,but?your?forward?is?centos7,and?you?set?forward?first,it?can?be?successful?if?you?test?forward?direction,but?it?would?be?fail?if?you?test?inverse?arpa.you?should?set?forward?only?to?test?inverse?arpa,it?is?the?same?promble?is?it?is?both?centos7.However?it?is?ok?if?dns?and?forward?host?are?all?centos6"
cat?>>/etc/named.rfc1912.zones<
zone?"$forwardzone"?IN?{
type?forward;
forward?first;
forwarders?{?$forwardip;?};
};
zone?"$arpaip.in-addr.arpa"?IN?{
type??forward;
forward?first;
forwarders?{?$forwardip;?};
};
eof
fi
;;
*)
echo?"Your?input?is?wrong?,nothing?has?been?config,please?check"
;;
esac
;;
4)
masterconfzone;
read?-p?"Please?input?the?main?dns?ip?to?forward?(defaults:172.18.50.61):?"?forwardip2
if?[?-z?${forwardip2:-}?];then
forwardip2=172.18.50.61
fi
if??grep?"forwarders?{?$forwardip2;?};"??/etc/named.conf&>/dev/null;then
echo?forwarders?"$forwardip2"?already?config?in?/etc/named.rfc1912.zones,it?will?not?be?config?one?more?time,please?check.
else
sed?-i?"/allow-query/?a?forwarders?{?$forwardip2;?};"?/etc/named.conf
fi
#config?zone?resource?analysis?file
read?-p?"Please?input?the?subzone?dns?server?ip(defaults:172.18.50.62):?"?dnsip
if?[?-z?${dnsip:-}?];then
dnsip=172.18.50.62
fi
if?ls?/var/named/"$domain".zone?&>/dev/null?;then
echo?/var/named/"$domain".zone??already?exist,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/var/named/"$domain".zone<
\$TTL?1D
@???IN????SOA??subzone??admin.sunny.com.?(
$(date?+%Y%m%d)01???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
NS??subzone
MX?10?mailsrv1
MX?20?mailsrv2
subzone????A???$dnsip
mailsrv1???A??192.168.32.72
mailsrv2???A??192.168.32.73
nginx??????A??192.168.32.77
eof
fi
#you?should?define"?$ORIGIN?50.18.172.in-addr.arpa.?"?before?you?define?PTR?type,or?you?should?write?the?full?arpa?address?when?you?define?slaves,others?it?will?no?tranfer?zone?file?from?master?dns?server?auto?when?master?arpa?resource?file?change
if?ls?/var/named/$arpaip.zone?&>/dev/null?;then
echo?/var/named/$arpaip.zone??already?exist,it?will?not?be?config?one?more?time,please?check.
else
cat?>>/var/named/"$arpaip".zone<
\$TTL?1D
@???IN????SOA??subzone.$domain.??admin.sunny.com.?(
$(date?+%Y%m%d)01???;?serial
1D??;?refresh
1H??;?retry
1W??;?expire
3H?)????;?minimum
IN????NS??subzone.$domain.
62?????IN????PTR??subzone.tracy.sunny.com.
72?????IN????PTR??mailsrv1.tracy.sunny.com.
73?????IN????PTR??mailsrv2.tracy.sunny.com.
77?????IN????PTR??nginx.tracy.sunny.com.
eof
fi
echo?"You?can?run?"vim?/var/named/"$domain".zone"?to?add?more?source?analysis"
mastercheck;
;;
5)
echo?"eg:?master?dns?server?ip?172.18.50.61?;?slave?nds?ip:?172.18.50.63"
echo??"step?1:?run?at?server?"dnssec-keygen?-a?HMAC-MD5?-b?128?-n?HOST?6akey"?to?generate?a?key?chain,-->?get?result?two?keys:?K6akey.+157+49816.key?and?K6akey.+157+49816.private?"
echo??"step?2:?run?at?server?"cat?K6akey.+157+49816.private"?to?get?key,there?is?one?line?begin?with?"Key:"?-->?get?result:?"Key:?+rnJ7Yl6iU9be4Uxj/x04A==",?the?character?string?"+rnJ7Yl6iU9be4Uxj/x04A=="?is?the?key??"
echo??"step?3:?config?at?master?dns,run?"vim?/etc/named.conf"?,inside?option?,add?conf?'allow-transfer?{?key?6akey;?}'?6akey?is?the?key?name
server?172.18.50.63?{
keys?{?6akey;?};
};
key?6akey?{
algorithm?hmac-md5;
secret?"+rnJ7Yl6iU9be4Uxj/x04A==";
};
####attention?172.18.50.63?is?the?slave?which?you?allow?to?copy?resoure?file?from?master,"+rnJ7Yl6iU9be4Uxj/x04A=="?is?the?key?#####
"
echo?"step?4:?config?at?slave?dns,?outside?option,config?below?:
server?172.18.50.61?{
keys?{?6akey;?};
};
key?6akey?{
algorithm?hmac-md5;
secret?"+rnJ7Yl6iU9be4Uxj/x04A==";
};
####attention?172.18.50.61?is?the?master?ip?which?the?slave?want?to??copy?resoure?file?,"+rnJ7Yl6iU9be4Uxj/x04A=="?is?the?key?#####
"
echo?"step?5:?run?"service?named?restart"?to?restart?dns?service"
;;
6)
echo?"ACL?function?is?to?Merge?one?or?more?addresses?into?a?collection?and?call?it?through?a?uniform?name"
echo?"You?can?define?acl?and?config?at?any?dns?server"
echo?"run?at?dns?server,define?one?acl?name?mynet,and?apply?it?to?allow-qurey,below?is?example,run?"vim?/etc/named.conf"
####define?acl
acl?mynet?{
172.18.50.62;
172.18.50.63;
172.18.50.75;
};
####apply?acl
allow-query?????{?mynet;?};
"
echo?"then?run?"service?named?restart"?to?restart?dns?service,only?the?three?hosts?can?qurey?the?dns?server?"
echo?"Attention,there?are?four?default?acl?in?dns,
none,no?one?ip
any,any?ip
localhost,only?the?host?ip
localnet,eg?localhost?192.168.32.66?and?subnet?255.255.255.0,so?localnet?is?192.168.32.0/24
"
echo?"no?all?parameter?can?use?acl,for?one?eg,?forwarders?{?172.18.50.61;?},172.18.50.61;?should?be?ip,and?can?not?be?replaced?with?acl"
;;
7)
echo?"All?all?config?in?/etc/named.conf"
echo?"when?using?'view'?statements,?all?zones?must?be?in?views,?so?as?"include?"/etc/named.rfc1912.zones";??"?should?be?config?in?view?"
echo?"you?can?define?acl?to?do?soome?ip?match"
echo?"step?1:Prepare?six?files?in?/var/named/,???32.168.192.zone??chao.32.168.192.zone??chao.tracy.sunny.com.zone,external.32.168.192.zone??external.tracy.sunny.com.zone,tracy.sunny.com.zone?"
echo?"step?2:?run?"?vim?/etc/named.conf?"
#########define?two?acl?as?below#####
acl?internal??{
172.18.50.61;
172.18.50.63;
};
acl?external?{
172.18.50.72;
172.18.50.73;
};
#########config?three?views?as?below#####
view?inter?{
match-clients?{?internal;?};
zone?"."?IN?{
type?hint;
file?"named.ca";
};
zone?"tracy.sunny.com"?IN?{
type?master;
file?"tracy.sunny.com.zone";
allow-update?{?none;?};
};
zone?"32.168.192.in-addr.arpa"?IN?{
type?master;
file?"32.168.192.zone";
allow-update?{?none;?};
};
include?"/etc/named.rfc1912.zones";
};
view?exter?{
match-clients?{?external;?};
zone?"."?IN?{
type?hint;
file?"named.ca";
};
zone?"tracy.sunny.com"?IN?{
type?master;
file?"external.tracy.sunny.com.zone";
allow-update?{?none;?};
};
zone?"1.1.1.in-addr.arpa"?IN?{
type?master;
file?"external.32.168.192.zone";
allow-update?{?none;?};
};
include?"/etc/named.rfc1912.zones";
};
view?other?{
match-clients?{?any;?};
zone?"."?IN?{
type?hint;
file?"named.ca";
};
zone?"tracy.sunny.com"?IN?{
type?master;
file?"chao.tracy.sunny.com.zone";
allow-update?{?none;?};
};
zone?"2.2.2.in-addr.arpa"?IN?{
type?master;
file?"chao.32.168.192.zone";
allow-update?{?none;?};
};
include?"/etc/named.rfc1912.zones";
};
#####################################
"
echo?"step?3:?run?"service?named?restart"?to?restart?dns?service?"
;;
*)
echo?"Your?input?is?wrong?,please?check"
;;
esac
service?named?restart
if?[?$os_version?-eq?6?];then
service?named?status?|?grep?"?is?running"?&>/dev/null?&&?echo?"dns?is?running..."?||?echo?"dns?is?not?running,please?check"
else
service?named?status?|?grep?"active?(running)"?>&/dev/null?&&?echo?"dns?is?running..."?||?echo?"dns?is?not?running,please?check"
fi