域名服務(DNS )是一種組織成域層次結構的計算機和網絡命名系統。通過DNS服務可以將域名解析為IP地址,從而使得人們能通過簡單好記的域名來代替IP地址訪問網絡。
通過建立DNS數據庫,記錄主機名稱與IP地址的對應關系,駐留在服務器端,為客戶端的主機提供IP地址解析服務。當某台主機要與其他主機通信時,就可以利用主機名稱向DNS服務器查詢該主機的IP地址。
整個DNS域名系統包括以下部分
1 DNS域名空間;
頂級域名(Top Level Domain):國家頂級域名、通用頂級域名、基礎結構域名(反向域名)。
2 資源記錄;將DNS域名映射到特定類型的資源信息,以便在名稱注冊和解析時使用。
3 DNS服務器;提供存儲和應答資源記錄的名稱查詢服務。
4 DNS客戶端;用來查詢DNS服務,將域名解析為查詢中指定的資源記錄。
一個服務器所負責管轄的(或有權限的)范圍叫做區(zone)。每個區設置相應的權限域名服務器(authentication name server),用來保存該區中的所有主機的域名到IP地址的映射。
DNS服務器管轄是以“區”為單位。區是DNS服務器實際管轄的范圍。區可能小於等於域,但不可能大於域。
樹狀結構的DNS域名服務器
域名解析過程:
遞歸查詢:即一級一級地找。主機向本地域名服務器的查詢一般都采用遞歸查詢。
如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址,那麼本地域名服務器就以DNS客戶的身份,向其他根域名服務器繼續發出查詢請求報文,而不是讓該主機進行下一步查詢。遞歸查詢返回的結果或者是所要查詢的IP地址,或者是報錯。
迭代查詢:一個一個地找。本地域名服務器向根域名服務器的查詢通常采用迭代查詢。
當根域名服務器收到本地域名服務器發出的迭代查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地域名服務器下一步該向哪個域名服務器進行後續的查詢,然後讓本地域名服務器進行後續的查詢(而不是替本地域名服務器進行後續查詢)。即告訴你怎麼查,而不是替你去查。
為提高DNS查詢效率,減輕根域名服務器的負荷和減少因特網上DNS查詢報文數量,在域名服務器中廣泛使用了高速緩存(或高速緩存服務器),用來存放最近查詢過的域名以及從何處獲得域名映射信息的記錄。
本地域名服務器采用迭代查詢
本地域名服務器采用遞歸查詢
DNS資源記錄類型: ——摘自《鳥哥的linux私房菜》
$TTL :當有外部 DNS 服務器對你的 DNS 的這個領域進行查詢時,這一筆記錄會放置在對方 DNS 服務器內幾秒鐘的意思。
$ORIGIN:這個設定值可以重新指定 zone 的定義。在預設的情況下, 這個正反解數據庫檔案中的 zone 是由 /etc/named.conf 所指定的,就是 zone 那個參數的功能。 不過,這個 zone 是可以改的,就是用 $ORIGIN 來修訂就是了。通常這個設定值不會用到的。
@:這個符號代表 zone 的意思! 以上面的 named.local 來說, 這個檔案由 /etc/named.conf 定義出 zone 為 localhost. ,因此在本檔案的 @ 就代表 localhost. !
. :這個點 (.) 很重要!因為他代表一個完整主機名稱 (FQDN) 而不是僅有 hostname 而已。舉例來說,如果你在本設定檔上面規范一個主機名稱為 www 時,那部主機的 FQDN 為 www.localhost. 如果你寫出 www.localhost 時,由於末了沒有那個小數點,則 zone 會主動加入該主機名稱, 所以最終的 FQDN 會變成 www.localhost.localhost. !
SOA:Start of Authority 的意思。 這個標志代表著 master/slave 相關的認證、授權資料。 不論你的 DNS 系統有沒有設定 master/slave 的架構,都需要含有這個設定才好。 SOA 後面共帶有三個參數,所以該行為:
[zone] IN SOA [主機名] [管理員 email] ([五組更新時間參數])
每個設定項目你可以這樣看:
主機名:就是 master DNS 的主機名稱,通常填寫本身主機名即可。還是要注意那個小數點的存在與否!非常重要!
管理員 email:本來應該是 "root@localhost." 的,不過因為 @ 已經被作為特殊代號 (zone), 所以就用小數點來取代,因此 email 就成為 "root.localhost." 。
(五組數字):這五個數字分別代表 serial, refresh, retry, expire, ttl。
至於那五個數字的意義是這樣的:
1 Serial:只是一個序號,但這個序號可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序號為 100 但 slave 序號為 90 時,那麼這個 zone file 的資料就會被傳送到 slave 來更新了。 由於這個序號代表新舊資料,通常我們建議你可以利用日期來設定!舉例來說,上面的資料是在 2006/10/20 所寫的第一次,所以用 2006102001 作為序號代表!
2 Refresh:除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 命令 slave 多久進行一次主動更新;
3 Retry:如果到了 Refresh 的時間,但是 slave 卻無法連接到 master 時, 那麼在多久之後,slave 會再次的主動嘗試與主機連線;
4 Expire:如果 slave 一直無法與 master 連接上,那麼經過多久的時間之後, 則命令 slave 不要再連接 master 了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理員處理完畢後, 再重新來到 slave DNS 重新啟動 bind 吧!
5 Minimun:這個就有點象是 TTL !
NS:就是 name server 的縮寫,這個標志的參數是:[zone] IN NS [主機名稱]
注意, NS 後面接的一定是主機名稱!代表的意思是說:“這個 zone 的查詢請向後面這部主機要求”的意思。 所以,如果你這個 zone 有兩部以上的 DNS 服務器負責時,那就必需要寫兩個 NS 了!而 NS 後面接的主機名稱必需要有 IP 的對應啊!因此就需要 A 這個標志了!
A:是正解的符號,參數是:[hostname] IN A [IP]
意思是說該部主機的 IP 對應之意!也是最常用的一個標志了!
MX:就是 Mail eXchanger(MX) 的簡寫,他的參數是這樣寫的:
[hostname] IN MX [順序] [主機名稱]
注意,這個 MX 與 mail server 有關,沒有 mail server 的朋友可以省略這個標志,但是如果你的領域內有 mail server 時,就必需要設定這個 MX 才好。MX 的用途是在於『郵件轉遞』或者是經由上層郵件主機備份的一個機制, 後面設定的那個主機名稱通常是你的上游郵件主機,相關的意義我們會在 mail server 章節再跟大家詳談。 另外, MX 後面接的數值是越小越優先,而接的主機名稱必需要具有 A 的標志才可以!
如果你不知道如何設定,通常建議你直接設定成你的 mail server 主機名稱即可
CNAME:顧名思義,這個標志在建立“主機別名”的啦!參數為:[hostname] IN CNAME [主機名稱]。注意一下, CNAME 後面接的是主機名稱。因為有好幾部主機名稱都對應到同一個 IP 上頭, 你當然可以針對每個主機名稱給予一個 A ,不過如果未來要改 IP 時,你就得改好幾個啦! 此時改為 CNAME 來處理就很簡單。如上表所示,如果我想要知道 ftp.vbird.tsai 的 IP 時, DNS 會先告知 ftp.vbird.tsai 屬於 linux.vbird.tsai 的 CNAME ,然後再透過 linux.vbird.tsai 來得到正確的 IP。
TXT:這個東西在進行“說明”而已!亦即是前面那部主機的一些信息。 特別注意的是,沒事的話,“信息不要寫得太詳細,有的時候甚至應該要寫些錯誤的訊息!” 為什麼呢?如果寫得太詳細的話,那麼那些個 cracker 不就很簡單的就可以將您的網站信息取得, 並進而入侵了嗎?
DNS服務器類型:主域名服務器
輔助域名服務器:1)容錯能力
2)減少廣域鏈路的通信量
3)減輕主服務器的負載
緩存域名服務器:僅僅負責提供緩存解析的結果。
正向解析:從域名到IP地址解析的過程。
反向解析:從IP地址到域名的解析過程。反向解析的作用為服務器進行身份驗證。
BIND:Berkeley Internet Name Domain
PowerDNS MyDNS
bind:進程名稱:named
安裝包:bind bind-libs bind-utils(提供測試工具) bind-chroot caching-nameserver
[root@station39 ~]# yum install bind
主配置文件/etc/named.conf 需要手動建立
options {
directory "/var/named"; //**數據文件存放位置
};
zone "." IN {
type hint ;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
數據庫文件存放位置:/var/named
named.ca 根名稱服務器的地址
[root@station39 named]# dig -t NS . @a.root-servers.net > /var/named/named.ca //**查找全球
根域名服務器的地址並重定向到named.ca
區域文件:
localhost.zone 把localhost解析成127.0.0.1
[root@station39 named]# cat localhost.zone
$TTL 86400
@ //*指代當前域 IN SOA @ //* 負責該區域名稱解析的授權主機名 root// 管理員 (
//* 序列號 42 ; serial (d. adams)
//* 設置更新時間間隔 3H ; refresh
//* 重試時間間隔 15M ; retry
//* 設置過期時間 1W ; expiry
//* 設置最小默認TTL緩存時間 1D ) ; minimum
IN NS @
IN A 127.0.0.1
IN AAAA ::1
序列號:用於標識該區域的數據是否有更新,一般情況下,主服務器會在數據更新之後將序列號加1,當輔助域名服務器需要與主服務器進行區域復制的時候,就會比較這個數值。
更新時間間隔:定義輔助域名服務器隔多久時間與主域名服務器進行一次區域復制操作。
重試時間間隔:當輔助域名服務器在該時間內一直不能與主要名稱服務器取得聯系時,重試區域復制的時間間隔。
最小默認TTL:區域的默認生存時間(TTL)和緩存時間否定應答的緩存時間
named.local 把127.0.0.1解析成localhost
[root@station39 named]# cat named.local
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
啟動腳本/etc/init.d/named
輔助控制工具:rndc 遠程名稱進程控制器:可以遠程控制DNS服務器 重新加載讀取配置文件,停止或者重啟DNS服務器。默認監聽端口:953.。
主配置文件:/etc/rndc.conf
需要手動生成: rndc-confgen > /etc/rndc.conf
[root@station39 named]# cat /etc/rndc.conf
# Start of rndc.conf
key "rndckey" {
algorithm hmac-md5;
secret "8CIXalFy/sjPl1U79wWj6A==";
};
options {
default-key "rndckey";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndckey" {
# algorithm hmac-md5;
# secret "8CIXalFy/sjPl1U79wWj6A==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndckey"; };
# };
# End of named.conf
[root@station39 named]# tail /etc/rndc.conf | head -9 | sed 's/^# //g'
key "rndckey" {
algorithm hmac-md5;
secret "8CIXalFy/sjPl1U79wWj6A==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndckey"; };
}; //** 將此文件追加到named.conf 就可以使用rndc來控制DNS服務器了。
chown :named /etc/named.conf
chown :named /var/nmed/* -R
service named configtest
rndc flush //**清空緩存
[root@station39 named]# vim a.com.zone
$TTL 86400
$ORIGIN a.com.
@ IN SOA a.com. root (
100 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns
IN MX 5 mail
ns IN A 192.168.0.39
mail IN A 192.168.0.39
www IN A 192.168.0.1
www IN A 192.168.0.254
bbs IN CNAME www
ftp IN A 192.168.0.254
fw IN A 192.168.0.254
[root@station39 named]# chown :named a.com.zone
下面通過配置一個主域名服務器來說明DNS配置過程:
主配置文件:
options {
directory "/var/named"; //**數據文件存放位置
allow-notify { 192.168.0.127; } ;
querylog 1 ; //** 啟用日志功能 1 開啟 0 關閉
version "None of your business !" //** 禁止查詢版本號
listen-on { 192.168.0.39 ; }; //**指定監聽的地址
allow-recursion { 192.168.0.0/24; }; //**只給某個網段遞歸查詢,也可以使用ACL
allow-query { 192.168.0.0/24; }; //**只允許誰來查詢
};
zone "." IN {
type hint ;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
zone "a.com" IN {
type master;
file "a.com.zone";
allow-transfer { 192.168.0.127; }; //** 允許區域傳送
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "0.168.192.zone" ;
allow-transfer { 192.168.0.127;};
};
正向區域解析文件
[root@station39 named]# vim a.com.zone
$TTL 86400
$ORIGIN a.com.
@ IN SOA a.com. root (
100 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns
IN NS ns2
IN MX 5 mail
ns IN A 192.168.0.39
ns2 IN A 192.168.0.127
mail IN A 192.168.0.39
www IN A 192.168.0.1
www IN A 192.168.0.254
bbs IN CNAME www
ftp IN A 192.168.0.254
fw IN A 192.168.0.254
[root@station39 named]# chown :named a.com.zone
反向區域解析文件:
$TTL 86400
@ IN SOA a.com. root (
100 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns.a.com.
39 IN PTR ns.a.com.
39 IN PTR mail.a.com.
1 IN PTR www.a.com.
254 IN PTR www.a.com.
254 IN PTR ftp.a.com.
254 IN PTR fw.a.com.
從域名服務器:192.168.0.127
主配置文件:
options {
directory "/var/named"; //**數據文件存放位置
};
zone "." IN {
type hint ;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
zone "a.com" IN {
type slave;
file "slaves/a.com.zone";
masters { 192.168.0.39 ; };
};
zone "0.168.192.in-addr.arpa" IN {
type slave ;
file "0.168.192.zone" ;
masters { 192.168.0.39; };
};
子域授權
在主域名服務器正向區域文件中添加一條記錄
cs.a.com. IN NS ns.cs.a.com.
ns.cs.a.com. IN A 192.168.0.161
在子域名服務器中設置主配置文件:
options {
directory "/var/named"; //**數據文件存放位置
};
zone "." IN {
type hint ;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
zone "cs.a.com" IN {
type master;
file "cs.a.com.zone";
};
/var/named添加正向區域文件cs.a.com.zone
$TTL 86400
$ORIGIN cs.a.com.
@ IN SOA cs.a.com. root (
100 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns
IN NS ns2
IN MX 5 mail
ns IN A 192.168.0.3
ns2 IN A 192.168.0.15
mail IN A 192.168.0.37
www IN A 192.168.0.74
www IN A 192.168.0.25
bbs IN CNAME www
ftp IN A 192.168.0.25
fw IN A 192.168.0.25
PS :父域可以解析子域,子域要想解析父域就要轉發。
修改子域主配置文件,添加:
zone "a.com" IN {
type forward
forwarders { 192.168.0. 39 ; };
};
查詢服務器版本號:
[root@station39 ~]# dig txt chaos version.bin @127.0.0.1
View:視圖,將用戶來源分成不同的類別,當屬於某一類用戶的時候解析成A結果,當屬於另一類用戶的時候解析成B結果。
PS:只要聲明一個view,那麼所有的zone都必須在view中建立。
在主配置文件中添加:
view "localhost" {
matche-clients { 127.0.0.0/8 ; };
zone "." IN {
type hint ;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
};
view "internal" {
match-clients { 192.168.0.0/24; };
zone "a.com" IN {
type msater;
file "a.com.int.zone";
};
zone "0.168.192.in-addr.arpa" IN {
type master ;
file "0.168.192.zone" ;
};
};
view "external" {
match-clients { 192.168.10.0/24; };
zone "a.com" IN {
type master;
file "a.com.ext.zone";
};
zone "10.168.192.in-addr.arpa" IN {
type master ;
file "10.168.192.zone" ;
};
};
再編輯對應的區域文件即可!
本文出自 “諸葛草廬” 博客,請務必保留此出處http://lyp0909.blog.51cto.com/508999/521616