?? dns-howto-4.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
<TITLE>DNS HOWTO 中譯版: 一個簡單的領域</TITLE>
<LINK HREF="DNS-HOWTO-5.html" REL=next>
<LINK HREF="DNS-HOWTO-3.html" REL=previous>
<LINK HREF="DNS-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="DNS-HOWTO-5.html">Next</A>
<A HREF="DNS-HOWTO-3.html">Previous</A>
<A HREF="DNS-HOWTO.html#toc4">Contents</A>
<HR>
<H2><A NAME="simple"></A> <A NAME="s4">4. 一個<EM>簡單</EM>的領域</A></H2>
<P><B>如何建立你自己的領域</B>
<P>
<H2><A NAME="ss4.1">4.1 先來一點純理論</A>
</H2>
<P>在我們<EM>真的</EM>開始進行這一節以前我將會提供你一些關於 DNS 如何運作的理論.
而你應該閱讀它因為這對你有益.如果你不‘想要’那麼至少你也得很快地略讀一下.
當你看到應該放進 <CODE>named.boot</CODE> 檔案里去的內容時再停止這種略讀方式.
<P>DNS 是一個階層式的系統.其頂端寫作 `<CODE>.</CODE>' 而其發音為 `root' .
在 . 之下有幾個頂層領域(TLDs),最知名的是 ORG, COM, EDU 以及 NET 這幾個,但是還有更多.
<P>在尋找一臺機器名稱時查詢會以遞回方法從頂端開始.
當你想要找出 <CODE>prep.ai.mit.edu</CODE> 的位址時你的名稱伺服器必須找到負責 <CODE>edu</CODE> 的一臺名稱伺服器.
這個問題它會去查問 <CODE>root.cache</CODE> 檔案,而 <CODE>.</CODE> 伺服器會給它一份 <CODE>edu</CODE> 伺服器列表.
<BLOCKQUOTE><CODE>
<PRE>
$ nslookup
Default Server: localhost
Address: 127.0.0.1
</PRE>
</CODE></BLOCKQUOTE>
<P>開始查問某臺根伺服器.
<BLOCKQUOTE><CODE>
<PRE>
> server c.root-servers.net.
Default Server: c.root-servers.net
Address: 192.33.4.12
</PRE>
</CODE></BLOCKQUOTE>
<P>設定查詢型態為 NS (名稱伺服器記錄 name server records).
<BLOCKQUOTE><CODE>
<PRE>
> set q=ns
</PRE>
</CODE></BLOCKQUOTE>
<P>查問關於 <CODE>edu.</CODE> 的資料.
<BLOCKQUOTE><CODE>
<PRE>
> edu.
</PRE>
</CODE></BLOCKQUOTE>
<P>結尾的 . 在這里非常重要,它告訴該伺服器我們所查問的 <CODE>edu</CODE> 是在 . 之下的那一個,
這稍能縮小搜尋的□圍.
<BLOCKQUOTE><CODE>
<PRE>
edu nameserver = A.ROOT-SERVERS.NET
edu nameserver = H.ROOT-SERVERS.NET
edu nameserver = B.ROOT-SERVERS.NET
edu nameserver = C.ROOT-SERVERS.NET
edu nameserver = D.ROOT-SERVERS.NET
edu nameserver = E.ROOT-SERVERS.NET
edu nameserver = I.ROOT-SERVERS.NET
edu nameserver = F.ROOT-SERVERS.NET
edu nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET internet address = 198.41.0.4
H.ROOT-SERVERS.NET internet address = 128.63.2.53
B.ROOT-SERVERS.NET internet address = 128.9.0.107
C.ROOT-SERVERS.NET internet address = 192.33.4.12
D.ROOT-SERVERS.NET internet address = 128.8.10.90
E.ROOT-SERVERS.NET internet address = 192.203.230.10
I.ROOT-SERVERS.NET internet address = 192.36.148.17
F.ROOT-SERVERS.NET internet address = 192.5.5.241
G.ROOT-SERVERS.NET internet address = 192.112.36.4
</PRE>
</CODE></BLOCKQUOTE>
<P>這告訴我們 <CODE>*.root-servers.net</CODE> 服務 <CODE>edu.</CODE> 領域,所以我們可以藉此繼續查問 <CODE>c</CODE> 伺服器.
現在我們想要知道是誰負責下一層 <CODE>mit.edu.</CODE> 的領域名稱:
<BLOCKQUOTE><CODE>
<PRE>
> mit.edu.
Server: c.root-servers.net
Address: 192.33.4.12
Non-authoritative answer:
mit.edu nameserver = STRAWB.mit.edu
mit.edu nameserver = W20NS.mit.edu
mit.edu nameserver = BITSY.mit.edu
Authoritative answers can be found from:
STRAWB.mit.edu internet address = 18.71.0.151
W20NS.mit.edu internet address = 18.70.0.160
BITSY.mit.edu internet address = 18.72.0.3
</PRE>
</CODE></BLOCKQUOTE>
<P><CODE>steawb</CODE>, <CODE>w20ns</CODE> 以及 <CODE>bitsy</CODE> 負責 <CODE>mit</CODE> 領域,選擇其中一個并且查詢 <CODE>ai.mit.edu</CODE>:
<BLOCKQUOTE><CODE>
<PRE>
> server W20NS.mit.edu.
</PRE>
</CODE></BLOCKQUOTE>
<P>主機名稱不分大小寫,但是我使用滑鼠來剪貼所以這些資料是螢幕的拷貝.
<BLOCKQUOTE><CODE>
<PRE>
Server: W20NS.mit.edu
Address: 18.70.0.160
> ai.mit.edu.
Server: W20NS.mit.edu
Address: 18.70.0.160
Non-authoritative answer:
ai.mit.edu nameserver = WHEATIES.AI.MIT.EDU
ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU
ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU
ai.mit.edu nameserver = TRIX.AI.MIT.EDU
ai.mit.edu nameserver = MUESLI.AI.MIT.EDU
Authoritative answers can be found from:
AI.MIT.EDU nameserver = WHEATIES.AI.MIT.EDU
AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU
AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU
AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU
AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU
WHEATIES.AI.MIT.EDU internet address = 128.52.32.13
WHEATIES.AI.MIT.EDU internet address = 128.52.35.13
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.37.5
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.32.4
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.32.6
TRIX.AI.MIT.EDU internet address = 128.52.38.6
MUESLI.AI.MIT.EDU internet address = 128.52.32.7
MUESLI.AI.MIT.EDU internet address = 128.52.39.7
</PRE>
</CODE></BLOCKQUOTE>
<P>所以 <CODE>weaties.ai.mit.edu</CODE> 是 <CODE>ai.mit.edu</CODE> 的一臺名稱伺服器:
<BLOCKQUOTE><CODE>
<PRE>
> server WHEATIES.AI.MIT.EDU.
Default Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13
</PRE>
</CODE></BLOCKQUOTE>
<P>現在我改變查詢的型態,我們已經找到該名稱伺服器所以現在我們將要詢問 <CODE>wheaties</CODE> 關於 <CODE>prep.ai.mit.edu</CODE> 它所知道的任何事情.
<BLOCKQUOTE><CODE>
<PRE>
> set q=any
> prep.ai.mit.edu.
Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13
prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix
prep.ai.mit.edu
inet address = 18.159.0.42, protocol = tcp
#21 #23 #25 #79
prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu nameserver = alpha-bits.ai.mit.edu
ai.mit.edu nameserver = wheaties.ai.mit.edu
ai.mit.edu nameserver = grape-nuts.ai.mit.edu
ai.mit.edu nameserver = mini-wheats.ai.mit.edu
ai.mit.edu nameserver = trix.ai.mit.edu
ai.mit.edu nameserver = muesli.ai.mit.edu
ai.mit.edu nameserver = count-chocula.ai.mit.edu
ai.mit.edu nameserver = life.ai.mit.edu
ai.mit.edu nameserver = mintaka.lcs.mit.edu
life.ai.mit.edu internet address = 128.52.32.80
alpha-bits.ai.mit.edu internet address = 128.52.32.5
wheaties.ai.mit.edu internet address = 128.52.35.13
wheaties.ai.mit.edu internet address = 128.52.32.13
grape-nuts.ai.mit.edu internet address = 128.52.36.4
grape-nuts.ai.mit.edu internet address = 128.52.32.4
mini-wheats.ai.mit.edu internet address = 128.52.32.11
mini-wheats.ai.mit.edu internet address = 128.52.54.11
mintaka.lcs.mit.edu internet address = 18.26.0.36
</PRE>
</CODE></BLOCKQUOTE>
<P>所以我們從 <CODE>.</CODE> 開始連續找出在領域名稱里的下一層名稱伺服器.
如果你使用你自己的 DNS 伺服器而不是所有這些個其它的伺服器,
你的 <CODE>named</CODE> 當然會暫存所有這些在為你尋找這個答案時所找到的資訊,
而且在一段時間內它不必再次查問.
<P>一個比較起來很少被論及,但是同樣重要的是 <CODE>in-addr.arpa</CODE> 領域.它也像‘正常的’領域一樣是巢狀的.
<CODE>in-addr.arpa</CODE> 讓我們可以在擁有主機位址的時候得知該主機的名稱.
在這里有件重要的事情要注意的是在 <CODE>in-addr.arpa</CODE> 這個領域中 ip 數字是以反向順序書寫的.
如果你有某臺機器的位址: 192.128.52.43 那麼 <CODE>named</CODE> 會以類似 <CODE>prep.ai.mit.edu</CODE> 這個□例的方式來處理:
找出 <CODE>arpa.</CODE> 的伺服器,找出 <CODE>in-addr.arpa.</CODE> 的伺服器,然後再找出 <CODE>192.in-addr.arpa.</CODE> 的伺服器,
找出 <CODE>128.192.in-addr.arpa.</CODE> 的伺服器,接著找出 <CODE>52.128.192.in-addr.arpa.</CODE> 的伺服器,
最後再找出所需之 <CODE>43.52.128.192.in-addr.arpa.</CODE> 的記錄.聰明乎? (說‘是的’).
頭兩年這反向的數字也引起過一些困擾.
<P>其實我是騙你的.DNS 并非完完全全地像我告訴你的這樣運作.但是這已經夠接近的了.
<P>
<H2><A NAME="ss4.2">4.2 我們自己的領域</A>
</H2>
<P>現在來定義我們自己的領域.我們將會創造出 <EM>linux.bogus</EM> 這個領域并且定義其中的機器.
我使用一個完全是虛擬出來的領域名稱以便確定我們不會擾亂到網路上的其它地方.
<P>我們早就已經以 <CODE>named.boot</CODE> 里的這一行開始了這個部份的設定:
<P>
<HR>
<PRE>
primary 0.0.127.in-addr.arpa pz/127.0.0
</PRE>
<HR>
<P>請注意在這個檔案里的領域名稱結尾并沒有加上 `<CODE>.</CODE>' 符號.
第一行把定義 <CODE>0.0.127.in-addr.arpa</CODE> 的檔案命名為 <CODE>pz/127.0.0</CODE>.
我們早已經建立了這個檔案,它是這樣的:
<P>
<HR>
<PRE>
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.
</PRE>
<HR>
<P>請注意在這個檔案里所有的完整領域名稱結尾的 `<CODE>.</CODE>' 符號,這與上面提到的 named.boot 檔案形成對比.
有些人喜歡以 <CODE>$ORIGIN</CODE> 指令啟始每個區域檔案,但這是不必要的.
一個區域檔案的基點(就是其所屬的 DNS 階層架構位置)是在 <CODE>named.boot</CODE> 檔案的‘領域’行里指定的,
在這個例子里是 <CODE>0.0.127.in-addr.arpa</CODE>.
<P>這個‘區域檔案’中包含三種‘資源記錄’(resource records, RRs):
一個是 SOA 資源記錄.一個是 NS 資源記錄以及一個 PTR 記錄.
SOA 是授權起始(Start Of Authority)的縮寫.`@' 是個意思為基點的特殊標記,
而因為這個檔案的‘領域’行說是 <CODE>0.0.127.in-addr.arpa</CODE> 所以第一行實際上是指
<BLOCKQUOTE><CODE>
<PRE>
0.0.127.IN-ADDR.ARPA. IN SOA ...
</PRE>
</CODE></BLOCKQUOTE>
<P>NS 是名稱伺服器資源記錄,它告訴 DNS 什麼機器是這個領域 <CODE>0.0.127.in-addr.arpa</CODE> 的名稱伺服器,也就是 <CODE>ns.linux.bogus</CODE>.
而最後的 PTR 記錄說 <CODE>1</CODE> (等於是 <CODE>1.0.0.127.IN-ADDR.ARPA</CODE>, 也就是 <CODE>127.0.0.1</CODE>)的名稱是 localhost.
<P>SOA 這個記錄是<EM>所有</EM>區域檔案的序文,而且在每一個區域檔案里都應該有這唯一的一個,最開頭的記錄.
它描述該區域,它從何而來(一臺稱為 <CODE>linux.bogus</CODE> 的機器),誰負責其內容(<CODE>hostmaster@linux.bogus</CODE>),
這個區域檔案是什麼版本(serial: 1),以及其它必須做的,有關暫存與次要名稱伺服器的事.
剩下的欄位如 refresh, retry, expire 以及 minimum 你可以使用這份文件里所用的數字而且應該不會出問題.
<P>現在重新起始你的 <CODE>named</CODE>(使用 <CODE>ndc restart</CODE> 指令)并使用 <CODE>nslookup</CODE> 來檢驗我們做了什麼:
<BLOCKQUOTE><CODE>
<PRE>
$ nslookup
Default Server: localhost
Address: 127.0.0.1
> 127.0.0.1
Server: localhost
Address: 127.0.0.1
Name: localhost
Address: 127.0.0.1
</PRE>
</CODE></BLOCKQUOTE>
<P>所以它管理從 <CODE>127.0.0.1</CODE> 得到 <CODE>localhost</CODE> 的過程,很好.
現在開始我們的主要任務,<CODE>linux.bogus</CODE> 這個領域,
在 <CODE>named.boot</CODE> 里 插入新的一行 <CODE>primary</CODE> 指令:
<P>
<HR>
<PRE>
primary linux.bogus pz/linux.bogus
</PRE>
<HR>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -