操做環境 Redhat 5.8虛擬機
一.DNS的由來
1. 人腦老是不如計算機的,人們對文字的記憶力要比對數字的記憶力高不少。所以一個名爲 DNS 的服務,幫咱們將主機名解析爲IP地址, 例如咱們輸入www.baidu.com就能夠訪問這個網站了,而不用費力取記住IP地址
2.
早期人們用/etc/hosts 這個文件來將主機名解析爲IP地址,可是當網絡上的主機愈來愈多,主機名與 IP 的對應沒法在全部的計算機內更 新, 另外要將主機名加入該文件內僅能向 INTERNIC 註冊,若 IP 數量太多時,該文件會很大,也就不利於其餘主機同步了。客戶端計算機每次都 得要從新下載一次文件才能順利聯網。
3.
爲了解決這個嚴重的問題,柏克萊大學發展出管理主機名對應 IP 的系統, 咱們稱它 爲BIND (Berkeley Internet Name Domain),這個系統能夠輕鬆的進行維護的工做~太棒了!這也是目前全世界使用最普遍 的領域名系統 DNS(Domain Name System) 經過DNS ,咱們不須要知道主機的 IP ,只要知道該主機的名稱,就可以輕易的連上 該主機了。
二. DNS的組織結構
1.如圖

2.常見的頂級域
.com:商業機構,任何人均可以註冊
.edu:教育機構
.gov:政府部門
.int:國際組織
.mil:軍事部門
.net:網絡組織
.org:非盈利組織,任何人均可以註冊
.info:網絡信息服務組織
.au: 澳大利亞
.ca : 加拿大
.cn: 中國
.tw: 中國臺灣
.hk: 中國香港
.in: 印度
.jp: 日本
三. DNS的查詢過程
例:
1.
client去找本地DNS,去問www.163.com的ip地址,若是本地DNS的緩存有www.163.com對應的ip地址,直接返回給client
2.若是沒有緩存:
@1. 本地DNS去找根域服務器,問www.163.com的ip地址,根域服務器不知道,可是知道com的ip地址,返回給本地DNS。
@2. 本地DNS去找com域服務器,問www.163.com的ip地址;
@3. com域服務器不知道,可是知道163.com的ip地址,返回給本地DNS
@4. 本地DNS去找163.com域服務器,問www.163.com的ip地址;
@5. 63.com域服務器知道www.163.com的ip地址;返回給本地DNS
@6.本地DNS把查詢到的結果返回給client,並緩存下來,供其餘的
3.查詢方式
client去本地DNS直接拿到想要的結果,這種查詢方式遞歸查詢。 本地DNS去找根域、com域、163.com域查詢的過程是迭代查詢。
四.DNS的正向解析
1.裝包
[root@tx1 ~]# yum install bind bind-chroot -y //dns須要的包bind bind-chroot
2.與dns相關的內容
[root@tx1 ~]# rpm -ql bind ; rpm -ql bind-chroot
/etc/logrotate.d/named DNS日誌輪滾配置文件
/etc/rc.d/init.d/named DNS啓動腳本
/usr/sbin/dns-keygen
/usr/sbin/named-checkconf 檢查主配置文件語法正不正確
/usr/sbin/named-checkzone 檢查區域配置文件語法正不正確
/usr/share/doc/bind-9.3.6/sample
/var/named/chroot 安全措施,把DNS 服務器禁錮在這裏
3.具體配置
@1
[root@tx1 ~]# cd /var/named/chroot/
// /var/named/chroot/ 這是一個僞目錄,至關於一個虛擬的根,爲了提升安全性
[root@tx1 chroot]# ls
dev etc var
[root@tx1 chroot]# cd etc
[root@tx1 etc]# ls
localtime rndc.key
這裏沒有name.conf 這個文件,咱們手動拷貝一份
[root@tx1 etc]# rpm -ql bind
[root@tx1 etc]# cp /usr/share/doc/bind-9.3.6/sample/etc/named.conf ./named.conf //不會寫能夠找模板
編輯named.conf這個文件,把文件裏面多餘的東西刪除了,而後咱們來編輯
[root@tx1 etc]# vim named.conf
zone "." IN{
type hint; //表示這個區域內的高速緩存的域名服器
file "named.root";
};
因爲本人在虛擬機裏作實驗,因此這幾行沒有加
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;}; //any表示監聽全部客戶端發來的信息
directory "/var/named"; // /--> /var/named/chroot 保存區域配置文件
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;}; //any表示容許全部客戶端進行dns查詢
};
IN 是internet記錄
type是類型 主的類型是master,從類型是slave
file是根區域文件
zone "tx.com" IN{
type master;
file "tx.com.zone";
};
@2. 寫區域配置文件
[root@tx1 ~]# cd /var/named/chroot/var/named/
[root@tx1 named]# rpm -ql bind
[root@tx1 named]# cp /usr/share/doc/bind-9.3.6/sample/var/named/localhost.zone ./tx.com.zone
//不會寫能夠找模板
[root@tx1 named]# cat -n tx.com.zone
//先看一下這個文件
1$TTL86400
2@IN SOA@ root (
342; serial (d. adams)
43H; refresh
515M; retry
61W; expiry
71D ); minimum
8
9 IN NS@
10 IN A127.0.0.1
11IN AAAA::1
12
第一行 :TTL是生存期,單位是秒 ,$TTL是全局定義的
第二行: @表示當前域,IN指internet ,SOA起始受權機構,@取代在/etc/named.conf中指定的域名。 SOA段中的數字,分別爲:序列號、刷新、重試、過時、生存期
第三行:序列號用於Slave與Master的更新用
第四行:除了序列號外還能夠用它規定多久slave進行一次主動更新
第五行:重試一旦Slave嘗試鏈接Master失敗,規定多久嘗試下一次鏈接
第六行:過時若是Slave沒法連通Master,規定多久後不在嘗試鏈接
第七行:生存期服務器回答 ‘無此域名’ 的間隔時間。
數字的默認單位爲秒。不然:W= 周、D= 日、H= 小時、M= 分鐘。
第九行:NS指定域名服務器,NS後面的主機名稱必須有IP對應
第十行:指定域名對應的IP
@3.下面咱們來寫本身的ZONE文件
$TTL 86400
@ IN SOA ns.tx.com. //com後的點千萬不要忘記.它表明一個完整的主機名 root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.tx.com.
ns IN A 192.168.8.70 //指定DNS服務器的ip
www IN A 192.168.8.64
tx IN A 192.168.8.65
[root@tx1 etc]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
有的時候看到OK,但不必定能成功,因此還要看一下日誌文件
[root@tx1 named]# tail -n 20 /var/log/messages | grep named
Feb 6 01:33:01 tx1 named[12350]: starting BIND 9.3.6-P1-RedHat-9.3.6-20.P1.el5 -u named -t /var/named/chroot
//這裏可知chroot的目錄與named啓動的參數等數據
Feb 6 01:33:01 tx1 named[12350]: found 1 CPU, using 1 worker thread
Feb 6 01:33:01 tx1 named[12350]: loading configuration from '/etc/named.conf'
//這裏能夠知道配置文件是有哪裏加載的
Feb 6 01:33:01 tx1 named[12350]: using default UDP/IPv4 port range: [1024, 65535]
Feb 6 01:33:01 tx1 named[12350]: listening on IPv4 interface lo, 127.0.0.1#53
Feb 6 01:33:01 tx1 named[12350]: listening on IPv4 interface eth0, 192.168.8.70#53
Feb 6 01:33:01 tx1 named[12350]: command channel listening on 127.0.0.1#953
//能夠知道有哪幾個接口提供DNS的相關服務
Feb 6 01:33:01 tx1 named[12350]: zone tx.com/IN: loaded serial 42
Feb 6 01:33:01 tx1 named[12350]: running
//loaded serial的數據,這裏不能出錯
@4.客戶端測試
[root@tx2 ~]# cat /etc/resolv.conf
search uplooking.com
nameserver 192.168.8.70
[root@tx2 ~]# nslookup www.tx.com
Server:192.168.8.70
Address:192.168.8.70#53
Name:www.tx.com
Address: 192.168.8.64
五.DNS的反向解析
1.在上一個的基礎上修改一下
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
zone "tx.com" IN {
type master;
file "tx.com.zone";
};
zone "8.168.192.in-addr.arpa" IN { //DNS的反解ip要從後往前寫而後加上in-addr.arpa表示反解結束
type master;
file "192.168.20.zone";
};
[root@tx1 etc]# cd ../var/named/
[root@tx1 named]# ls
data slaves tx.com.zone
[root@tx1 named]# vim 192.168.8.zone
$TTL 86400
@ IN SOA ns.tx.com. root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.tx.com.
ns IN A 192.168.8.70
2.客戶端測試
[root@tx2 ~]# nslookup 192.168.8.65
Server:192.168.8.70
Address:192.168.8.70#53
六.DNS的主從同步
1.
條件:須要兩臺 server ,主(192.168.8.70)從(192.168.8.71)。另外要注意這兩臺機器的時間
優勢:
(1)從服務器能夠分擔主服務器的查詢請求
(2)有了從服務器以後,能夠快速的響應client的請求
(3)即便主服務器出現問題,從服務器依然能夠提供查詢服務
原理:
(1)當主服務器作好配置以後,會通知從服務器
(2)從服務器收到通知以後,查詢SOA記錄查 42 序列號
(3)從服務器去和主服務器比對序列號,若是從的序列號比主的小,那麼他就要去和主進行數據同步。所以,主服務器修改完配置文件以後,都要把序列號調大,建議使用日期格式
(4)從服務器向主服務器發起數據請求;主服務器收到請求以後,開始傳輸數據
2. 具體配置
@1. Server的配置,這裏面裝包就再也不提了
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
zone "tx.com" IN {
type master;
file "tx.com.zone";
allow-transfer {192.168.8.71;};//指定本身的從服務器的ip若是想實現多個從服務器,能夠在{}裏填寫,以;結束
};
[root@tx1 etc]# cd ../var/named/
[root@tx1 named]# vim tx.com.zone
$TTL 86400
@ IN SOA ns.tx.com. root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.tx.com.
ns IN A 192.168.8.70
www IN A 192.168.8.64
//與以前的沒有什麼變化
@2.Slave的配置
[root@tx2 chroot]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named/slaves";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
zone "tx.com" IN {
type slave; //指定類型爲從
file "tx.com.slave";
masters {192.168.8.70; }; //指定主服務器的ip
};
@3.啓動服務
主
[root@tx1 named]# service named restart
[root@tx1 ~]# tail -0f /var/log/messages
從
[root@tx2 etc]# service named restart
[root@tx2 named]# cd slaves/
[root@tx2 slaves]# ls
tx.com.slave(由DNS服務器同步過來的)
[root@tx1 ~]# tail -0f /var/log/messages
Apr 13 16:21:58 tx1 named[3195]: client 192.168.8.71#43262: transfer of 'tx.com/IN': AXFR started
Apr 13 16:21:58 tx1 named[3195]: client 192.168.8.71#43262: transfer of 'tx.com/IN': AXFR ended //日誌裏面能夠看到傳輸的信息
七.DNS的主從加密傳輸
dnssec-keygen
-a :後面接的 [type] 爲演算方式的意思,主要有 RSAMD5, RSA, DSA, DH
與 HMAC-MD5 等。建議你可使用常見的 HMAC-MD5 來演算密碼;
-b :你的密碼長度爲多少?一般給予 512 位的 HMAC-MD5;
-n :後面接的則是客戶端可以更新的類型,主要有底下兩種,建議給 HOST 便可:
ZONE:客戶端能夠更新任何標誌及整個 ZONE;
HOST:客戶端僅能夠針對他的主機名來更新
[root@tx1 named]# dnssec-keygen -a hmac-md5 -b 128 -n host txkey
Ktxkey.+157+28539
[root@tx1 named]# ls
chroot Ktxkey.+157+28539.key slaves
data Ktxkey.+157+28539.private
[root@tx1 named]# cat Ktxkey.+157+28539.key
txkey. IN KEY 512 3 157 kX7RaouImmrvdTFvoFYfxg== 要kX7RaouImmrvdTFvoFYfxg== //在上一DNS主從同步上作就能夠
主:
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
key txkey { //在上一個基礎上加上這幾行
algorithm hmac-md5; //algorithm運算法則
secret "kX7RaouImmrvdTFvoFYfxg== ";
};
zone "tx.com" IN {
type master;
file "tx.com.zone";
allow-transfer {key txkey;}; //這裏也改動一下
};
從:
[root@tx2 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named/slaves";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
key txkey {
algorithm hmac-md5;
secret "kX7RaouImmrvdTFvoFYfxg== ";
};
zone "tx.com" IN {
type slave;
file "tx.com.slave";
masters { 192.168.8.70 key txkey; };
};
從:
[root@tx2 slaves]# rm -f tx.com.slave
主
[root@tx1 named]# service named restart
[root@tx1 ~]# tail -0f /var/log/messages
從:
[root@tx2 etc]# service named restart
[root@tx2 etc]# cd ../var/named/slaves/
[root@tx2 slaves]# ls
tx.com.slave
[root@tx1 ~]# tail -0f /var/log/messages
Apr 13 17:08:12 tx1 named[29970]: client 192.168.8.71#36850: transfer of 'tx.com/IN': AXFR started: TSIG txkey
Apr 13 17:08:12 tx1 named[29970]: client 192.168.8.71#36850: transfer of 'tx.com/IN': AXFR ended