DNS概述
DNS?Domain Name System,域名系統(tǒng)),域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫,通過主機(jī)名,最終得到該主機(jī)名對應(yīng)的IP地址的過程叫做域名解析。而DNS的主要作用,就是域名解析,將主機(jī)名解析成IP地址。DNS這種機(jī)制能夠完成從域名(FQDN)到主機(jī)識(shí)別IP地址之間的?換,在DNS誕生之前,這個(gè)功能主要是通過本地的一個(gè)hosts文件來記錄域名和IP的對應(yīng)關(guān)系,但hosts文件只能作用于本機(jī),不能同步更新至所有主機(jī),且當(dāng)hosts文件很龐大時(shí)難以管理,因此,一個(gè)分布式、分層次的主機(jī)名管理架構(gòu)DNS便應(yīng)用而生。
FQDN(Full Qualified Domain Name)亦即完整主機(jī)名,完整主機(jī)名由主機(jī)名與域名構(gòu)成。DNS同根文件系統(tǒng)一樣是一個(gè)倒置的樹狀結(jié)構(gòu),最頂層的叫做根服務(wù)器,主要負(fù)責(zé)頂級域名的管理,常見的頂級域名有.com、.cn、.net、.org、.edu、.gov、.mil等,頂級域名則負(fù)責(zé)管理其下面的二級域名,如baidu.com,qq.com等,二級域名服務(wù)器則負(fù)責(zé)對應(yīng)的主機(jī)名稱或其三級域名解析,依次類推,根服務(wù)器管理頂級域名,頂級域名管理二級域名,二級域名管理三級域名或直接解析主機(jī)名,如此便形成了一個(gè)倒置的樹狀結(jié)構(gòu)。
由此可見,每一級只負(fù)責(zé)對應(yīng)下級的域的管理,而全球共有13?根節(jié)點(diǎn)服務(wù)器,10臺(tái)位于美國,其余3臺(tái)分別在英國、瑞典和日本,在這13臺(tái)根服務(wù)器當(dāng)中有1臺(tái)為主根服務(wù)器放置在美國,其余12臺(tái)為輔根服務(wù)器,所有的根服務(wù)器均由美國政府授權(quán)的互聯(lián)網(wǎng)域名與號(hào)碼分配機(jī)構(gòu)ICANN組織統(tǒng)一管理,負(fù)責(zé)全球互聯(lián)網(wǎng)域名根服務(wù)器、域名體系和IP地址等的管理。
hosts
hsots: 只能作正向解析,優(yōu)先級比DNS高,hosts文件一般用于測試,或者用于局域網(wǎng)里面,
在局域網(wǎng)里面,也可以用nis。
解析類型
正向解析:FQDN --> IP,即把主機(jī)名解析為IP地址
反向解析: IP --> FQDN,即把IP地址解析為主機(jī)名
泛域名解析:避免用戶寫錯(cuò)名稱時(shí)給出錯(cuò)?答案,可通過泛域名解析進(jìn)行解析至某特定地址。
$GENERATE 1-254 HOST$ A 1.2.3.$
查詢類型
遞歸查詢:遞歸查詢一般是客戶機(jī)與服務(wù)器之間的查詢,即客戶機(jī)只發(fā)送一次請求,
其他的工作將由上層服務(wù)器去解決,最后一層一層地反饋結(jié)果到客戶端。
迭代查詢:迭代查詢一般是DNS服務(wù)器與DNS服務(wù)器之間的查詢,即最開始的DNS服務(wù)
器負(fù)責(zé)發(fā)起請求,其他涉及到的DNS服務(wù)器只負(fù)責(zé)響應(yīng)即可,然后一直查找到目標(biāo)DNS
服務(wù)器,并將結(jié)果返回給客戶端。
zone: DNS數(shù)據(jù)庫
DNS的解析過程當(dāng)中涉及到DNS數(shù)據(jù)庫,此數(shù)據(jù)庫又分為正解與反解,正解即從主機(jī)名
到IP,反解即從IP到主機(jī)名,無論正解還是反解,每個(gè)域名所對應(yīng)的解析記錄我們稱
之為zone(域)
RR: 資源記錄
RR(Resource Record), 這些記錄的類型有:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授權(quán)記錄;一個(gè)區(qū)域解析庫有且僅能有一個(gè)SOA記錄,必須位于解析庫的第一條記錄
A:internet Address,作用,FQDN --> IP
AAAA: FQDN --> IPv6
PTR: PoinTeR,IP --> FQDN
NS: Name Server,專用于標(biāo)明當(dāng)前區(qū)域的DNS服務(wù)器
CNAME:Canonical Name,別名記錄
MX:Mail eXchanger,郵件交換器
主從DNS服務(wù)器
DNS也是一個(gè)網(wǎng)絡(luò)服務(wù),因此就有對應(yīng)的端口號(hào),其端口號(hào)為53號(hào),通常DNS在查詢時(shí)是以UDP/53來查詢,而在主從同步時(shí)是以TCP/53來同步。為了克服網(wǎng)絡(luò)中的單點(diǎn)故障問題,DNS服務(wù)器一般會(huì)有主DNS服務(wù)器與從DNS服務(wù)器。
主DNS服務(wù)器:管理和維護(hù)所負(fù)責(zé)解析的域內(nèi)解析庫的服務(wù)器
從DNS服務(wù)器:從主服務(wù)器或從服務(wù)器“?制”(區(qū)域傳輸)解析庫副本
主從在同步時(shí)有兩種機(jī)制:
push: 主服務(wù)器push給從服務(wù)器pull:從服務(wù)器pull主服務(wù)器
push: 推機(jī)制,主服務(wù)器有變,則主動(dòng)推送給從服?器,瞬間完成。
pull: 拉機(jī)制,從服務(wù)器定期地同步主服務(wù)器,即刷新時(shí)間間隔。如果刷新時(shí)間失敗,則在重試時(shí)間間隔再次同步。
一次完整的DNS查詢
Client -->hosts文件-->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 頂級域名DNS-->二級域名DNS…
如下場景:
Client: liansir------>lncdfzh.com.cn Liansir上網(wǎng)時(shí)會(huì)自動(dòng)獲取一個(gè)DNS地址,此DNS地址是liansir所在小區(qū)或電信提供一個(gè)DNS服務(wù)器,而此DNS上一般沒有qq.com所對應(yīng)的主機(jī)與IP的對應(yīng)關(guān)系,即沒有www主機(jī)所對應(yīng)的IP,(存放www主機(jī)所對應(yīng)IP的DNS服務(wù)器稱為權(quán)威服務(wù)器)
此時(shí),liansir自動(dòng)獲取的DNS會(huì)去找根域,(每個(gè)DNS軟件上面都有全球的根服務(wù)器的地址),根域會(huì)將自己子域.com的IP地址給liansir自動(dòng)獲取的DNS, 于是此DNS又去請求.com,并說我要找lncdfzh.com.cn,而.com也是非權(quán)威服務(wù)器,于是將其子域qq.com的地址發(fā)送給liansir自動(dòng)獲取的DNS,從而liansir用戶得到qq.com的地址,并成功訪問lncdfzh.com.cn
而當(dāng)liansir訪問過lncdfzh.com.cn之后,其本地就會(huì)有緩存,故而在短期之內(nèi)訪問lncdfzh.com.cn時(shí)并不會(huì)再去訪問根域。同樣地,那個(gè)電信DNS服務(wù)器也會(huì)保存相應(yīng)的緩存,從而提高訪問速度。
其實(shí),這個(gè)電信DNS?務(wù)器就是一個(gè)緩存服務(wù)器。
問題:如果liansir本地有qq.com的子域的DNS, 其如何訪問qq.com? 父域是知道子域的DNS地址的,但子域是不記錄父域的DNS地址的。故而此種情況還是要經(jīng)過根?進(jìn)而查詢的!
遞歸查詢:客戶端向第一個(gè)DNS服務(wù)器發(fā)送的請求,最后由此DNS服務(wù)器給客戶端結(jié)果?!柏?fù)責(zé)到底的一種行為” 迭代查詢:根域與各DNS服務(wù)器之間的查詢,“給你一個(gè)最好的結(jié)果但不是最終結(jié)果”。
DNS是一種機(jī)制,一種協(xié)議,實(shí)現(xiàn)這種機(jī)制的常用工具為bind, BekerleyInternatName Domain, ISC (lncdfzh.com.cn),目前為使用最廣泛的DNS服務(wù)器軟件。
DNS三步法
DNS的服務(wù)器軟件除了bind之外,還有bind-chroot(bind主目錄禁錮程序,就是將bind程序禁錮在家目錄當(dāng)中,centos 6之后的系統(tǒng)默認(rèn)禁錮在/var/named/目錄下);
DNS的配置文件主要有:
/etc/named.conf, /etc/named.rfc1912.zones: DNS的主配置文件;
/var/named: 該目錄為DNS數(shù)據(jù)庫文件存放的目錄,每一個(gè)域文件都存放在這里;
/etc/rc.d/init.d/named: 為DNS服務(wù)的服務(wù)腳本
一臺(tái)物理服務(wù)器可同時(shí)為多個(gè)區(qū)域提供解析,并且該DNS服務(wù)器上必須要有根區(qū)域文件named.ca;rndc(remote name domain controller)服務(wù)可為DNS提供輔助性的管理功能,該服務(wù)監(jiān)聽在主機(jī)TCP的953號(hào)端口,默認(rèn)與bind安裝在同一主機(jī)上,且只能通過127.0.0.1來連接DNS服務(wù)的named進(jìn)?。
安裝bind并啟動(dòng)named服務(wù)
[root@centos6 ~]#yum -y install bind

