實驗目的: 明瞭DNS運作原理 建置DNS伺服器
背景資料 在網路上要指定主機連線時,通常都是使用Domain Name,如www.google.com.tw,很少直接使用72.14.235.147這種IP位置,因為Domain Name有意義又好記,IP位置僅是一些數字,對我們而言並無法明瞭有何意義。 一般所謂完整網域名稱(FQDN:Fully Qualified Domain Name)的格式如下,而且FQDN不分大小寫: 「主機名稱」+「網域名稱」+「.」 如:www.google.com.tw www:該伺服器的主機名稱。 google.com.tw.:該伺服器所在的網域名稱。
DNS(Domain Name Server) 工作 DNS(Domain Name Server) 的工作就是IP和FQDN間的轉換,DNS伺服器除了回應客戶端所詢問網際網路上的Domain Name對應的IP Address 外,它同時也記錄了在自身網域名稱上的主機名稱, 以供在網際網路上的其它客戶端詢問。 由用戶端要求DNS 伺服器由FQDN查出IP位址,稱為名稱解析或是正向解析,反之由IP位址查詢FQDN稱為反向查詢,反向查詢一般用在網路管理上。
網域名稱申請流程 第1步驟:確認Domain Name尚未被申請,可從TWNIC的首頁查詢欲申請的網址是否還可申請,或到各受理註冊機構網頁亦可直接查詢。 第2步驟:選擇受理註冊機構,TWNIC(財團法人台灣網路資訊中心http://www.twnic.net)現已不再直接受理新申請網域名稱服務,欲申請者請 直接向受理註冊機構辦理可從TWNIC首頁直接連結到各家受理註冊機構,可選擇一家註冊即可。 第3步驟:資格審查,依照各受理註冊機構的頁面輸入各種資料申請。 第4步驟:繳交網域名稱註冊費及管理費。 第5步驟:完成網域名稱申請註冊程序,指定DNS(Host/IP)正式啟用網域名稱。
DNS階層式的(Hierarchical)分散式資料庫架構 DNS屬於階層式的(Hierarchical)分散式資料庫架構,設計成四層,分別是Root Domain(根網域)、Top Level Domain(頂層網域)、Second Level Domain(第二層網域)和Host(主機)。 每部DNS伺服器只負責某網域名稱範圍的名稱解析,但分散在全世界的DNS伺服器可以協力工作,成為一個邏輯上的大型資料庫,因為世界上的主機資料記錄實在太多,所以必須透過DNS伺服器間的相互查詢,以及共享快取的資料,才可以提供服務給來自各地的用戶。 每個主機都有一個DNS 伺服器來管理,並建立相關資料來管理網域名稱及其下游網路的資料,這些資料必須建立上下層的互動關係,如此才能知道下層的Domain是歸哪一個DNS伺服器來管理, 因而產生上層和下層DNS伺服器的結合。
DNS階層式的(Hierarchical)分散式資料庫架構
主機網域名稱的架構 為了確保主機網域名稱的架構與唯一性,網際網路名稱與號碼分配組織(The Internet Corporation for Assigned Names and Numbers;ICANN)是個非營利性的國際組織,負責IP位址的分配、通用頂層網域名稱(genericTop-Level Domain;gTLD)、國碼頂層網域名稱(country code Top-Level Domain;ccTLD)系統的管理,以及根伺服器(Root Server)系統的管理。
主機網域名稱的架構 根網域:DNS架構的最上層,當下層的任何一台DNS伺服器無法解析某個FQDN名稱時,便向Root DNS伺服器尋求協助。 頂層網域:除美國以外的大部分國家,使用ISO 3116所定的『國碼』(country code)來區分,例如.tw為台灣、.cn為大陸、.hk為香港等。另一種命名方式是以『組織性質』來區分,一般而言是採3個英文單字不過日本僅用2個英文單字,例如: .edu:教育及學術單位 .mil:軍事單位 .gov:政府機構 .com:商業機構 .org:法人機構 .net:網路機構 .idv:個人網站 [ICANN於2000年引進了7個新的通用頂級域名:.aero,.biz,.coop,.info,.museum,.name以及.pro。]
主機網域名稱的架構 第二層網域:這網域之下都開放給所有人申請,每個網域名稱在這一層必需是唯一的,不可以重覆。 主機:由各個網域的管理員自行管理。
遞迴查詢 DNS使用『遞迴查詢』 (Recursive Query),完整的查詢流程如圖所示。 其中DNS使用的埠號是53,主機和DNS間採用UDP,DNS和DNS間採用TCP。Cache是代表之前已查詢過而暫存於記憶體中的紀錄,Host是本機的檔案紀錄,微軟系統一般不用。
遞迴查詢
DNS 名詞解釋 網域(Domain):Root網域中的每個類型都稱為網域,而網域中也可以包含其他的子網域,比如說tslg.idv.tw是指idv.tw網域中的一個子網域。 授權:在每個網域中都負責名稱解析的DNS伺服器,若因為實際的需求,可以再將原本的網域細分成許多子網域,這個時候上層的網域就可以指派某一部的DNS去負責特定子網域的名稱解析工作,這個就稱為授權。 正解(Forwarding):將主機的FQDN解析為IP位址的過程。
DNS 名詞解釋 反解(Reversing) : 反解和正解相反,是由指定的IP位址解析出主機的FQDN。 Primary(Master)DNS:主要名稱伺服器由它所在的主機上的檔案中取得管理區段的資料。如果您的擁有自己的網域,則必須建立自己的DNS系統,來回答網路上對您網域中,所有與網際網路有關的電腦名稱與IP地址的轉換服務。 Secondary(Slave)DNS:次要名稱伺服器是由其他管理這個區段的名稱伺服器中取得區段的資料。以管理小型DNS系統建議不要設立。
DNS 名詞解釋 Cache-only伺服器:每個DNS都會將查詢過的Domain Name給cache起來,所以每個DNS都有快取名稱伺服器的功能,硬碟中沒有該Domain的database檔案。 Resolver:這是用在DNS系統中的用戶端,也就是向DNS伺服器提出名稱解析要求的電腦。
實驗方法(DNS伺服器安裝) Name Server Software: Windows (http://www.dns.net/dnsrd/servers/windows.html)可以讓我們安裝在任何微軟視窗作業系統下,筆者在此僅提供簡單的操作和設定程序,詳盡的說明請參閱網站說明。 下載Bind軟體,如BIND9.4.2.zip,將壓縮檔解壓縮後進入該目錄底下,執行BINDInstall.exe並填入密碼,如下圖所示,安裝完成後,在預設目錄底下(C:\WINDOWS\system32\dns)會產生兩個資料夾,名稱分別是bin和etc。 bin資料夾是存放所有與DNS相關的執行檔案,etc資料夾則是用來存放所有的設定檔。
DNS伺服器安裝
組態檔 假設我們申請名為”google.com.tw”的網域名稱(這當然不可能正式申請,僅是實驗目的)而預定設定的伺服器資訊如下: DNS伺服器之FQDN為 dns.google.com.tw IP為 192.192.73.46 設定組態檔etc\named.conf,在 C:\WINWONS\system32\dns\etc目錄下產生named.conf和名為named的資料夾,named資料夾將存放所有zone files。
named.conf範例 options { directory "C:\WINDOWS\system32\dns\etc\named"; }; zone "." IN { type hint; file "named.ca"; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; zone "0.0.127.in-addr.arpa" IN { file "named.local"; zone "google.com.tw" { file "google.com.tw.hosts"; zone "73.192.192.in-addr.arpa" { file "google.com.tw.rev";
name.conf 組態檔中主要設定參數 options(選項):在BIND8版之後的設定中,options後都會接上一個大括號 {} 裡面放的就是一些選項,大部份的選項都是被註解起來不用的,主要的選項為: directory "C:\WINDOWS\system32\dns\etc\named"; 設定主要運作目錄
name.conf 組態檔中主要設定參數 zone(區域) :當要建立一個正解或反解的網域記錄的時候,必需要在這個區塊中進行指定的動作,在這個部份中有幾個預設的區域記錄,介紹如下: root區域:當DNS沒有被指定的網域或主機資訊時,會用到root區域,當所收到的資訊在DNS中無法查詢到的時候,就會將所要查詢的記錄往上送,送到root 名稱伺服器,而這些root伺服器的清單就放置在named.ca(相對路徑),其type設定為hint中,設定的值如下所示(此檔案內容可由ftp://rs.internic.net/domain/named.root來下載最新檔案)。
name.conf 組態檔中主要設定參數 localhost區域:這個區域是設定主機位址的資訊,這個資訊非常的重要,若是沒有的話,那麼所有本機的查詢主機名稱的要求都會等到逾時為止,這樣就會將整個系統的速度拖慢下來,localhost.zone設定值如下所示。 $TTL 86400 $ORIGIN localhost. @ IN SOA @ root ( 2008013001 ; serial (d. adams) 3600 ; refresh 900 ; retry 3600000 ; expiry 3600 ) ; minimum IN NS @ IN A 127.0.0.1
name.conf 組態檔中主要設定參數 $TTL 生存時間:DNS的區域快取時間能夠存在多久,單位為秒。 $ORIGIN 設定:說明下面的記錄源出何網域,如果沒有$ORIGIN 宣告,那就以 /etc/named.conf 中定義的zone名稱為準。 @:代表了整個網域的名稱,在此指localhost。 SOA:SOA 記錄,也就是授權啟始記錄。 root:管理者信箱,使用者名稱後將@變成"."並在最後加上 " . ",例如:admin.abc.com.tw.擇表示admin@abc.com.tw。 20080130:Serial 序列號,可以指定此區域檔案的版本,通常使用日期來設定, 再加上2碼序號, 例如:2004021101 3600:Refresh 多久檢查一次主要伺服器上有更新的檔案,預設為3600 秒。 900:Retry 重試時間,當無法連上主要伺服器時,隔多少時間重試一次,直到有回應為止。 3600000:Expire過期時間,若某個次要伺服器的資訊超過這個時間沒更新的話,就會停止使用。 3600:Minimum 最小生存時間。 IN NS @:表示一筆NS紀錄,指出本地網域的名稱伺服器為localhost.(@)。 IN A 127.0.0.1:表示一筆A(主機)紀錄,指出本地網域的名稱伺服器所對應的IP為127.0.0.1。
name.conf 組態檔中主要設定參數 0.0.127.in-addr.arpa區域:指"0.0.127.in-addr.arpa"區域的反解紀錄檔,此named.local檔案的預設內容如下: $TTL 86400 @ IN SOA localhost. root.localhost. ( 2008013001 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost.
name.conf 組態檔中主要設定參數 google.com.tw區域:正解區域,基本設定部分與localhost.zone檔案類似,後面增加多個資源紀錄(resource records),將區域內主機所對應的資源紀錄加入google.com.tw.hosts檔案中。 $TTL 86400 @ IN SOA google.com.tw. postmaster.google.com.tw. ( 2008013001 ; serial 3600 ; refresh 900 ; retry 3600000 ; expiry 3600 ) ; minimum @ IN NS dns.google.com.tw. google.com.tw. IN A 192.192.73.46 www IN A 192.192.73.3 mail IN A 192.192.73.1 mail IN MX 5 mail.ee.oit.edu.tw.
name.conf 組態檔中主要設定參數 資源紀錄: NS記錄:列出這個網域中的主要伺服器名稱。 A記錄:列出這個網域中,各個主機對映到的IP位置,也就是記錄主機名稱對應到IP的記錄。 CNAME記錄:為主機的正式名稱定義別名。 MX記錄:指定mail主機的名稱。 PTR記錄:記錄IP名稱對應到的主機名稱,也就是反解。
name.conf 組態檔中主要設定參數 73.192.192.in-addr.arpa區域:反解中利用PTR來設定IP所對應的主機FQDN即可其實反解的部份,除非管理者是管理一整個C類分割的子網路,或是內部的虛擬網路,否則一般來說都是ISP來代為管理,只要向ISP申請管理即可。google.com.tw.rev檔案內容如下: $TTL 86400 @ IN SOA google.com.tw. postmaster.google.com.tw. ( 2008013001 ; serial 3600 ; refresh 900 ; retry 3600000 ; expiry 3600 ) ; minimum @ IN NS dns.google.com.tw. 46 IN PTR www.google.com.tw. 1 IN PTR mail.google.com.tw.
啟動Bind 設定好所有檔案後,在命令提示下至 C:\WINWONS\system32\dns\bin 目錄底下執行"named -f"執行檔來啟動Bind
DNS用戶端的設定 如果只要檢查DNS伺服器是否設定正確使用nslookup指令即可,如果主機要設定成DNS用戶端,可到【控制台】【網路和網際網路連線】【網路連線】【連線內容】【Internet Protocol(TCP/IP)】,設定【使用下列的DNS伺服器位址】
檢查客戶端的IP組態 用nslookup來檢查客戶端的IP組態,nslookup常用的的控制項有 Server:變更DNS伺服器 Set type 資源紀錄:如Set type=soa, set type=mx 範例是將DNS伺服器變更至192.192.73.46,接下來分為用SOA、MX、PTR資源紀錄來檢視之前的設定。
檢查客戶端的IP組態
學習評量 請問系統中如設定超過一個DNS的目的為何? 如何讓內部DNS可以跟外部的DNS資料同步? 說明浮動IP架站如何解決DNS問題? 何謂Dynamic DNS? 何處有免費的DNS服務? 說明何謂DNS欺騙? 比較DNS在微軟系統和Unix系統在效能和安全上的差異。 說明BIND組態檔還有哪些選項。 說明BIND還有哪些運用方式? 使用Nslookup指令有哪些常用設定?