標題:
[資源分享]
[轉貼] DNS之架設及設定
[打印本頁]
作者:
祐祐
時間:
2010-8-11 11:30
標題:
[轉貼] DNS之架設及設定
< DNS 之架設及設定 >
I.前言
...小弟是個 Linux 新手...對於 Linux 的運作及使用...可說是一竅不通...
...但對電腦及網路有極高的興趣...所以一有機會就努力的學習...
...目前小弟所使用的系統是 Linux Red Hat 5.2 Cle-0.7...
...所使用的配備為 486 DX-100 32M ram...S3 Trio 64 v2 PCI vga...
...D-Link de-220 網路卡...並申請了一條 64K 專線...
...另外一台因為跟本次主題無關...所以省略...
...小弟目前主要還是用 Win 98(畢竟方便嘛)...
...此分文件歡迎轉載...修改...到處流傳...不需要經過小弟的同意...
...因為小弟是胡摸亂踹的...一定會有疏忽及錯誤的地方...
...如果有任何錯誤的地方...歡迎各位批評...指教...
...就這樣...廢話不多打...開始本次的主題...
II.網域名稱服務的概念
每一個與 TCP/IP 網路連接的介面,都有一個獨一無二的 32 位元 IP 位址.
主機名稱能指定給有 IP 位址的任何裝置,比起 IP ,主機名稱更容易記憶.
雖然網路軟體不需要名稱(因為用了還是要靠 DNS 轉成 IP 位址),但是對使用者來說,
網域名稱確實使網路更容易使用.(突然覺得可以出書的人很偉大)
一般的情形下, IP 及主機名稱可以互相使用.例如我們要 telnet 到中山大學美麗之
島,
我們可以這樣做:
%telnet 140.117.11.2
或是打入主機名稱:
%telnet bbs.nsysu.edu.tw
不論我們用的是 IP 或是主機名稱,網路連線永遠都是根據 IP 位址,系統在連接到該主
機前,
會把主機名稱經由 DNS 轉換成 IP 來連接.
III.網域的層次結構
DNS 是一個分散式層次系統,主要是把主機名稱轉換成 IP 位址.
在 DNS 裡,沒有存放網路上所有主機資料的中央資料庫.這些資料分散在全世界不知多
少的名稱伺服器上,
他們構成一個與 UNIX 檔案系統類似的層次結構.在結構的最頂端,有個 root domain,
有一組稱為 root server 的
名稱伺服器作服務.
當我們要找尋某台主機名稱所對應的 IP,一定會先從 root domain 開始找,看該網域
是被指定由哪台 DNS 所負責,
然後一層一層指派下去,直到找到該主機名稱所對應的 IP 為止.(當然前題是真的要有
這個網域名稱)
IV.架設前的準備
前面只是大略的講一下觀念,說真的,小弟對網路並不熟,連 RFC 文件都沒看過半篇!
只有網路上到處看來的資料,
和自己買的一些書,所以大家看完認為小弟講的有錯誤的,千萬別丟我雞蛋,小弟能力就
只有那麼多了,
還在努力的學習中.
好了,現在準備開始架設了,首先,我們要有一台電腦(廢話),然後,一台已經連上網路
的電腦,方便後面的測試,
再來,最好有一個已經申請好的網域名稱,如果沒有申請,也不影響我們的安裝及設定,
只是這樣就變成架設 DNS 沒有什麼意義,因為 DNS 就是要管理自己網域裡的機器,
自己並沒有正式的網域名稱,大可以把 DNS 指到別台去,並不需要自己架一個無聊的
DNS.
當然啦,如果是為了自己網域方便管理,也是無可厚非啦.
首先,請先安裝 bind 跟 cache-only-nameserver 的 package,其中 bind 的
package 是一定要安裝的,不然等一下就沒有
named 這個東西跑了,而 cache-only-nameserver 這 package 則是可有可無,裡面放的
是一些 conf 的範例,如果你想完全自
己打,那就可以不裝,不過小弟天生懶惰,都拿現成的東西下來改一改,會動就好...
安裝完上述的 package 後,請用 linuxconf 把 named 這個 daemon 給 enable 起來
,不然我們所作的設定就沒意義了.
V.開始架設
好啦,在囉唆了一堆之後,終於進入主題了,首先,用 root 身分登入主機(啥!?!?你要
用 su 的!?!?隨便啦!)...
然後在 /etc 下面找一個 named.conf 的檔(別跟我說你忘了裝
cache-only-nameserver 這個 package,沒裝就自己造一個吧),
也許有的人還會問: 不是有個 name.boot 的檔嗎???幹嘛用的???...別理它吧,看你是
要當裝飾品,還是要砍掉,
都隨你高興囉,那個檔對我們沒任何用處.(p.s:因為小弟的系統為 RedHat 5.2 Cle
0.7,預設使用的 named 為 bind 8
的系統,所以預設的設定檔為 named.conf,又因為 bind 4 的系統跟 bind 8 的系統設
定方式並不一樣,所以兩者不能共用.)
小弟當初就是笨笨的,當成 bind 4 的系統在設,結果動都不動,還在奇怪怎麼回事,結果
想起以前好像有人說過,
RedHat 用的是 bind 8 的系統,就改設 named.conf,結果...看不懂...~_~...
還好有交大的網域名稱系統的網站可以看,URL 為
http://dnsrd.nctu.edu.tw/
看不懂
小弟說的東西的可以去這看看.
首先,小弟先把我自己的 named.conf 列出來作為參考:
// generated by named-bootconf.pl(這意思是這檔由 named-bootconf.pl 轉換
named.boot 而來的,容後再敘)
// name 設定檔,註解用 // 表示
// p.s:在 }; 後,一定要多一個 enter,不然會語法錯誤(懂 c 語言的請不要笑我,我實
在不會)
file://下面這段是定義設定資料放在 /var/named 這個目錄裡(在此我用預設值,因為
小弟實在很懶)
options {
directory "/var/named";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
說真的,上面那一段小弟沒去管,意思好像是用防火牆的必須開放 port53 的權限,
小弟沒用防火牆,所以也沒理會.
下面這行還搞不清楚,這邊小弟是設成自己註冊要啟動 dns 服務的機器,不過 mark 起
來也沒差別.
server 203.73.236.193 { bogus yes;};
server 203.73.236.195 { bogus yes;};
下面這是定義 cache only server,並存成 name.ca(要存成什麼檔其實都是看你高興,
小弟還是用預設值)
zone "." {
type hint;
file "named.ca";
};
下面這是設定 local host 的資料,設定檔為 named.local
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
下面這段是設定自己網域的資料,設定檔為 monster.hosts(這裡是小弟自己網域的資料
,容後再敘)
zone "monster.H2.nu" {
type master;
file "monster.hosts";
};
下面這是設定自己網域的反查資料,設定檔為 name.hosts(這一段設定決定了你有沒有
FQDN)
zone "236.73.203.in-addr.arpa" {
type master;
file "named.hosts";
};
(p.s:小弟並沒有整組 class c 的 ip,但那設法是把整組 class c 的 ip 都設成是這
台 dns 所管轄,
小弟又查不到資料,請各位知道的大大們指點一二)
下面這段是把自己的 dns 設成 seed.net.tw 的 secondary dns,
並存檔為 seed.hosts
zone "seed.net.tw" {
type slave;
file "seed.hosts";
masters {
139.175.10.20;
};
};
(p.s:根據一些參考而來的文件所說,最好不要用太多 second dns,原因後面會轉貼段文
章給各位看)
下面這段是把自己的 dns 設成 hinet.net 的 secondary dns,
並存檔為 hinet.hosts
file://zone "hinet.net" {
// type slave;
// file "hinet.hosts";
// masters {
// 168.95.192.1;
// };
file://};
(p.s:Hinet 那一段我 mark 起來了,因為 Hinet 好像不讓別的網域的人作 zone
transfer,我都抓不到資料,至於如何阻擋
別的網域的人作 zone transfer ...容後再敘)
在此,容小弟說明一下 DNS 伺服器的種類,DNS 伺服器大概分三類(我也只知道三類):
1.Primary Server(或稱 Master Server):
每個正式網域(所謂正式就是有申請的,不是自己胡掰的),一定都會有一台 Primary
Server(有點廢話的感覺),
而且要讓其他地方的人,利用主機名稱連上你的電腦時,就一定要設定 Primary
Server.Primary server 負責主機名稱
的建立及維護.
小弟以自己的情況來作範例說明:
小弟跑去不知啥米碗糕地方申請了一個 monster.H2.nu 的免費網域(最近好像不能用了
,有哪位大大能提供免費網域
的,小弟感激不盡),所以請大家往上看"設定自己網域資料"的那一段,zone 後面有雙引
號標起來的就是我所申請的網域,
type 即是類型, master 就代表是 Primary Server,而所有有關於這台電腦所屬的網域
資料,都由 Primary Server 來回答,而
file 就是設定檔的檔名,在此我設為 monster.hosts(這個沒預設值,隨各位的喜好囉).
再請各位看一下範例,其實那些
都可以一行寫完(會 c 語言的別扁我),不過小弟看了一堆範例都是分好幾行,所以小弟
就照作,會動就好.
再來,Primary Server 還要再設個網域反查的資料,不然就沒有 FQDN,也就是沒辦法
由你的 IP 來反查主機名稱,
在之前像交大的 FTP 就會因為沒有 FQDN 而拒絕存取,造成一些麻煩.現在請大家往上
看到"設定自己網域的反查資
料"那一段,在講解之前,先說明一下小弟目前的環境,小弟是跟 Seednet 申請一條 64K
專線,而 Seednet 發給小弟
203.73.236.192~203.73.236.255 這一段的 IP,也就是 64 個,子網路遮罩為
255.255.255.192,現在回到主題,大家注意看一下
in-addr.arpa 前面,就是小弟所申請到的 IP,這邊要注意的是, IP 的排列要倒過來;即
236.73.203.in-addr.arpa,而我之前有
講過,小弟並沒有取得整個 class c 的 IP,但小弟實在不知道該如何在 DNS 中分割自
己的 IP 區段,所以就整個 class 都
設定進去,還請各位知道的教導小弟一下,在此 in-addr.arpa 是固定要打的,所要改變
的只是前面所申請到的 IP 而已,
注意排列要相反而已,而小弟的設定檔是預設的 named.hosts.
2.Secondary Server(或稱 slave Server)
Secondary Server 就字面上來說,就是第二台 server,主要是當你網域中的 Primary
Server 當機或掛掉時,負責主機名稱的
回答工作,在此先說一下題外話,小弟為了架個 DNS,買了兩三本書,甚至連原文的都買,
其中一本書寫說 Secondary
server 並不會在 Primary server 當機時,負責網域名稱的回答工作,但在小弟實際測
試下,只要 Secondary server 成功的作
完 zone transfer 的動作後,當 Primary Server 掛點時,依然可以回答主機名稱,也就
是 Secondary server 確實有作用,不過前
題是那台 Secondary server 也是你當初就有註冊的機器,不然就白搭.Secdonary
server 的設定非常簡單,也不用去設一堆
有的沒的設定檔,因為 Secdonary server 就是跟 Primary 作 zone transfer 的動作,
把網域資料傳回 secdonary server 中,然後
再從傳回的資料中,轉換 IP 跟主機名稱.
各位請往回看到"將自己的 DNS 設成 seed.net.tw 的 secondary dns"那一段,注意
一下 type 那一行為 slave,因為是
secondary server,不能設為 master,要注意一下,file 那一項則是做完 zone
transfer 後,所要存的檔名,那個檔不用自己建立,
做完 zone transfer 後,系統自己會建立,名稱則隨個人喜好而定,而 masters 那一行
則是指定 secondary server 要去哪台
primary server 作 zone transfer 的動作,是個人需要而定,在此小弟設的是 Seednet
的 secondary server.
在此小弟順便轉貼一篇 cschen 大大在交大所貼的文章p.s:這是 bind 4 的系統,
不過觀念是一樣的)
許多單位的 DNS server 上, 在 /etc/named.boot 中, 通常有類似
的 **錯誤** 設定.
---------------------------------------------
directoey /var/named
;
...
secondary EDU.tw 140.111.1.2 Zone-EDU.tw
...
secondary Com.tw 140.96.1.50 Zone-Com.tw
...
secondary Gov.tw 168.95.192.1 Zone-Gov.tw
...
---------------------------------------------
以上的設定, 除了該 domain zones 真正的 secondary DNS server(s) 外,
其餘的 DNS server host, 都 **不應該** 有這一些設定行, 應該拿掉.
因為,
a) 整個 DNS 系統, 是階層式, 分散系統運作.
b) 整個 DNS 系統, 對於 DNS query 的處理, 是 on-demand.
c) 這一些 secondary caching line, 可能會對這許多上層 DNS server
不定期地, 進行 zone transfer, 整批地搬動許多, 貴站通常不需要
的資訊 ( 只要有 update DNS zone data ).
最糟糕地副作用是, 這一些上層的 DNS server, 為了 應付這一些
"不當" 的 zone transfer, 必須一再地 fork 新的 named-xfer 來處理.
以致於, 上層 DNS server 所應該, 最常作的 domain zones DNS server
指引工作, 反而被擔擱了. 甚至嚴重到, 一天中的許多時段, 經常會形成
DNS query 地 timeout. ( 這實在, 夠離譜地 )
尤其, 隨著 國內, 網站越多, 這種問題, 更明顯.
特定 domain zones - "Com.tw", "Net.tw", "Org.tw" 的負責 DNS server,
aladdin.iii.org.tw 更是嚴重.
除了, 提醒許多單位的 DNS server 管理者, 修正觀念, 改掉這一些錯誤設定.
或許, 這一些上層的 DNS server, 限制 zone transfer, 應該是一個積極地作法.
這就是小弟之前說的,不要設太多 Secdonary server 的原因,各位參考一下.
3.Cache Only Server
Cache Only Server 是將所有主機名稱的查詢資料,都向其他的 DNS 查詢,並在查詢
完後,保留一份在自己的記憶體中,
待下次查詢到相同的資料,可以以直接從記憶體裡取出來回答,節省時間.大家請看"定義
cache only server"那段,在此小
弟是維持預設值,沒有去改變什麼.
這三種類型的 DNS 可以一起使用,或是單獨設定,小弟是全部混在一起使用,並沒有發
現任何問題.接下來請看主機
名稱的設定.
VI.設定自己網域的主機名稱及反查資料
在上面一節小弟解說了 named 的設定檔,在 named 這 daemon 啟動後所讀取的檔也
必須設定,不然 DNS 一樣沒任何作
用,小弟先把自己的設定資料貼出來作範例,再來詳細解說.
以下是小弟的 monster.hosts 的內容:
@ IN SOA ns1.monster.H2.nu. bryant.ma.kswan.org.tw. (
1999020601 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
14400 ) ; Minimum
@ IN NS ns1.monster.H2.nu.
@ IN NS ns2.monster.H2.nu.
monster.H2.nu. IN MX 50 ns2.monster.h2.nu.
ns1 IN A 203.73.236.193
dns IN CNAME ns1
big IN CNAME ns1
bryant IN A 203.73.236.194
ns2 IN A 203.73.236.195
www IN CNAME ns2
ftp IN CNAME ns2
airwolf IN CNAME ns2
mail IN CNAME ns2
jacky IN A 203.73.236.196
gateway IN A 203.73.236.254
再來是 named.hosts :
@ IN SOA ns1.monster.H2.nu. bryant.ma.kswan.org.tw. (
1999020601 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
14400 ) ; Minimum
@ IN NS ns1.monster.H2.nu.
@ IN NS ns2.monster.H2.nu.
193 IN PTR ns1.monster.H2.nu.
194 IN PTR bryant.monster.H2.nu.
195 IN PTR ns2.monster.H2.nu.
196 IN PTR jacky.monster.H2.nu.
254 IN PTR gateway.monster.H2.nu.
再接下來是 named.local
@ IN SOA ns1.monster.H2.nu. bryant.ma.kswan.org.tw. (
1999020601 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
14400 ) ; Minimum
IN NS ns1.monster.H2.nu.
IN NS ns2.monster.H2.nu.
1 IN PTR localhost.
在開始講解範例之前,小弟先講解一下 DNS 設定中所需要的資源記錄:
----------------------------------------------------------------------------
----------------------------------------------------------------
記錄類型 | 英文全名 | 功能 |
----------------------------------------------------------------------------
----------------------------------------------------------------
SOA | Start of Authority | Primary Server 一定要有的紀錄,標
記一個網域的開始 |
----------------------------------------------------------------------------
----------------------------------------------------------------
NS | Name Server | 名稱伺服器資源紀錄,指定網域的名稱伺服
器 |
----------------------------------------------------------------------------
----------------------------------------------------------------
A | Address | 指定網域名稱和 IP 的相對應關係,把主機名稱轉換為 IP
位址 |
----------------------------------------------------------------------------
----------------------------------------------------------------
PTR | Pointer | 反查網域用,把 IP 轉換成主機名稱 |
----------------------------------------------------------------------------
----------------------------------------------------------------
MX | Mail Exchange | 郵件交換,指定該網域的郵件該送到哪台機器
|
----------------------------------------------------------------------------
----------------------------------------------------------------
CNAME | Canonical Name | 設定主機別名 |
----------------------------------------------------------------------------
----------------------------------------------------------------
HINFO | Host Information | 說明主機的一些資訊 |
----------------------------------------------------------------------------
----------------------------------------------------------------
上列表格中的詳細資料都在 RFC 1033 裡,不過小弟沒有看過就是了,可能不太正確,
請各位多包涵.
DNS 設定中的格式都是固定的,設定格式就如 :
[名稱] [TTL 時間] IN [類型] [資料]
名稱 : 就是各位所想要設定的名稱,例如主機名稱,IP Address,網域名稱.
TTL 時間 : 就是 time to live , 定義這一筆資料會存在儲存區多久,空白表示預設值
,以秒為單位.
IN : 這個是固定要打的,表示這是網路上的一筆資料.
類型 : 就是剛剛上表所列的資料記錄類型.
資料 : 每個記錄類型的記錄資料,像 A 記錄就是設定 IP 位址.
現在請各位看到小弟的 monster.hosts 的範例那一段,一開頭的 @ 符號表示為預設
網域,即是 name.conf 中"設定自己
網域資料"那一段 zone 後以雙引號標示起來的網域; SOA 就是標示網域的開始,這是
Primary Server 固定要用的.
而 SOA 後面的主機名稱則是管理此網域的主機,也就是當初申請時所註冊要當 DNS 的
主機名稱,一般都是註冊兩台
機器,而小弟另一台機器是架成 Secondary Server ,用 zone transfer 來作網域資料
的傳遞.再來繼續往後看,有一行
bryant.ma.kswan.org.tw 的地方,那是主機維護者的 E-mail 位址,當 DNS 有問題時,
系統就會發 E-mail 通知.注意一下格式,
"@"的部分一定要用 "." 來表示.再來繼續往下看,在 dns 資料的設定中,前面有 ";"
表示為註解,不會被執行,
然後小弟說明一下那些參數的意義:
[有一點需要注意的,數字最前跟最後都有括號,這個不能少]
(1999020601 ; Serial [序號 : 可以隨自己喜好設,小弟以日期來作序號,系統也會根
據序號來決定是否需要更新資料]
3600 ; Refresh [Secondary Server 的更新秒數 : 那是給 Secondary Server
用的]
300 ; Retry [重試時間 : 當 Primary server 因故障或當機而使 Secondary
Server 無法更新資料時,所需要等待的時間]
3600000 ; Expire[過期時間 : 當 Secondary server 重新嘗試更新時,仍無法更新
,當過期時間一到,將強制停止更新]
14400 ) ; Minimum [TTL 時間,如果在上例中的 TTL 時間欄位保持空白的話,系統
將以這個欄位設為 TTL 時間]
接下來繼續看 monster.hosts 的範例,大家會看到兩筆 NS 的資料,因為小弟申請時是
註冊兩台機器,所以小弟設定兩台,
不過,其實只設定一台應該也是可行的,因為指派的工作是上層來指派的,在此多設一台
有點畫蛇添足.在此有一點也
需要注意一下,就是主機名稱打完後,最後一定要再打一個 "." 來作為結束,不然會發生
很好笑的事情.
接下來則是 MX 的資料,根據 RFC 文件的說明,一定要把 MX 資料設好,不然架 mail
server 會出問題,還有,不能以"別名"
來作 MX 記錄的郵件主機名稱,而小弟實際測試的結果也確實如此,而設定方法就如範例
,格式為 :
[你所申請的網域](別忘記最後的 "." IN MX [優先權](數字越小優先權越大) [指定
要當 mail server 的主機名稱]
有一點必須告訴大家的是, MX 記錄一定要在 CNAME 記錄之前,不然就會有錯誤訊息.
MX 記錄可以有很多筆,看各人需要而定,小弟只架一台 mail server,所以只設定一筆,
如果不需要架 mail server,這筆 MX
記錄可以省略不需要設定,現在繼續往下看 ns1 那一行,在最前面那一個欄位,可以只打
主機名稱就好,系統會自動將
網域名稱加在後面,請大家要注意的是 ns1 的後面不要加點,加了點系統就不會在後面
加上所申請的網域名稱.
而 A 記錄後面要加的是該台機器的 IP,IP 最後面不可以加點,這點稍微注意一下就好
了.
再來,看到 CNAME 記錄的那一行,就如範例,將主機其他的別名寫在前面,後面打上想
有別名的主機名稱,這樣就可
以了,這邊要注意的是,別名一定要打在前面,後面則是想要有別名的主機,也就是說,第
一個欄位的主機名稱不能重複,
重複的話,在 /var/log/messages 就會有錯誤訊息,這邊注意一下就沒問題了.
再來,我們看 "named.hosts" 這一個範例,這是用來設定網欲反查用的,有沒有 FQDN
就看這一段了中間有重複的,小弟
就不另外說明了,我們直接看到 PTR 資料那邊,第一個欄位所要打的是各位機器的 IP,
舉例來說,小弟弟一台打的是 193
,系統會自動加上 203.73.236 變成 203.73.236.193,還記得前面所說過的吧,忘記的話
可以往回看"設定自己網域的反查資
料"的那一段,應該就能了解了.而最後一個欄位則是你想要反查時被看到的主機名稱,這
裡小弟是把整段主機名稱打
出來,其實打 ns1 就行了,要注意的是,如果只打簡單的機器名稱,後面別加點,打完整機
器名稱就一定要加點,這樣也不
會有什麼問題了.
接下來繼續看 named.local 的範例,這是設定 localhost 的反查資料,也就是設定
127.0.0.1 的資料,可以不設,也沒什麼影
響,很多設定都重複了,所以小弟也不另作說明,看範例應該就看的懂了.
VII.使用及測試
好啦,我們終於設定完畢啦,麻煩事都解決啦,這時我們可以先鬆口氣,喝杯茶,繼續下
一個步驟.首先,我們先用 ps ax 來
查一下 named 這個 daemon 有沒有在背景執行了,一般來說都是沒有,如果沒有,請各位
打入下列的指令:
/etc/rc.d/init.d/named start(因小弟用的是 RedHat 所以拿 RedHat 的方法當範
例,至於其他的系統,就請各位腦筋急轉彎了)
如果 named 之前就已經啟動在背景執行了,當設定完畢時,請各位打
/etc/rc.d/init.d/named restart ,不如此做的話,所改變的
設定就不會馬上生效了,在啟動之後,看一下 /var/log 裡的 message 這個檔,看看有沒
有什麼錯誤訊息.正常的話,應該會
有下列訊息:
Mar 24 21:01:16 dns1 named[477]: starting. named 8.1.2 Thu Sep 24 02:47:08
EDT
1998 ^
Iroot@porky.redhat.com
:/usr/src/bs/BUILD/src/bin/named
Mar 24 21:01:16 dns1 named[477]: cache zone "" (IN) loaded (serial 0)
歡迎光臨 Queer01 (http://60.199.212.58/)
Powered by Discuz! 7.0.0