半自動(dòng)化安裝dns

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挫以,隨后出現(xiàn)的幾起案子者蠕,更是在濱河造成了極大的恐慌,老刑警劉巖掐松,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踱侣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡大磺,警方通過(guò)查閱死者的電腦和手機(jī)抡句,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杠愧,“玉大人待榔,你說(shuō)我怎么就攤上這事×骷茫” “怎么了锐锣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绳瘟。 經(jīng)常有香客問(wèn)我雕憔,道長(zhǎng),這世上最難降的妖魔是什么糖声? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任橘茉,我火速辦了婚禮,結(jié)果婚禮上姨丈,老公的妹妹穿的比我還像新娘。我一直安慰自己擅腰,他們只是感情好蟋恬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著趁冈,像睡著了一般歼争。 火紅的嫁衣襯著肌膚如雪拜马。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天沐绒,我揣著相機(jī)與錄音俩莽,去河邊找鬼。 笑死乔遮,一個(gè)胖子當(dāng)著我的面吹牛扮超,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹋肮,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼出刷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坯辩?” 一聲冷哼從身側(cè)響起馁龟,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漆魔,沒(méi)想到半個(gè)月后坷檩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡改抡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年矢炼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雀摘。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裸删,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阵赠,到底是詐尸還是另有隱情涯塔,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布清蚀,位于F島的核電站匕荸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏枷邪。R本人自食惡果不足惜榛搔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望东揣。 院中可真熱鬧践惑,春花似錦、人聲如沸嘶卧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芥吟。三九已至侦铜,卻和暖如春专甩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钉稍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工涤躲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贡未。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓种樱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親羞秤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缸托,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一、實(shí)現(xiàn)從根瘾蛋,com,rj.com 模擬互聯(lián)網(wǎng)的DNS架構(gòu) DNS(Domain Name System俐镐,域名系統(tǒng)...
    ssjinyao閱讀 1,417評(píng)論 0 7
  • DNS簡(jiǎn)介DNS解析關(guān)鍵概念BIND 一、DNS簡(jiǎn)介: (一)DNS服務(wù) DNS:Domain Name Serv...
    哈嘍別樣閱讀 1,788評(píng)論 0 2
  • 什么是DNS及功能: DNS(Domain name server),是將IP地址轉(zhuǎn)換為域名地址哺哼。當(dāng)在互聯(lián)網(wǎng)訪問(wèn)外...
    魏鎮(zhèn)坪閱讀 7,626評(píng)論 0 8
  • DNS工作原理 DNS 查詢(xún)的過(guò)程 DNS( Domain Name System)是“域名系統(tǒng)”的英文縮寫(xiě)佩抹,是一...
    ghbsunny閱讀 8,803評(píng)論 0 0
  • DNS 是什么 DNS (Domain Name System), 也叫網(wǎng)域名稱(chēng)系統(tǒng)取董,是互聯(lián)網(wǎng)的一項(xiàng)服務(wù)棍苹。它實(shí)質(zhì)上...
    interstellar多米諾閱讀 2,792評(píng)論 0 6