Linux 伺服器架設
Chapter 8
Domain Name System (DNS)
VBird 2005/10/21
內容
瞭解 DNS 架構
安裝 BIND
DNS 系統實戰:
Caching-only DNS
Master DNS
Client settings
瞭解 DNS 架構
網路傳輸大多利用 TCP/IP 協定(必須有 IP);
問題:
人腦對 IP 記憶不佳~
解決之道:
利用主機名稱對應 IP
檔案記錄:
早期的機制,查詢很快速,但無法應付隨時新增的主機
DNS 系統:
分層負責(每一層僅負責自己的部分,見下頁):
hostname
domain name
Fully Qualified Domain Name ( FQDN )
瞭解 DNS 架構(續)
瞭解 DNS 架構(續)
DNS 預設架構
root (.)
全球有超過 13 部以上的 root 主機;
主要管理六大領域(domain)名稱
.com
.edu
.gov
.mil
.org
.net
上述這六大領域名稱稱為 Top Level Domain(TLD)。
瞭解 DNS 架構(續)
瞭解 DNS 架構(續)
DNS 重要觀念:
只要是合法授權的 DNS 主機,則其設定均可讓 Internet 上的 任何主機查詢到!(由下頁的查詢圖示來觀看!)
何謂合法?
向 ISP 申請(購買)一主機名稱;
何謂『授權』?
向 ISP 申請(購買)一領域名稱;
有正解與反解之分,不一定成對;
一個正解或一個反解,稱為一個『zone』
必須要獲得上層的授權才是『合法』的主機
思考:
我是否一定要架設 DNS 主機?
DNS 的查詢流程:一層一層查詢,如下圖
瞭解 DNS 架構(續)
瞭解 DNS 架構(續)
DNS 的查詢流程(配合上圖):
1. Client 向任何一部合法的 DNS 主機查詢;
2. DNS 主機先看 client 的要求是否為自己的資料庫?若否,
則察看自己的 cache 是否有紀錄,若否才前往 root(.)
3. 前往 root ,root 會告知下一層的 domain 負責的主機 IP ;
4. 前往該層 domain 負責的主機處,再查詢下層負責的主機;
5. 持續向下追查,最後得到有資料庫記錄的主機,並取得
client 想要追查的名稱對應主機的 IP ;
6. DNS 主機會先將該查詢記錄記憶在自己的 cache 內 (這個
與 DNS 主機的 有關!),再回報給 client
7. Client 取得最終的名稱、IP對應資料。
瞭解 DNS 架構(續)
DNS 主機的類型:(利用 port 53)
Master
含有主要設定檔的主機,
可能可以提供其下 slave 主機的更新資料
Slave
本身並無原始設定檔,
藉由 master 主機發送的資料更新本身的設定值
Cache-only
沒有原始資料,僅進行快取而已
Forwarding
沒有原始資料,僅提供代查詢功能。
Master/Slave 之間:
先回應的先贏!
並非 master 死掉 slave 才開始服務!注意注意!
安裝 BIND
利用 rpm 安裝 bind 套件;
bind
bind-utils
主要設定檔為:
/etc/named.conf
主要的 zone 檔案在:
/var/lib/named 或
/var/named 當中;
主要由 /etc/named.conf 所決定。
file 與 DNS 系統使用的順序:
/etc/nsswitch.conf 檔案
安裝 BIND(續)
DNS 系統的 change root (chroot)
BIND 過去有很多漏洞歷史;
尤其 bind 的服務 port 53 是由 root 所啟動的。
啟用 change root :
將某個 process 的行動限制於某個目錄當中,該目錄視為 /
但須注意,原本這個 process 要用到的各個目錄必須準備一份到 該目錄下。
一般設定在 /var/named/chroot
假設 /var/named/chroot 為根目錄;
還需要底下的目錄來配合:
/var/named/chroot/etc
/var/named/chroot/var/named
DNS 實戰:
-- Caching-only DNS
僅代為查詢,且可以記錄在 cache 當中
DNS 實戰:
-- Caching-only DNS (續)
編輯 /etc/named.conf
// This settings is only for forwarding DNS Server options {
pid-file "/var/run/named/named.pid";
forward only; //只允許 forward!
forwarders {
168.95.1.1; //我這裡使用 hinet 的 DNS 139.175.10.20; //這個是 seednet 的 DNS };
};
重新啟動 named
/etc/init.d/named restart
DNS 實戰:
-- Caching-only DNS (續)
注意幾個設定項目:
chroot 與否:
是否啟動 chroot 與 /usr/sbin/named -t “directory” 有關,一般均 已將 chroot dir 設定移動至 /etc/sysconfig/named 內;
named.conf 設定檔在有無 chroot 時,放置目錄不同;
在 named.conf 設定檔內,每一行均已 “;” 結束
啟動後,務必檢查:
用 netstat -tlunp 檢查 tcp/udp 的 port 53;
一定要檢查 檔案內容;
forwarder DNS 的效能:
可能較佳:因為資料量較大;
可能較差:因為來查的人多~負荷量大!
DNS 實戰:
-- Caching-only DNS (續)
練習:
設定一個 caching only 的 DNS 主機:
必須要 chroot ;
設定了 forwarders ,內容為 168.95.1.1 時。
DNS 實戰:
-- Master DNS
關於設定檔:
主設定檔依舊為 named.conf
每個正解、反解均為一個 zone ,一個 zone 需要一個 file ;
假設我們共有五個 zone file,分別是:
/var/named/named.root (root,由 NIC 提供)
/var/named/named.localhost (localhost 的正解)
/var/named/named.127.0.0 (localhost 的反解)
/var/named/named.linux.site (linux.site 的正解)
/var/named/named.192.168.1 (linux.site 的反解)
DNS 實戰:
-- Master DNS(續)
關於設定檔:
options {
directory "/var/named";
allow-query { any; };
allow-transfer { none; }; // 如果需要 slave ,這裡要寫對!
};
zone "." {
type hint;
file "named.root";
};
zone "localhost" { type master;
file "named.localhost";
};
zone “0.0.127.in-addr.arpa” { type master;
file "named.127.0.0";
DNS 實戰:
-- Master DNS(續)
關於設定檔:(續)
// 定義出我自己的這一組正反解設定!
zone “linux.site” { type master;
file “named.linux.site";
};
zone "1.168.192.in-addr.arpa" { type master;
file "named.192.168.1";
};
DNS 實戰:
-- Master DNS(續)
關於 “hint” 這個 type 的 zone file
記錄的是最頂層 root (.) 主機的對應;
該檔案由 Network Information Centre (NIC) 維護:
網址:ftp://rs.internic.net/domain/named.root
關於 “master” 這個 type 會用到的參數:
SOA:該 zone file 的相關重要參數。後面接主機、email 及五個數字
(Serial, refresh, retry, expire, minimum.)
@ :代表這個 zone (在 named.conf 設定的名稱)
$TTL “秒” :多少秒的 cache ?
NS :DNS 主機的設定
A :對應的 IP
CNAME :暱稱、別名
. :有沒有 . 代表要不要接 zone name!!!
PTR:主機名稱的對應(用在反解)。
DNS 實戰:
-- Master DNS(續)
設定 named.localhost 正解檔
$TTL 600
@ IN SOA localhost. root.localhost. ( 2005071501
28800 14400 720000 86400 )
; 開始設定正解的資訊內容:
@ IN NS localhost.
localhost. IN A 127.0.0.1
DNS 實戰:
-- Master DNS(續)
設定 named.127.0.0 反解檔
$TTL 600
@ IN SOA localhost. root.localhost. ( 2005071501
28800 14400 720000 86400 )
; 開始設定正解的資訊內容:
@ IN NS localhost.
1 IN PTR localhost.
DNS 實戰:
-- Master DNS(續)
設定 named.linux.site 正解檔
$TTL 600
@ IN SOA teacher.linux.site. root.teacher.linux.site. ( 2005071501 ; Serial
28800 ; Refresh 14400 ; Retry 720000 ; Expire 86400 ) ; minimum
; 主機的設定參數部分
@ IN NS teacher.linux.site.
@ IN MX 10 teacher.linux.site.
teacher IN A 192.168.1.231
teacher IN TXT "The teachers DNS server"
vbird IN CNAME teacher
www IN CNAME teacher.linux.site.
class201 IN A 192.168.1.201
DNS 實戰:
-- Master DNS(續)
設定 named.192.168.1 反解檔
$TTL 600
@ IN SOA teacher.linux.site. root.teacher.linux.site. ( 2005071501 ; Serial
28800 ; Refresh 14400 ; Retry 720000 ; Expire 86400 ) ; minimum
; 主機的設定參數部分
@ IN NS teacher.linux.site.
231 IN PTR teacher.linux.site.
201 IN PTR class201.linux.site.
DNS 實戰:
-- Master DNS(續)
重新啟動 named 服務
/etc/init.d/named restart
查閱是否成功?
netstat -tlunp
/var/log/messages
/etc/resolv.conf 設定成為自己的 DNS 主機 IP;
利用 nslookup 查詢一下資訊是否正確?!
DNS 實戰:
-- Master DNS(續)
關於允許 slave 主機的更新要求:
named.conf 需要加入:
allow-transfer { 192.168.xx.xx; };
在 slave 主機的 zone file 不需要設定,其 named.conf 設定的 zone file 為:
zone “linux.site” in { type slave;
file “named.linux.site”
master { 192.168.1.231; };
};
// 會主動的建立起 named.linux.site
// 需要視 master DNS 的 serial 數字來更新!
Client query…
需要修改 /etc/reslov.conf
可以設定多達 3 部以上的 DNS 主機
需要確認 /etc/nsswitch.conf 的 hosts 設定項;
可利用指令:
host
nslookup
set type=any (mx…..)
dig @dnsserver computername type
type 有 ns, mx, any 等等
練習
Master DNS 設定:
將剛剛課堂上建立的所有 zone file 刪除
新增一個 domain name 為 lccnet.site
每位同學的主機名稱為 lcc201…lcc230
設定完畢與同學檢討
Slave DNS 設定:
將上一題的 zone file 刪除;
以老師指定的某位同學的 DNS 為 Master 建立 slave DNS 主 機!