Linux之DNS詳解

一、DNS的原理

DNS(DomainName Server)是域名解析服務器,提供域名和IP地址之間一種轉換機制,IP地址是平面結構不容易記住,DNS是層次化的結構,便於記憶

下面是DNS原理的通俗易懂圖便於理解下面的講解

DNS的層次化

1)根域:根域位於層次結構的最頂部並用“.”來表示,全球有十三個根服務器,一個主根服務器,十二個輔助根服務器。

2)頂級域:頂級域是按照組織或地理位置來劃分的

.gov:表示政府組織

.com:表示商業組織

.net:網絡中心

.org:非營利性組織

.edu:教育部門

.cn   .uk .us:國家國別的代碼,cn表示中國,uk表示英國,us表示美國

3)二級域:由國際域名組織爲互聯網中的個人或部門指定和登記的二級域,如51cto.com,baidu.com

DNS服務器配置大致分爲三種

(1)主DNS服務器(Master DNS) :數據庫更新由管理員手動完成

(2)輔助DNS服務器 (SlaveDNS):數據庫更新從主服務器或其他輔助DNS服務器那裏完成

(3)緩存DNS服務器:沒有自己的區域數據文件,只是幫助客戶端向外部DNS請求查詢,然後將查詢的結果保存到它的緩存中。

一個域可以有擁有多個從服務器,但只能有一臺主服務器

一臺從服務器也可以從另一臺從服務器那裏獲取數據

客戶端檢索本地數據文件的相關記錄,客戶端將無法自行解釋的需求,通過53端口送給指定的DNS服務器


DNS解析類型

    FQDN(Fully Qualified Domain Name)完全合格域名,由主機名+域名組成,如www.51cto.com

正向解析:FQDN-->IP,把完全合格域名解析爲IP地址

反向解析:IP-->FQDN,把IP解析爲完全合格域名。


二、關於軟件BIND

BIND:BerkeleyInternet Name Daemon,BIND是在Internet上應用最爲廣泛的DNS服務器,提供穩定與可信賴的下層結構以提供域名與IP地址的轉換

Bind的相關軟件包

bind-9.8.2-0.17.rc1.el6.x86_64提供域名服務的主程序和相關文件

bind-libs-9.8.2-0.17.rc1.el6.x86_64提供域名域名服務器所依賴的庫文件

bind-utils-9.8.2-0.17.rc1.el6.x86_64提供了對DNS 服務的測試工具程序

注:bind-chroot:安裝上這個包之後讓named進程有限的活動在/var/named/chroot/中防止******導致服務器的崩潰。這裏就不安裝了,因爲安裝之後除了路徑改變之後其他均不變。所以爲了更好的熟悉過程就暫時不裝了

安裝bind軟件:

首先確保yum源創建好,然後安裝bind軟件

[root@stu2~]# yum -y install bind
查看生成了那些配置文件
[root@stu2~]# rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf          //主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones //區域配置文件
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback

三、配置緩存服務器

把客戶端發送的請求轉發給能解析到的服務器

在主配置文件裏面/etc/named.conf裏面修改

開啓服務service named start (/etc/rc.d/init.d start)

第一次需要開啓服務,之後只需要加載配置文件即可

servicenamed reload (rndc reload)

named-checkconf


DNS的測試工具

[root@stu2named]# rpm -ql bind-utils
/usr/bin/dig          //測試命令工具
/usr/bin/host         //host測試命令工具
/usr/bin/nslookup     //nslookup測試命令工具
/usr/bin/nsupdate
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz


命令的使用

dig[option] 資源記錄類型名稱 @servier-ip

option:

-t指定類型

-x指定IP

@servier-ip說明解析是指定服務器的IP

不寫IP,默認是/etc/resolve.conf裏面指定的IP

資源記錄有類型:

A:正向記錄,用來記錄當前域名所對應的IP地址

NS:(nameserver)指明當前域內有哪些服務器

MX:用來指明一個域的郵件服務器

CNAME:進行正式名稱和別名的對應

SOA:標明當前域的起始授權記錄,指明當前域內的主DNS服務器

PTR:代表“IP地址”與“主機名”的對應關係,作用剛好與A記錄相

nslookup dig host三個命令的使用範例