關(guān)閉防火墻并設(shè)置為開機(jī)不允許啟動(dòng)
[root@centos6 ~]#iptables -F
[root@centos6 ~]#chkconfig iptables off
[root@centos6 ~]#chkconfig --list iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@centos6 ~]#
CentOS 7為如下設(shè)置:
~]#systemctl is-enabled firewalld #查看防火墻是否開啟
~]#systemctl disable firewalld
啟動(dòng)named服務(wù)
[root@centos6 ~]#service named start
Starting named: [ OK ]
Centos 7相關(guān)命令:
[root@centos7-min ~]#systemctl enable named
[root@centos7-min ~]#systemctl disable named
[root@centos7-min ~]#systemctl start named
[root@centos7-min ~]#systemctl status named
創(chuàng)建域(zone)
首先編輯/etc/named.conf文件,本文以添加liansir99.com域?yàn)槔?/span>
在修改/etc/named.conf文件時(shí),最好先備份:cp -p /etc/named.conf /etc/named.conf.bak
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
allow-query { localhost; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};};zone "." IN {
type hint;
file "named.ca";};include "/etc/named.rfc1912.zones";include "/etc/named.root.key";

常見的修改選項(xiàng):
listen-on port 53 { localhost; }; localhost:相當(dāng)于一個(gè)變量,代表本機(jī)所有IP
allow-query { localhost; }; 只允許本機(jī)查詢
allow-query { any; }; any表示任何主機(jī),也可寫成一個(gè)網(wǎng)段
注意:任何服務(wù)程序如果期望其能夠通過網(wǎng)絡(luò)被其它主機(jī)訪問,至少應(yīng)該監(jiān)聽在一個(gè)能與外部主機(jī)通信的IP地址上。
緩存名稱服務(wù)器的配置:監(jiān)聽外部地址即可;
dnssec: 建議關(guān)閉dnssec,設(shè)為no
創(chuàng)建域zone數(shù)據(jù)庫文件
區(qū)域定義:本機(jī)能夠?yàn)槟男?/span>zone進(jìn)行解析,就要定義哪些zone;
zone "ZONE_NAME" IN {};
其中zone的格式為:
zone "ZONE_NAME" IN {type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
type:
該zone的類型,主要類型有:
hint:根
master:主DNSslave: 從DNSforward: 專用于轉(zhuǎn)發(fā)
創(chuàng)建zone:
[root@centos6 ~]#vim /etc/named.rfc1912.zones
zone "liansir99.com" IN {
type master;
file "liansir99.com.zone";
};
"/etc/named.rfc1912.zones" 47L, 1005C written
創(chuàng)建zone的數(shù)據(jù)庫文件:
[root@centos6 /var/named]#vim liansir99.com.zone
$TTL 86400
@ IN SOA ns1.liansir99.com. admin.liansir99.com. (
2016100401
1H
5M
7D
1D)
@ NS ns1.liansir99.com.
@ MX 10 mail.liansir99.com.
@ NS slave.liansir99.com.
ns1 A 10.1.1.1
slave A 10.1.1.4
www A 10.1.1.2
www A 10.1.1.3
mail A 10.1.1.5
ftp A 10.1.1.4
web CNAME ftp
修改解析庫文件的屬主屬組并重啟DNS服務(wù)
[root@centos6 /var/named]#chown named.named liansir99.com.zone
[root@centos6 /var/named]#chmod 640 liansir99.com.zone
[root@centos6 /var/named]#service named restart
Stopping named: . [ OK ]
Starting named: [ OK ]
[root@centos6 /var/named]#
如果沒有報(bào)錯(cuò)信息,則說明配置正常,若有相關(guān)報(bào)錯(cuò),則查看系統(tǒng)日志/var/log/messages.
也可進(jìn)行語法檢測:
[root@centos6 ~]#named-checkconf
[root@centos6 /var/named]#named-checkzone "liansir99.com" ./liansir99.com.zone zone
liansir99.com/IN: loaded serial 2016100401
OK
[root@centos6 /var/named]#
測試
[root@centos6 ~]#rndc reload
server reload successful
[root@centos6 ~]#
[root@centos6 ~]#dig lncdfzh.com.cn @10.1.1.1
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> lncdfzh.com.cn @10.1.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 27361;;
flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0;;
QUESTION SECTION:
;lncdfzh.com.cn IN A
;; ANSWER SECTION:
lncdfzh.com.cn 86400 IN CNAME websrv.liansir99.com.
;; AUTHORITY SECTION:
liansir99.com. 86400 IN SOA ns1.liansir99.com. admin.liansir99.com. 2016100401 3600 300 604800 86400
;; Query time: 1 msec
;; SERVER: 10.1.1.1#53(10.1.1.1)
;; WHEN: Wed Oct 5 17:16:20 2016
;; MSG SIZE rcvd: 102
[root@centos6 ~]#
查看53端口是否正常開啟:

找一客戶端,修改其/etc/resolv.conf文件,將nameserver指向主DNS10.1.1.1

注:重啟服務(wù)后失效,可在網(wǎng)卡配置文件里面修改
在客戶端上ping

在Windows上添加dns條目:


OK,我們再在DNS服務(wù)端開啟httpd功能:
[root@centos6 ~]#service httpd status
httpd (pid 6499) is running...
[root@centos6 ~]#cat /var/www/html/index.html welcome
liansir99.com [root@centos6 ~]#
在客戶端上links:

[root@rhel5.4 ~]#dig -t A lncdfzh.com.cn @10.1.1.1; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t A lncdfzh.com.cn @10.1.1.1
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31319
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;lncdfzh.com.cn IN A
;; ANSWER SECTION:
lncdfzh.com.cn 86400 IN A 10.1.1.3lncdfzh.com.cn 86400 IN A 10.1.1.2;; AUTHORITY SECTION:
liansir99.com. 86400 IN NS ns1.liansir99.com.
;; ADDITIONAL SECTION:
ns1.liansir99.com. 86400 IN A 10.1.1.1
;; Query time: 12 msec
;; SERVER: 10.1.1.1#53(10.1.1.1)
;; WHEN: Tue Oct 4 21:45:11 2016
;; MSG SIZE rcvd: 101
[root@rhel5.4 ~]#
可看出DNS是用了53號(hào)端口進(jìn)行網(wǎng)絡(luò)服務(wù)的,那此處其走的是TCP還是UDP呢?分別屏蔽TCP與UDP53端口,然后dig。
[root@centos6 ~]#iptables -A INPUT -p tcp --dport 53 -j REJECT

[root@centos6 ~]#iptables -F
[root@centos6 ~]#iptables -A INPUT -p udp --dport 53 -j REJECT

此由可知,DNS在一般情況下是用UDP進(jìn)行查詢的,誰叫人家UDP天生快人一步呢!至此,一個(gè)極簡風(fēng)格的DNS便配置完成了!步驟其實(shí)就不多,首先修改主配置文件/etc/named.con, 然后在主配置文件/etc/named.rfc1912.zones里面添加zone條目,最后在/var/named/目錄下創(chuàng)建相關(guān)zone的解析庫并重啟name即可!
資源記錄RR小結(jié):
資源記錄定義的格式:
語法:name [TTL] IN rr_type value
注意:
(1) TTL可從全局繼承
(2) @可用于引用當(dāng)前區(qū)域的名字
(3) 同一個(gè)名字可以通過多條記錄定義多個(gè)不同的值;此時(shí)DNS服務(wù)器會(huì)以輪詢方式
響應(yīng)
(4) 同一個(gè)值也可能有多個(gè)不同的定義名字;通過多個(gè)不同的名字指向同一個(gè)值進(jìn)
行定義;此僅表示通過多個(gè)不同的名字可以找到同一個(gè)主機(jī)
[文章來源于網(wǎng)絡(luò)]