DNS從入門到管理(一)
-
DNS概念
-
DNS三步法
-
反向解析
-
主從DNS服務器的實現
-
子域授權
-
智能DNS
-
壓力測試與DNS排錯
DNS概述
DNS(Domain
Name
System,域名系統),域名和IP地址相互映射的一個分布式數據庫,通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析。而DNS的主要作用,就是域名解析,將主機名解析成IP地址。DNS這種機制能夠完成從域名(FQDN)到主機識別IP地址之間的轉換,在DNS誕生之前,這個功能主要是通過本地的一個hosts文件來記錄域名和IP的對應關系,但hosts文件只能作用于本機,不能同步更新至所有主機,且當hosts文件很龐大時難以管理,因此,一個分布式、分層次的主機名管理架構DNS便應用而生。
FQDN(Full
Qualified Domain
Name)亦即完整主機名,完整主機名由主機名與域名構成。DNS同根文件系統一樣是一個倒置的樹狀結構,最頂層的叫做根服務器,主要負責頂級域名的管理,常見的頂級域名有.com、.cn、.net、.org、.edu、.gov、.mil等,頂級域名則負責管理其下面的二級域名,如baidu.com,qq.com等,二級域名服務器則負責對應的主機名稱或其三級域名解析,依次類推,根服務器管理頂級域名,頂級域名管理二級域名,二級域名管理三級域名或直接解析主機名,如此便形成了一個倒置的樹狀結構。
由此可見,每一級只負責對應下級的域的管理,而全球共有13個根節點服務器,10臺位于美國,其余3臺分別在英國、瑞典和日本,在這13臺根服務器當中有1臺為主根服務器放置在美國,其余12臺為輔根服務器,所有的根服務器均由美國政府授權的互聯網域名與號碼分配機構ICANN組織統一管理,負責全球互聯網域名根服務器、域名體系和IP地址等的管理。
hosts
hsots: 只能作正向解析,優先級比DNS高,hosts文件一般用于測試,或者用于局域網里面, 在局域網里面,也可以用nis。
解析類型
正向解析:FQDN --> IP,即把主機名解析為IP地址 反向解析: IP --> FQDN,即把IP地址解析為主機名
泛域名解析:避免用戶寫錯名稱時給出錯誤答案,可通過泛域名解析進行解析至某特定地址。
$GENERATE 1-254 HOST$ A 1.2.3.$
查詢類型
遞歸查詢:遞歸查詢一般是客戶機與服務器之間的查詢,即客戶機只發送一次請求, 其他的工作將由上層服務器去解決,最后一層一層地反饋結果到客戶端。 迭代查詢:迭代查詢一般是DNS服務器與DNS服務器之間的查詢,即最開始的DNS服務 器負責發起請求,其他涉及到的DNS服務器只負責響應即可,然后一直查找到目標DNS 服務器,并將結果返回給客戶端。
zone: DNS數據庫
DNS的解析過程當中涉及到DNS數據庫,此數據庫又分為正解與反解,正解即從主機名 到IP,反解即從IP到主機名,無論正解還是反解,每個域名所對應的解析記錄我們稱 之為zone(域)
RR: 資源記錄
RR(Resource Record), 這些記錄的類型有:A, AAAA, PTR, SOA, NS, CNAME, MX SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位于解析庫的第一條記錄 A:internet Address,作用,FQDN --> IP AAAA: FQDN --> IPv6 PTR: PoinTeR,IP --> FQDN NS: Name Server,專用于標明當前區域的DNS服務器 CNAME:Canonical Name,別名記錄 MX:Mail eXchanger,郵件交換器
主從DNS服務器
DNS也是一個網絡服務,因此就有對應的端口號,其端口號為53號,通常DNS在查詢時是以UDP/53來查詢,而在主從同步時是以TCP/53來同步。為了克服網絡中的單點故障問題,DNS服務器一般會有主DNS服務器與從DNS服務器。
主DNS服務器:管理和維護所負責解析的域內解析庫的服務器
從DNS服務器:從主服務器或從服務器“復制”(區域傳輸)解析庫副本
主從在同步時有兩種機制:
push: 主服務器push給從服務器pull:從服務器pull主服務器
push: 推機制,主服務器有變,則主動推送給從服務器,瞬間完成。
pull: 拉機制,從服務器定期地同步主服務器,即刷新時間間隔。如果刷新時間失敗,則在重試時間間隔再次同步。
一次完整的DNS查詢
Client
–>hosts文件–>DNS Service Local Cache –> DNS Server
(recursion) –> Server Cache –> iteration(迭代) –> 根–>
頂級域名DNS–>二級域名DNS…
如下場景:
Client: liansir——>www.qq.com Liansir上網時會自動獲取一個DNS地址,此DNS地址是liansir所在小區或電信提供一個DNS服務器,而此DNS上一般沒有qq.com所對應的主機與IP的對應關系,即沒有www主機所對應的IP,(存放www主機所對應IP的DNS服務器稱為權威服務器)
此時,liansir自動獲取的DNS會去找根域,(每個DNS軟件上面都有全球的根服務器的地址),根域會將自己子域.com的IP地址給liansir自動獲取的DNS, 于是此DNS又去請求.com,并說我要找www.qq.com,而.com也是非權威服務器,于是將其子域qq.com的地址發送給liansir自動獲取的DNS,從而liansir用戶得到qq.com的地址,并成功訪問www.qq.com
而當liansir訪問過www.qq.com之后,其本地就會有緩存,故而在短期之內訪問www.qq.com時并不會再去訪問根域。同樣地,那個電信DNS服務器也會保存相應的緩存,從而提高訪問速度。
其實,這個電信DNS服務器就是一個緩存服務器。
問題:如果liansir本地有qq.com的子域的DNS, 其如何訪問qq.com? 父域是知道子域的DNS地址的,但子域是不記錄父域的DNS地址的。故而此種情況還是要經過根域進而查詢的!
遞歸查詢:客戶端向第一個DNS服務器發送的請求,最后由此DNS服務器給客戶端結果?!柏撠煹降椎囊环N行為” 迭代查詢:根域與各DNS服務器之間的查詢,“給你一個最好的結果但不是最終結果”。
DNS是一種機制,一種協議,實現這種機制的常用工具為bind, BekerleyInternatName Domain, ISC (www.isc.org),目前為使用最廣泛的DNS服務器軟件。
DNS三步法
DNS的服務器軟件除了bind之外,還有bind-chroot(bind主目錄禁錮程序,就是將bind程序禁錮在家目錄當中,centos 6之后的系統默認禁錮在/var/named/目錄下);
DNS的配置文件主要有:
/etc/named.conf, /etc/named.rfc1912.zones: DNS的主配置文件; /var/named: 該目錄為DNS數據庫文件存放的目錄,每一個域文件都存放在這里; /etc/rc.d/init.d/named: 為DNS服務的服務腳本
一臺物理服務器可同時為多個區域提供解析,并且該DNS服務器上必須要有根區域文件named.ca;rndc(remote
name domain
controller)服務可為DNS提供輔助性的管理功能,該服務監聽在主機TCP的953號端口,默認與bind安裝在同一主機上,且只能通過127.0.0.1來連接DNS服務的named進程。
-
安裝bind并啟動named服務
[root@centos6 ~]#yum -y install bind
關閉防火墻并設置為開機不允許啟動
[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為如下設置:
~]#systemctl is-enabled firewalld #查看防火墻是否開啟 ~]#systemctl disable firewalld
啟動named服務
[root@centos6 ~]#service named start Starting named: [ OK ]
Centos 7相關命令:
[root@centos7-min ~]#systemctl enable named [root@centos7-min ~]#systemctl disable named [root@centos7-min ~]#systemctl start named [root@centos7-min ~]#systemctl status named
-
創建域(zone)
首先編輯/etc/named.conf文件,本文以添加liansir99.com域為例。
在修改/etc/named.conf文件時,最好先備份: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";
常見的修改選項:
listen-on port 53 { localhost; }; localhost:相當于一個變量,代表本機所有IP allow-query { localhost; }; 只允許本機查詢 allow-query { any; }; any表示任何主機,也可寫成一個網段
注意:任何服務程序如果期望其能夠通過網絡被其它主機訪問,至少應該監聽在一個能與外部主機通信的IP地址上。
緩存名稱服務器的配置:監聽外部地址即可;
dnssec: 建議關閉dnssec,設為no
創建域zone數據庫文件
區域定義:本機能夠為哪些zone進行解析,就要定義哪些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: 專用于轉發
創建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
創建zone的數據庫文件:
[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服務
[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]#
如果沒有報錯信息,則說明配置正常,若有相關報錯,則查看系統日志/var/log/messages.
也可進行語法檢測:
[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 www.liansir99.com @10.1.1.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.liansir99.com @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: ;www.liansir99.com. IN A ;; ANSWER SECTION: www.liansir99.com. 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
注:重啟服務后失效,可在網卡配置文件里面修改
在客戶端上ping
在Windows上添加dns條目:
OK,我們再在DNS服務端開啟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 www.liansir99.com @10.1.1.1; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t A www.liansir99.com @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: ;www.liansir99.com. IN A ;; ANSWER SECTION: www.liansir99.com. 86400 IN A 10.1.1.3www.liansir99.com. 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號端口進行網絡服務的,那此處其走的是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進行查詢的,誰叫人家UDP天生快人一步呢!至此,一個極簡風格的DNS便配置完成了!步驟其實就不多,首先修改主配置文件/etc/named.con, 然后在主配置文件/etc/named.rfc1912.zones里面添加zone條目,最后在/var/named/目錄下創建相關zone的解析庫并重啟name即可!
資源記錄RR小結:
資源記錄定義的格式: 語法:name [TTL] IN rr_type value 注意: (1) TTL可從全局繼承 (2) @可用于引用當前區域的名字 (3) 同一個名字可以通過多條記錄定義多個不同的值;此時DNS服務器會以輪詢方式 響應 (4) 同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進 行定義;此僅表示通過多個不同的名字可以找到同一個主機
反向解析
-
創建反向區域:反向區域也得指明主從
-
創建反向區域數據庫
在反向解析中,郵件服務要求比較高,要一一對應。對于區域數據而言,SOA與NS是必須要添加的!
[root@rhel5.4 ~]#dig -x 10.1.1.1 # 等價于dig -t PTR 5.1.1.10.in-addr.arpa ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -x 10.1.1.1;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4864;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;1.1.1.10.in-addr.arpa. IN PTR ;; ANSWER SECTION:1.1.1.10.in-addr.arpa. 86400 IN PTR ns1.1.10.in-addr.arpa. ;; AUTHORITY SECTION:1.10.in-addr.arpa. 86400 IN NS ns1.liansir99.com. ;; ADDITIONAL SECTION: ns1.liansir99.com. 86400 IN A 10.1.1.1 ;; Query time: 15 msec ;; SERVER: 10.1.1.1#53(10.1.1.1) ;; WHEN: Tue Oct 4 23:26:01 2016 ;; MSG SIZE rcvd: 104 [root@rhel5.4 ~]#
反向區域也就是個紙老虎,兩三步亦搞定,首先添加反向zone條目,然后創建反向區域數據庫,最后修改反向解析庫文件的權限與屬主屬組并重啟DNS服務!
主從DNS服務器的實現
主從DNS服務器的實現,其實也不難,我們在上面實現的就是一個主DNS,接著我們實現從DNS即可,主從DNS的相關介紹請查卷DNS概述。
主從DNS服務器實現的步驟:
-
主授權從:allow-transfer與從服務器的NS記錄
主服務器需要在bind的主配置文件/etc/named.conf或/etc/named.rfc191.zones的每個zone的定義中設置允許哪些從服務器來同步信息,不然誰都可以成為主的從服務器,這是一件多么可怕的事!
至于添加從服務器的NS記錄,也不難理解,添加了NS記錄,就得有解析NS的A記錄,不然怎么解析去。
-
修改從服務器的主配置文件/etc/named.conf
-
在/etc/named.rfc1912.zones里面添加從DNS的zone條目
注意:主從的域名必須完全一致!文件名無所謂!
-
重啟主從服務器的named進程,通過觀察日志文件/var/log/mmessages或者查看從服務器上的解析庫文件是否進行了同步。
注:從DNS服務器的數據解析庫文件不需要定義,因為要從主服務器上同步過來。
設置好Windows的主DNS服務器,刷新其緩存:
C:\Users\Administrator>ipconfig /flushdns Windows IP Configuration Successfully flushed the DNS Resolver Cache.
nslookup的交互式查詢與直接查詢:
在linux上:
那么,反向區域的從服務器如何配置呢?正向的從都會了,還不會反向的從呼?依葫蘆畫瓢唄!
反向區域的從服務器
在主服務器上:
當然可以直接在主服務器的/etc/named.conf文件中直接指明:
在從服務器上添加反向的zone條目:
從服務器的allow-transfer要修改為none:
rndc reload 即可實現反向區域的主從同步!
由此可知,不管是正向的主從還是反向的主從,我們的思路是類似的:在主DNS服務器上修改/etc/named.conf文件并添加正向或反向的zone條目,指定從服務器的IP地址,寫好正向和反向的解析庫文件;在從DNS服務器上,只需修改/etc/named.conf文件并添加正向或反向的zone條目,最后重啟DNS服務即可實現正向或反向的主從同(得到主DNS的解析庫文件)。
我們用同樣的端口測試方法可得到DNS的主從同步時用的是TCP/53.
子域授權
在DNS查詢的過程中,DNS解析請求發送到指定的DNS服務器后,其會一級一級去查找域名進行解析,此處的每一級就是一個域,且每個域都為上級域的子域。
所謂子域授權,因為本級域只負責解析該級域名,對于下一級域名的解析便告知對應的DNS服務器地址,具體的解析權交給下級完成。
授權原理就是在本域名服務器上的正向解析庫文件中定義子域對應的DNS服務器的主機名及其A記錄即可。另外,子域還需要定義其對應子域的解析庫文件,這樣才能對子域進行解析。
子域的實現有兩種方法:子域與父域在同一服務器上;子域與父域在不同的服務器上。
子域與父域在同一主機上的前提上子域與父域的訪問量并不大,父域也無需對子域進行授權;而子域與父域如果在不同主機上,則父域要對子域進行授權。
子域與父域在同一服務器上的實現
方法一:
-
修改/etc/named.conf文件
-
添加子域的zone條目:vim /etc/named.rfc1912.zones
-
創始解析庫文件
-
重啟服務
[root@rhel5.4 ~]#dig www.game.liansir99.com ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> www.game.liansir99.com ;; global options: printcmd;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56590 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.game.liansir99.com. IN A ;; ANSWER SECTION: www.game.liansir99.com. 86400 IN A 10.1.1.3 www.game.liansir99.com. 86400 IN A 10.1.1.2 ;; AUTHORITY SECTION: game.liansir99.com. 86400 IN NS ns2.game.liansir99.com. game.liansir99.com. 86400 IN NS ns1.liansir99.com. ;; ADDITIONAL SECTION: ns1.liansir99.com. 86400 IN A 10.1.1.1 ns2.game.liansir99.com. 86400 IN A 10.1.1.1 ;; Query time: 14 msec;; SERVER: 10.1.1.1#53(10.1.1.1) ;; WHEN: Wed Oct 5 02:54:28 2016 ;; MSG SIZE rcvd: 140 [root@rhel5.4 ~]#
過程:電信DNS服務器–>.(根)–> .com–>liansir99.com—>game.liansir99.com
注:在/etc/named.rfc1912.zones這個文件里面,其認為liansir99.com與game.liansir99.com是平級的!所以,我們可以直接數據解析庫中實現本機的子域。
方法二:
直接在資源記錄中實現子域:
創建子域的zone:
創建解析庫文件并重啟服務:
測試:
[root@rhel5.4 ~]#dig www.study.liansir99.com ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> www.study.liansir99.com;; global options: printcmd;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30814 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.study.liansir99.com. IN A ;; ANSWER SECTION: www.study.liansir99.com. 86400 IN A 10.1.1.3 www.study.liansir99.com. 86400 IN A 10.1.1.2 ;; AUTHORITY SECTION: study.liansir99.com. 86400 IN NS ns2.study.liansir99.com. study.liansir99.com. 86400 IN NS ns1.liansir99.com. ;; ADDITIONAL SECTION: ns1.liansir99.com. 86400 IN A 10.1.1.1 ns2.study.liansir99.com. 86400 IN A 10.1.1.1 ;; Query time: 30 msec ;; SERVER: 10.1.1.1#53(10.1.1.1) ;; WHEN: Wed Oct 5 03:22:13 2016 ;; MSG SIZE rcvd: 141 [root@rhel5.4 ~]#
子域與父域在不同服務器上的實現
[root@centos6 ~]#yun -y install bind-chroot [root@centos6 ~]#service named restart Stopping named: [ OK ] Starting named: [ OK ] [root@centos6 ~]#
bind-chroot的安裝使得DNS的數據庫文件搬家:
[root@centos6 ~]#cd /var/named/chroot/ [root@centos6 /var/named/chroot]#ls dev etc usr var
在父域服務器上委派子域:在zone的解析庫里面添加相應的子域NS記錄并關閉dnssec
在/etc/named.conof里面關掉devsec相關選項。(只能no,不能注釋掉,注釋掉默認為yes)
在子域服務器上:也可以選擇安裝bind-chroot,并啟動named服務。
[root@auto-centos7 ~]#yum -y install bind bind-chroot [root@auto-centos7 ~]#systemctl start named
-
修改主配置文件/etc/named.conf里面的相關內容并添加zone條目(或/etc/named.rfc1912.zones里面創建zone條目)
[root@auto-centos7 ~]#vim /etc/named.conf zone "music.liansir99.com" IN { type master; file "music.liansir99.com.zone"; }; [root@auto-centos7 ~]#named-checkconf
-
創建解析庫文件
別忘了修改屬主屬組與權限:
[root@auto-centos7 /var/named]#chown named.named music.liansir99.com.zone [root@auto-centos7 /var/named]#chmod 640 music.liansir99.com.zone [root@auto-centos7 /var/named]#
-
rndc reload 父域與子域服務器
在子域上自查:
在父域上自查:
在其它主機上檢測:
本文《DNS從入門到管理(一)》前半部分主要講述了DNS及其相關的基本概念,后面以實驗的形式給出一個最基本的DNS是怎么實現的,接著實現了DNS的反向解析、主從DNS服務器,最后介紹了子域授權。
2016.10.6
原創文章,作者:Liansir,如若轉載,請注明出處:http://www.www58058.com/49999