[root@stu2named]# nslookup   //測試工具命令
>server 172.16.0.1           //指向能爲你解析域名服務器的IP地址(一般爲運營商的IP地址)
Defaultserver: 172.16.0.1
Address:172.16.0.1#53
>set q=A                     //用set設置q指定類型爲A記錄,然後輸入FQDN
>www.bai.com
Server:        172.16.0.1
Address: 172.16.0.1#53
Non-authoritativeanswer:
Name:    www.bai.com
Address:221.5.71.29           //解析到的結果#172

[root@stu2 named]# dig -t A www.baidu.com @172.16.0.1

[root@stu2 named]# host -t A www.baidu.com 172.16.0.1


四、主從DNS服務器的搭建

首先在主配置文件/etc/named.conf中需要註釋掉幾行

然後在區域配置文件/etc/named.rfc1912.zones中創建區域

zone "magedu.com" IN {        //zone關鍵字添加正向區域解析庫文件
   type master;               //指定類型
   file "magedu.com.zone";    //指定區域文件名,是相對於/var/named路徑,這裏的相對路徑是根據主配置文件裏面的directory關鍵字定義的
   allow-transfer { 172.16.2.16; }; //指定slave服務器的Ip,可以指定多個
};
zone "10.16.172.in-addr.arpa" IN { //zone關鍵字添加一個反向解析庫文件
   type master;
   file "172.16.10.zone";
   allow-transfer { 172.16.2.16; };
};


正向解析文件創建目錄爲/var/named/magedu.com.zone


區域創建好之後需要修改權限和屬組

#chmod  640  magedu.com.zone

#chown  :named  magedu.com.zone

反向區域解析文件  /var/named/172.16.10.zone

配置完之後,檢查語法是否錯誤,然後加載配置文件後即可進行正反向的區域解析。

#named-checkconf

#rndc reload


從slave的配置

在主配置文件/etc/named.conf中需要註釋掉幾行

在區域配置文件/etc/named.rfc1912.zones中創建區域

#rndcreload

#cd/var/named/slaves

#ls即可以查看內容


五、DNS的子域授權

思路:在父域的區域解析庫文件裏面創建子域的NS記錄和子域的A記錄,在子域服務器上面有子域的區域解析庫文件

在/etc/named.conf註釋掉一下四行

options{
//      listen-on port 53 { 127.0.0.1; };
//      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     { localhost; };
        recursion 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";  用//表示註釋掉這幾行

在/etc/named.rfc1912.zones添加內容並創建子域區域解析庫文件dns.dep1.magedu.com

zone"dep1.magedu.com" IN {
        type master;
        file "dep1.magedu.com.zone";
};
$TTL600
@     IN SOA   dns.dep1.magedu.com. admin.dep1.magedu.com. (
              20130813
              2H
              10M
              7D
              2D )
         IN  NS  dns
         IN  MX 10 mail
dns         IN  A  172.16.251.253
mail        IN  A  172.16.251.6
www         IN  A  172.16.251.6
www         IN  A  172.16.251.8

實現子域授權

父域是可以直接解析子域的,子域默認是不能解析父域的,但可以進行轉發進行訪問父域

[root@stu2named]# dig -t A www.dep1.magedu.com
;<<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t Awww.dep1.magedu.com
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43341
;;flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;;QUESTION SECTION:
;www.dep1.magedu.com.        IN A
;;ANSWER SECTION:
www.dep1.magedu.com.    600    IN A   172.16.251.8
www.dep1.magedu.com.    600    IN A   172.16.251.6
;;AUTHORITY SECTION:
dep1.magedu.com.   536    IN NS dns.dep1.magedu.com.
;;ADDITIONAL SECTION:
dns.dep1.magedu.com.  536    IN A   172.16.251.253
;;Query time: 6 msec
;;SERVER: 172.16.10.8#53(172.16.10.8)
;;WHEN: Thu Aug 15 17:54:40 2013
;;MSG SIZE  rcvd: 103

六、DNS的轉發

當客戶端找自己的DNS服務器解析自己的主機時,該DNS服務器查看不是自己管理範圍,就直接轉發出去通過能解析的

DNS服務器進行解析,將返回結果返回給客戶端自己的DNS服務器,由該服務器將結果返回給客戶端

options {
//      listen-on port 53 { 127.0.0.1; };
//      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     { localhost; };
        recursion yes;
            forward only; //只允許轉發
            forwarders { 172.16.0.1; }; //轉發到能解析的服務上
//      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";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

總結:深刻理解DNS服務器的工作原理和操作過程對以後的學習有很大的幫助,希望大家互相學習,共同進步,不足之處我會盡量完善!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章