1、什麼是DNS?
域名系統(英文:Domain Name System,DNS)是網際網路的一項服務,它作為将域名和IP位址互相映射的一個分布式資料庫,能夠使人更友善的通路網際網路。DNS 使用TCP和UDP端口53。目前,對于每一級域名長度的限制是63個字元,域名總長度則不能超過253個字元。
DNS最早于1983年由保羅·莫卡派喬斯(Paul Mockapetris)發明;原始的技術規範在882号網際網路标準草案(RFC 882)中釋出。1987年釋出的第1034和1035号草案修正了DNS技術規範,并廢除了之前的第882和883号草案。在此之後對網際網路标準草案的修改基本上沒有涉及到DNS技術規範部分的改動。
早期的域名必須以英文句号“.”結尾,當使用者通路 www.toxingwang.com 的HTTP服務時必須在址欄中輸入:http://www.toxingwang.com.,這樣DNS才能夠進行域名解析。如今DNS伺服器已經可以自動補上結尾的句号。
2、DNS的基本概念:
2.1 DNS記錄類型及基本格式
SOA記錄:表明此 DNS 名稱伺服器是為該 DNS 域中的資料的資訊的來源。
##SOA記錄格式
ZONE NAME TTL IN SOA FQDN ADMINISTRATOR_MAILBOX (
serial number
refresh
retry
expire
na ttl )
##時間機關:M(分鐘)、H(小時)、D(天)、W(周),預設機關是秒
##郵箱格式:[email protected] -寫為-> admin.toxingwang.com
域名伺服器記錄(NS記錄):用來指定某域名由哪個DNS伺服器來進行解析。
##NS(Name Server): ZONE NAME --> FQDN
toxingwang.com. 600 IN NS ns1.toxingwang.com.
toxingwang.com. 600 IN NS ns2.toxingwang.com.
ns1.toxingwang.com. 600 IN A 192.168.8.100
ns2.toxingwang.com. 600 IN A 192.168.8.101
##NS記錄除了NS記錄本身,還應該包含NS對應A記錄
主機記錄(A記錄):A記錄是用于名稱解析的重要記錄,它将特定的主機名映射到對應主機的IP位址上。
##A(address): FQDN-->IPv4
mail.toxingwang.com. 600 IN A 192.168.8.3
别名記錄(CNAME記錄): 用于将某個别名指向到某個A記錄上,這樣就不需要再為某個新名字另外建立一條新的A記錄。
##CNAME(Canonical NAME): FQDN-->FQDN
www2.toxingwang.com. IN CNAME www.toxingwang.com.
郵件交換記錄(MX記錄):用于電子郵件程式發送郵件時根據收信人的位址字尾來定位郵件伺服器。
##MX(Mail eXchanger): ZONE NAME --> FQDN
ZONE NAME TTL IN MX pri VALUE
##優先級:0-99,數字越小級别越高,如:
toxingwang.com. 600 IN MX 10 mail.toxingwang.com.
mail.toxingwang.com. 600 IN A 192.168.8.3
IPv6主機記錄(AAAA記錄): 與A記錄對應,用于将特定的主機名映射到一個主機的IPv6位址。
服務位置記錄(SRV記錄): 用于定義提供特定服務的伺服器的位置,如主機(hostname),端口(port number)等。
反向解析記錄(PTR記錄):用于将一個IP位址映射到對應的域名,也可以看成是A記錄的反向,IP位址的反向解析。
NAPTR記錄: 它提供了正規表達式方式去映射一個域名。NAPTR記錄非常著名的一個應用是用于ENUM查詢。
2.2 DNS查詢有兩種方式:遞歸 和 疊代。
遞歸查詢圖解:
使用者使用toxingwang.com的DNS伺服器ns.toxingwang.com解析www.kernel.org主機的遞歸查詢過程如下:
疊代查詢圖解:
同樣使用者使用toxingwang.com的DNS伺服器ns.toxingwang.com查詢www.kernel.org主機的疊代查詢過程如下:
本地dns伺服器需要發起多次查詢請求,疊代方式查詢到www.kernel.org主機,而對于使用者來說,本地dns伺服器卻是遞歸查詢,使用者隻需發起一次查詢請求,伺服器将查詢到的結果回報給使用者。
DNS用戶端設定使用的DNS伺服器(如上圖的ns.toxingwang.com)一般都是遞歸伺服器,它負責全權處理用戶端的DNS查詢請求,直到傳回最終結果。而DNS伺服器(如上圖的根域、org域等)之間一般采用疊代查詢方式。以查詢 www.kernel.org 為例:
用戶端發送查詢封包"query www.kernel.org"至DNS伺服器,DNS伺服器首先檢查自身緩存,如果存在記錄則直接傳回結果。
如果記錄老化或不存在,則
- DNS伺服器向根域名伺服器發送查詢封包"query www.kernel.org",根域名伺服器傳回 .org 域的權威域名伺服器位址。
- DNS伺服器向 .com 域的權威域名伺服器發送查詢封包"query www.kernel.org",得到 .kernel.org 域的權威域名伺服器位址。
- DNS伺服器向 .kernel.org 域的權威域名伺服器發送查詢封包"query www.kernel.org",得到主機 www的A記錄,存入自身緩存并傳回給用戶端。
2.3 DNS監聽端口
DNS預設使用tcp53和udp53端口,TCP53端口一般用于區域傳送,而其他時候使用UDP53。
3、常見DNS伺服器:
目前網際網路上最為廣泛的DNS伺服器為bind,而企業内部,由于很多企業使用windows AD域,是以Windows DNS在企業内部應用較多。其他還包括:
DJBDNS (Dan J Bernstein's DNS implementation)
MaraDNS
NSD (Name Server Daemon)
PowerDNS
4、BIND9的安裝:
- 源碼安裝:
bind官方網站提供了最新版的bind安裝源碼,可以下載下傳編譯安裝:http://www.isc.org/downloads/
- yum源安裝:
如果使用RHEL、CentOS,可以使用yum線上安裝,如果是ubuntu等,則可以使用apt線上安裝。
我這裡以Centos使用yum安裝為例,測試環境如下:
主機名:ns.toxingwang.com
主機IP:192.168.8.101
[[email protected] ~]# rpm -q bind ##檢視目前是否安裝bind,如果安裝的是比較舊的版本,則可以先删除
目前centos 6的安裝源提供了bind9.8的安裝包
[[email protected] ~]# yum list |grep "^bind" ##查找bind安裝包
bind.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-chroot.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-dyndb-ldap.x86_64 2.3-2.el6_4.1 @updates
bind-libs.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-sdb.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-utils.x86_64 32:9.8.2-0.17.rc1.el6_4.5 @updates
bind-devel.i686 32:9.8.2-0.17.rc1.el6_4.5 updates
bind-devel.x86_64 32:9.8.2-0.17.rc1.el6_4.5 updates
bind-libs.i686 32:9.8.2-0.17.rc1.el6_4.5 updates
這裡隻須安裝最基本的bind、bind-libs、bind-utils三個元件即可
[[email protected] ~]# yum -y install bind bind-libs bind-utils
5、BIND9的基本配置:
5.1 bind的檔案:
主配置檔案:/etc/named.conf
rndc配置檔案:/etc/rndc.conf
資料目錄:/var/named/
[[email protected] ~]# ls /var/named/
dynamic named.empty named.loopback data named.ca named.localhost slaves
5.2 配置named.conf
named.conf的基本配置中,檔案主要分兩部分,全局配置和zone配置:
預設情況下,named.conf已經有基本配置,我們删除後重新配置後如下:
options { ##全局配置,所有配置都要以分紅結尾
listen-on port 53 { 192.168.8.101; }; ##監聽端口及位址,注意,大括号與中間内容間需要有空格
allow-query { 192.168.8.0/24; }; ##允許使用者發起遞歸查詢的位址範圍
directory "/var/named"; ##資料檔案預設目錄
};
zone "." IN { ##定義跟區域
type hint; ##區域類型
file "named.ca"; ##區域對應資料檔案
};
zone "toxingwang.com" IN { ##定義本次試驗解析域
type master; ##區域類型為master
file "named.toxingwang"; ##區域資料檔案
};
zone "localhost" IN {
type master;
file "named.localhost";
};
5.3 配置zone檔案
預設資料檔案:
安裝好bind98後,預設已經有根域和localhost域的資料檔案,本次我們不修改其配置。
配置域toxingwang.com資料檔案:
##複制localhost域資料檔案作為模闆修改
[[email protected] named]# cp -p named.localhost named.toxingwang.com ##複制時保留原來的權限
##修改資料檔案
[[email protected] named]# vi named.toxingwang.com
$TTL 1H ##定義全局TTL宏
@ IN SOA ns.toxingwang.com. admin.toxingwang.com. ( ##從這裡到下面反括号都是定義SOA記錄
2013081701 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.toxingwang.com.
IN MX 10 mail.toxingwang.com.
ns IN A 192.168.8.101
www IN A 192.168.8.100
mail IN A 192.168.8.3
www2 IN CNAME www.toxingwang.com.
配置檢查:
[[email protected] named]# named-checkconf ##檢查named.conf配置檔案是否存在文法錯誤
[[email protected] named]# named-checkzone "toxingwang.com" /var/named/named.toxingwang.com ##檢查資料檔案
zone toxingwang.com/IN: loaded serial 2013081701
OK
檢查無誤後即可啟動named伺服器了:
[[email protected] named]# chkconfig named on ##加入開機啟動
[[email protected] named]# service named start
啟動 named: [确定]
5.4 測試解析
測試用具:nslookup、dig
使用nslookup測試時,需先指定server 為named伺服器位址
原文連結:http://www.toxingwang.com/linux-unix/linux-admin/1165.html