亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1109 | 回復(fù): 0
打印 上一主題 下一主題

DNS [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-09-04 14:43 |只看該作者 |倒序?yàn)g覽

前面所介紹的伺服器服務(wù)大多是用在內(nèi)部網(wǎng)路環(huán)境中的﹐不過﹐以現(xiàn)代的情況和未來的趨勢來看﹐每個(gè)網(wǎng)路或多或少都需要 Internet 連線以及向 Internet 提供服務(wù)。從這一章開始﹐我們將為大家陸續(xù)介紹一些在 Internet 環(huán)境中常用到的伺服器之架設(shè)技巧。就算您目前還沒真的需要架設(shè) Internet 相關(guān)的伺服器﹐但許多企業(yè)的 Intranet 環(huán)境中﹐也需要相類似的伺服器來為企業(yè)內(nèi)部網(wǎng)路提供服務(wù)。
[color="#000088"]前提條件
在眾多 Internet 伺服器當(dāng)中﹐有一種服務(wù)是所有服務(wù)的基礎(chǔ)﹐就是 DNS 服務(wù)。DNS 可以說是一個(gè)不容易弄清楚的概念﹐尤其是其運(yùn)作原理。如果您看過“
學(xué)習(xí)網(wǎng)路
”中的“
DNS 協(xié)定
”(我強(qiáng)烈建議您看看這篇文章﹗)﹐相信應(yīng)該有一定概念了﹐否則﹐您在如下的閱讀中可能難以理解﹐也浪費(fèi)您的時(shí)間。
無論如何﹐在您進(jìn)一步閱讀下面文章之前﹐請您先確定能正確回答如下的問題﹕

  • 什麼是 DNS 的授權(quán)模式﹖是怎樣進(jìn)行的﹖
  • 請解釋 zone 和 domain 的差別。
  • 什麼是 DNS 正解和反解﹖
  • 什麼是 DNS 的查詢模式﹖查詢過程是怎樣進(jìn)行的﹖
  • 請解釋 DNS cache 的作用和它對查詢流程的影響。

如果您未能從上面的聯(lián)結(jié)網(wǎng)頁找到答案﹐那我再推薦您多看一篇文章﹕
http://turtle.ee.ncku.edu.tw/~tung/dns/dnsintro.html
忠告﹕請不必急著知道怎樣設(shè)定 DNS﹐花點(diǎn)時(shí)間將 DNS 的原理弄明白非常重要﹐尤其是授權(quán)模式和查詢模式的正確理解。在日後的 DNS 架設(shè)和管理中﹐是否能正確理解這些 DNS 原理﹐往往是成敗的關(guān)鍵所在﹗
如果您在 NT 或 Win2K 下面設(shè)定過 DNS 伺服器﹐相信您會(huì)覺得在
Linux 下面難多了。除了概念上要比較清楚外﹐另外對檔案的關(guān)聯(lián)也要有清晰的追蹤能力﹐這對於進(jìn)行 debug 尤為重要。因?yàn)樵?Windows
系統(tǒng)上面﹐您的所有設(shè)定都透過圖形界面進(jìn)行﹐方便是方便﹐但也因?yàn)檫@個(gè)圖形界面﹐限制了您的設(shè)定靈活性﹐同時(shí)也阻隔了您對 DNS
系統(tǒng)的深入了解。當(dāng)您完成了這章的學(xué)習(xí)﹐而且成功在 Linux 架設(shè)出複雜的 DNS 環(huán)境之後﹐歡迎您再回到 Win2K
上嘗試做同樣的事情;蛟S﹐您就會(huì)認(rèn)同我這裡的觀點(diǎn)了...
好了﹐閒話休提﹑言歸正傳﹐聽百遍不如做一遍﹐那就讓我們開始動(dòng)手吧﹗ ^_^
[color="#000088"]探索 NAMED
在 Linux 上面﹐提供 DNS 服務(wù)的套件是叫 bind﹐ 但執(zhí)行服務(wù)程式名稱則是 named 。請您確定系統(tǒng)上裝有 bindbind-utils﹑以及 caching-nameserver 這幾個(gè)套件﹐同時(shí)用 ntsysv 確定 named 被選擇為開機(jī)服務(wù)。
首先﹐讓我們設(shè)定一個(gè)最重要的 dns 設(shè)定檔﹐它就是 /etc/named.conf 。我將我自己的設(shè)定檔案列出來﹐然後逐部份進(jìn)行解釋﹕
// generated by named-bootconf.pl
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;
};
先讓我們了解這個(gè)檔案上面用來做註解的符號是“ // ”﹐而不是一般 shell script 的“#”﹔另外﹐“ /* ”與“ */ ”之間則註解一整段文字。同時(shí)﹐每一個(gè)完整的設(shè)定都以“ ”結(jié)尾﹐請不要少了它﹗(初學(xué)者經(jīng)常會(huì)犯這個(gè)錯(cuò)誤)
上面的部份是在這個(gè)檔案開頭的 options 設(shè)定﹐首先用 directory 指定了 named 的資源記錄( RR - Resource Record )檔案目錄所在位置為﹕“/var/named”﹔也就是說﹐它會(huì)到這個(gè)目錄下面尋找 DNS 記錄檔案。所以﹐我們在這個(gè)檔案後面部份所指定的檔案﹐就無需使用絕對路徑了﹐但它們一定要放在這個(gè)目錄下面。
接下來﹐有一段文字﹐如果您仔細(xì)閱讀一下﹐它大致是說﹕如果您要設(shè)定的 DNS 伺服器和 client 之間是隔著火牆的話﹐要將“// query-source address * port 53;”前面的註解符號“ // ”拿掉(當(dāng)然﹐您也必須要設(shè)定好您的火牆啦)。不過﹐這只對早期的版本有影響﹐而在 bind 8.1 之後則無需擔(dān)心這個(gè)設(shè)定。
接下來再讓我們看下一段句子﹕
//
// a caching only nameserver config
//
zone "." IN {
    type hint;
    file "named.ca";
};
透過這幾行﹐我們?yōu)?named 定義了 DNS 系統(tǒng)中的根區(qū)域“ . ”(root zone) 的設(shè)定﹐同時(shí)它是一個(gè) internet  ( IN ) 的區(qū)域類別( class )。這裡還指定了root zone 的伺服器種類( type ) 為“hint”(也只有這個(gè) zone 會(huì)使用這樣的種類)。最後﹐用 file 指定這個(gè)區(qū)域記錄檔為﹕“named.ca”﹐也就是“/var/named/named.ca”檔案。雖然 named.ca 這個(gè)檔案中的‘ca’是 cache 的意思﹔但如果您了解 DNS 的運(yùn)作﹐就應(yīng)該知道這個(gè)暫存檔的作用﹐同時(shí)﹐為什麼我們會(huì)把 root zone 放在這裡。(嗯﹖想想看﹖尤其是查詢非本機(jī)區(qū)域的時(shí)候﹖)
在 root zone 後面﹐您應(yīng)該還會(huì)看到如下這兩段﹕
zone "localhost" IN {
    type master;
    file "localhost.zone";
    allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "named.local";
    allow-update { none; };
這裡是定義出關(guān)於本機(jī)名稱的 DNS 解釋﹕第一個(gè) zone 是 localhost
的正解 zone﹐其伺服器種類是 master﹐記錄檔名稱是 localhost.zone (在 /var/named 目錄下面)﹐但這個(gè)
zone 不允許客戶主機(jī)(或伺服器)自行更新 DNS 的記錄(當(dāng)然﹐client 主機(jī)必須能支援 DNS submit 功能才行)。
而第二個(gè) zone 則是本機(jī)區(qū)域的反解 zone ﹐不過﹐這部份的解釋我想留到後面的真實(shí)例子中再作說明﹐請您留意就是了。
上面的句子﹐當(dāng)您安裝好  caching-nameserver 套件之後就被建立起來的﹐相信您不用勞什麼心力。在檔案最後﹐您或許還看到下面這段設(shè)定﹕
key "key" {
    algorithm hmac-md5;
        secret "coqJswFdBMdNAItnLOpkmGgmJtccFsoNZZciWqxlGZBMUTOUxb0geYMFRyTT";
};
這是 bind 9.x 版本的新功能﹐用來進(jìn)行區(qū)域轉(zhuǎn)移或 DNS 更新所用的加密處理。這個(gè)我們暫時(shí)不必理會(huì)﹐除非您有興趣進(jìn)行這個(gè)研究。
現(xiàn)在﹐我們暫時(shí)不要修改 named.conf 設(shè)定檔﹐請退出它﹐然後轉(zhuǎn)到 /var/named 目錄﹐看看裡面有些什麼東東﹖最起碼﹐您會(huì)看到如下三個(gè)檔案﹕
named.ca
localhost.zone
named.local
不知道您是否有靈感了﹖沒錯(cuò)﹕剛纔在 named.conf 裡面﹐每一個(gè) zone 所指定的 file 都出現(xiàn)在這裡﹗先讓我們看看 root zone 的檔案內(nèi)容吧﹕
;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  "
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC registration services
;       under anonymous FTP as
;           file                /domain/named.root
;           on server           FTP.RS.INTERNIC.NET
;       -OR- under Gopher at    RS.INTERNIC.NET
;           under menu          InterNIC Registration Services (NSI)
;              submenu          InterNIC Registration Archives
;           file                named.root
;
;       last update:    Aug 22, 1997
;       related version of root zone:   1997082200
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
;
; formerly C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; formerly TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; formerly NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
;
; housed in LINX, operated by RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
;
; temporarily housed at ISI (IANA)
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; housed in Japan, operated by WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
; End of File
在 /var/named 中的 RR 記錄檔裡面的註解符號﹐和 /etc/named.conf 的註解符號不一樣哦﹕在 named.conf 中是用雙斜線“ // ”﹔而在這裡則使用 “ ”符號。無論如何﹐您都不能用 “ # ”來做註解符號就是了。(好混亂哦~~~ 這就是電腦﹗^_^ )
在上面這個(gè) named.ca 檔案裡面﹐您如果將所有的註解行拿掉﹐您會(huì)發(fā)現(xiàn)一共有 13 行是以‘ . ’開頭的﹐那就是所謂的 root zone 了﹗然後﹐第二欄都是‘ 3600000 ’﹐這是 TTL (Time To Live)  設(shè)定﹐也就是在 cache 中保留的時(shí)間﹐以秒為單位(所以這裡是 100 小時(shí))。其後的‘ NS ’是“Name Server”的意思﹐是 DNS 記錄名稱之一﹐也就是負(fù)責(zé)這個(gè)記錄的 name server 是哪一臺(tái)主機(jī)(這裡一共由 13 臺(tái)主機(jī)共同負(fù)責(zé) root zone 的 NS 服務(wù))。
雖然我們這裡用 NS 指定了 name server 的主機(jī)名稱﹐但對電腦系統(tǒng)來說﹐這些名稱必須能解釋為 IP 位址才有用(呵~~ 這個(gè)正是 DNS 系統(tǒng)的功能)﹐所以﹐這裡分別用 13 個(gè)‘ A ’記錄﹐也就是 Address 的意思﹐解釋 [A-M].ROOT-SERVER.NET. 這些主機(jī)各自的 IP 位址所在。
如果您了解 DNS 的查詢模式﹐您會(huì)知道 DNS 伺服器在查詢非自己管轄的 zone
的時(shí)候﹐首先會(huì)向 root 查詢下一級的 zone 在哪裡﹐然後逐級查詢下去。但問題是﹕當(dāng) named 剛啟動(dòng)的時(shí)候﹐在 cache
裡面一片空白﹐它怎麼知道 root zone 的 servers 在哪裡呢﹖這不是一個(gè)矛盾嗎﹖所以﹐就必須靠這個(gè)檔案告訴 named 關(guān)於
root zone 的 servers 有哪些﹖以及在哪裡﹖ --- 明白了嗎﹖
因?yàn)檫@個(gè)檔是以靜態(tài)的方式維護(hù)的﹐很難保證這個(gè)檔的內(nèi)容永遠(yuǎn)都正確﹐如果 root
zone 的記錄發(fā)生改變了怎麼辦(雖然這機(jī)會(huì)不大)﹖或許﹐您已經(jīng)在檔案的開頭註解那裡得知﹐您可以在任何時(shí)候透過 ftp 或 gopher
取得這個(gè)檔案的最新版本。如果您還沒讀過那些註解﹐那就請帶著字典讀一下吧。如果您真的有需要更新這個(gè) named.ca 檔﹐那可以按如下步驟進(jìn)行﹕
ftp  FTP.RS.INTERNIC.NET
anonymous
your_account@your.mail.server
cd domain
get named.root
bye
cp /var/named/named.ca /var/named/named.ca.bak
cat named.root > /var/named/named.ca

除了剛才的 named.ca 之外﹐第二個(gè) zone 的記錄檔是 localhost.zone ﹐從 named.conf 中您應(yīng)該知道它是 zone "localhost" 的記錄檔﹐它的內(nèi)容如下﹕
$TTL    86400
$ORIGIN localhost.
@        1D IN SOA       @ root (
                42              ; serial (d. adams)
                3H              ; refresh
                15M             ; retry
                1W              ; expiry
                1D )            ; minimum
        1D IN NS        @
        1D IN A         127.0.0.1
內(nèi)容很簡單﹐但您是否真的了解每一行的設(shè)定意思呢﹖如果不清楚或不確定﹐那就讓我們一起探討探討吧。
首先﹐第一行是一個(gè) TTL 設(shè)定﹐目前是定義出這個(gè)記錄檔裡面的各項(xiàng)記錄的預(yù)設(shè) TTL
值為 86400 秒(剛好是一天)。您的記錄檔或許沒有這行﹐事實(shí)上沒什麼關(guān)係﹐您可以自己補(bǔ)上﹐否則﹐在啟動(dòng) named
的時(shí)候會(huì)碰到一些警告﹐無傷大雅的﹔但如果您的確在意那些警告﹐那就加上這行。您要知道﹐在記錄檔中宣告的所有資源記錄(RR - Resource
Record)﹐都一定有一個(gè) TTL 設(shè)定﹐如果沒有﹐則使用這裡預(yù)設(shè)的值。
第二行是一個(gè) ORIGIN  設(shè)定﹐說明下面的記錄源出何處(這裡是源出 localhost. 的記錄)。請您加倍留意最後的一個(gè)小數(shù)點(diǎn)“ .”﹐少了它或多了它﹐記錄名稱完全不一樣﹗在 DNS 記錄中﹐我們稱這樣以小數(shù)點(diǎn)結(jié)尾的名稱為“  全域名稱 ”即 FQDN
( Fully Qualified Domain Name ) 。如果缺少了這個(gè)點(diǎn)會(huì)怎樣呢﹖就會(huì)將所屬的 ORIGIN ( @ )
附加在記錄名稱後面﹔而這 ORIGIN 就是上一個(gè) $ORIGIN 宣告之後的名稱﹐如果在前面找不到 $ORIGIN 宣告﹐那就以
/etc/named.conf 中定義的 zone
名稱為基準(zhǔn)。以目前的例子來說﹐如果沒有這個(gè)小數(shù)點(diǎn)的話﹐“l(fā)ocalhost”會(huì)變成“l(fā)ocalhost.localhost”﹔但如果有小數(shù)點(diǎn)的話
“l(fā)ocalhost.”就只能是“l(fā)ocalhost.”。所以﹐這個(gè)小點(diǎn)“.”非常重要﹐在以後設(shè)定中一定要非常留神﹗﹗(這也初學(xué)者最常犯的錯(cuò)誤之
一)
然後﹐第三行﹐是一個(gè) SOA 記錄的設(shè)定﹐在這裡我們看到一個(gè)特殊字符“ @
”﹐它就是 ORIGIN 的意思﹐也就是剛纔所定義的 $ORIGIN localhost. 內(nèi)容﹐您可以寫成 localhost. 也可以用
@ 來代替。假如這個(gè)檔前面沒有定義 $ORIGIN 的話﹐那這個(gè) @ 的值就以 named.conf 裡的 zone
為準(zhǔn)。既然這樣﹐當(dāng)然是使用“@”啦﹐尤其對於像我這樣的懶惰鬼來說﹐巴不得少打一串字﹐同時(shí)還能避免因打字不準(zhǔn)所造成的失誤﹐何樂不為﹖
在 @ 之後﹐是 TTL 的設(shè)定﹐這裡是 1D﹐也就是一天的意思﹐如果您喜歡﹐可以用 86400 (秒) 來設(shè)定﹐如果這裡的 TTL 沒有設(shè)定﹐則參考前面的 $TTL 值﹐如果前面沒有定義 $TTL﹐那就參考其後介紹的 minium ttl 設(shè)定。
Tips﹕事實(shí)上﹐您可以為每一個(gè) RR 記錄設(shè)定其自己的 TTL ﹐只要將數(shù)字寫在第二個(gè)欄位﹐也就是‘IN’前面就可以了。
在 TTL 之後是一個(gè) IN﹐定義出目前的記錄類型是屬於 internet class 的 (奇怪﹐目前的 DNS 還有其它 class 嗎﹖)。
在 IN 之後就是這行 RR 的記錄類別名稱﹐這裡是 SOA ﹐也就是“Start Of Authority”的意思﹐表示目前區(qū)域的授權(quán)記錄開始。每一個(gè)記錄檔只能有一個(gè) SOA ﹐不得重複﹐而且必須是所負(fù)責(zé)的 zone 中第一個(gè)“記錄”。
緊接 SOA 後面﹐指定了這個(gè)區(qū)域的授權(quán)主機(jī)和管理者的信箱﹐這裡分別是“ @ ”和“  root
”﹐也就是 localhost. 主機(jī)和 root 信箱。這裡要注意的是﹕SOA 的主機(jī)名稱必須能夠在 DNS 系統(tǒng)中找到一個(gè) A 記錄
(以後會(huì)提到)﹔另外﹐我們平時(shí)使用的信箱通常是“user@host”這樣的格式﹐但因?yàn)椤癅”在 DNS
記錄中是個(gè)保留字符(剛才已經(jīng)提過)﹐所以在 SOA 中就用“.”來代替了“ @ ”。目前這個(gè)信箱是 root
(並沒有主機(jī)位址)﹐也就是本機(jī)﹐您可以寫成 “root.localhost.”但不能寫成“root@localhost.”。
接下來的 SOA 設(shè)定﹐是被括在“( )”之間的 5 組數(shù)字﹐主要作為和 slave 伺服器同步 DNS 資料所使用的數(shù)據(jù)﹕

  • Serial﹕其格式通常會(huì)是“年月日+修改次序”
    (但也不一定如此﹐您自己能夠記得就行)。當(dāng) slave
    要進(jìn)行資料同步的時(shí)候﹐會(huì)比較這個(gè)號碼。如果發(fā)現(xiàn)在這裡的號碼比它那邊的數(shù)值“大”﹐就進(jìn)行更新﹐否則忽略。不過設(shè) serial
    有一個(gè)地方您要留意﹕不能超過 10 位數(shù)字﹗
    Tips﹕關(guān)於 serial 的設(shè)定是有明確規(guī)範(fàn)的﹐不妨參考網(wǎng)友們的這篇討論﹕
    "2/7的情人"  撰寫於郵件 news:415Y6W$IXk@140.134.108.77...
    > ※ 引述《hardstone.bbs@bbs.cis.nctu.edu.tw (頑石)》之銘言:
    [前略]
    > : 在 RFC 1982 中定義:serial 欄位為一 32 位元的無正負(fù)別整數(shù),
    > : 因此 serial 的範(fàn)圍應(yīng)該是 [0..4294967295].....
    >
    > 剛剛測了一下, 若 serial > 上述的值, 仍然可以接受, 但會(huì)先除以 4294967296
    > 取餘數(shù)作為 serial, 如 4294967296 = 0, 4294967297 = 1
    > 範(fàn)圍確實(shí)是 0-4294967295
  • Refresh﹕這裡是是告訴 slave 要隔多久要進(jìn)行資料同步(是否同步要看 Serial 的比較結(jié)果)。
  • Retry﹕如果 slave 在進(jìn)行更新失敗後﹐要隔多久再進(jìn)行重試。
  • Expire﹕這是記錄逾期時(shí)間﹕當(dāng) slave 一直未能成功與 master 取得聯(lián)絡(luò)﹐那到這裡就放棄 retry﹐同時(shí)這裡的資料也將標(biāo)識(shí)為過期( expired )。
  • Minimum﹕這是最小預(yù)設(shè) TTL 值﹐如果您在前面沒有用“$TTL”來定義﹐就會(huì)以此值為準(zhǔn)。

以上的數(shù)字都是以秒為單位﹐但您也可以用 H(小時(shí))﹑D(天)﹑W(星期)來做單位﹐如﹕3H 和 259200 是一樣的。但要值得一提的是﹕我在 RH6.2 版本中曾測試過使用 netconf 這工具來設(shè)定 DNS ﹐發(fā)現(xiàn)只能使用“秒”來設(shè)定。否則 netconf 會(huì)自動(dòng)的把英文字母刪除掉﹐那就不是我所預(yù)期的設(shè)定值了。無論您用什麼單位來設(shè)定﹐都要遵守下面的規(guī)則﹕
expire >= refresh + retry
expire >= 10 * retry
Tips﹕請注意﹕SOA 記錄中這對 “ ( ) ”符號之第一個(gè) “ (”括號一定要和 SOA 寫在同一行﹐而不能用 Enter 斷行到下一行去(有時(shí)候您在書本的範(fàn)例中看到這個(gè)符號排在下一行去了﹐那是因?yàn)榘婷娴年P(guān)係而已)﹐而且其左邊最好有一個(gè)空白鍵或 tab 建。而最後一個(gè) “ )”括號也不能寫在註解符號 “ ﹔”的右邊。
設(shè)定 DNS 的 RR
記錄檔﹐其格式要求非常嚴(yán)格﹐我們絲毫不能掉以輕心。比方說﹕如果句子不是以空白鍵﹑Tab 鍵﹑ 或註解符號 ( ; )開頭﹐也不在 SOA 的
“ ( ) ”之內(nèi)﹐ 則表示要定義一個(gè)“新記錄項(xiàng) (Entry) ”﹔如果句子是以空白鍵或 tab
鍵開始的話﹐其設(shè)定被視為上一個(gè)“記錄項(xiàng)”的內(nèi)容。所以﹐如果您要為“同一個(gè)記錄項(xiàng)”定義多個(gè)記錄設(shè)定﹐而不想重複打字﹐您倒可以偷懶﹕在接著它的後面幾
行用空白或 Tab 來縮排就可以了。所以﹐最後這兩行還是關(guān)於 localhost. 的設(shè)定﹐因?yàn)樯弦粋(gè)“資料項(xiàng)”為 “ @ ”﹐也就是
localhost. 。當(dāng)然﹐您如不喜歡﹐這兩行句子也可以這樣寫﹕
;; 修改前﹕
        1D IN NS        @
        1D IN A         127.0.0.1
;; 修改後﹕
@        1D IN NS        @
@        1D IN A         127.0.0.1
;; 或﹕
localhost.        1D IN NS        localhost.
localhost.        1D IN A         127.0.0.1
這兩行的意思是說﹕負(fù)責(zé) localhost. 這個(gè)記錄的 name server ( NS ) 是
localhost. 這臺(tái)機(jī)器﹔而 localhost. 的 IP Address ( A ) 是 127.0.0.1 。DNS 裡面的 A
記錄應(yīng)該是最常見的記錄類型之一﹐如果在 IPv6 版本中﹐位址記錄名稱則改為 AAAA 。
Tips﹕關(guān)於更多的記錄名稱﹐請參閱“
學(xué)習(xí)網(wǎng)路
”中的“
DNS 協(xié)定
”。
最後﹐讓我們檢查剩下的 named.local 檔案吧。如果您還沒忘記 /etc/named.conf 的內(nèi)容的話﹐應(yīng)知道這個(gè)檔案是 zone "0.0.127.in-addr.arpa" 的‘反解’記錄檔﹐它的內(nèi)容也很簡單﹕
$TTL    86400
@       IN      SOA     localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS      localhost.
1       IN      PTR     localhost.
前面的部份應(yīng)該不用多解釋了(如果您還不清楚﹐那就必須重讀前面的文章)。最後一行我們看到一個(gè)“ PTR
”記錄﹐它是“Pointer”的意思。 PTR 通常用於反記錄當(dāng)中﹐將 IP 指向主機(jī)名稱(剛好和 A
記錄相反)。您或許還不是很清楚這個(gè)句子為什麼是這樣設(shè)定的吧﹖或許您會(huì)這樣問﹕您不是說 PTR 是從 IP 反查詢主機(jī)名稱的嗎﹖為什麼這裡是 1
而不是 127.0.0.1 ?
哦﹐如果您有這樣的問題﹐那證明您對 DNS 的查詢模式還不是了解得很透徹﹐不過也不用緊張﹐在後面的實(shí)作例子中﹐您將獲得更進(jìn)一步的感性認(rèn)識(shí)。這裡﹐我暫時(shí)簡單解釋上面這行就是了﹕
我們知道 127.0.0.1 所對應(yīng)的主機(jī)名稱就是 localhost
﹐因?yàn)檫@裡是反向查詢﹐所以 IP 順序是掉過來寫的﹐於是這個(gè)反查詢 IP 就是﹕“ 1.0.0.127.in-addr.arpa.
”﹐由於我們這裡的 ORIGIN ( @ ) 是“ 0.0.127.in-addr.arpa."
”﹐因?yàn)樵谟涗洐n中﹐如果名稱不帶小數(shù)點(diǎn)﹐則被補(bǔ)上 $ORIGIN 或 zone 的名稱﹐所以這個(gè) “ 1 ”就成了
1.0.0.127.in-addr.arpa. ”。同樣道理﹐後面的“ localhost. ”如果漏了最後的小點(diǎn)的話﹐則會(huì)成為“
localhost.0.0.127.in-addr.arpa. ”﹐這顯然是不對的。假如您喜歡﹐可以將這行句子修改成為下面的樣子﹕
﹔﹔修改前﹕
1       IN      PTR     localhost.
﹔﹔修改後﹕
1.0.0.127.in-addr.arpa.       IN      PTR     localhost.
嗯~~ DNS
的設(shè)定看起來真的蠻傷腦筋的﹐或許您到這裡已經(jīng)被搞得亂七八糟了。假如真的如此﹐我建議您先休息一下﹐然後回來重讀上面的內(nèi)容﹐直到您能理解之後﹐才繼續(xù)
下面的。否則﹐越往後﹐您的問題越像滾雪球那樣越來越大﹐這更浪費(fèi)時(shí)間啦~~~ Okay? Take it easy ... ^_^
前面所看到的設(shè)定﹐事實(shí)上已經(jīng)足夠讓您的 DNS 主機(jī)跑起來了﹗因?yàn)樗軌蛲高^ root 查詢其他 DNS 的緣故﹐您無須在再加設(shè)任何設(shè)定﹐您就可以利用這臺(tái)主機(jī)為大家提供 Internet 的 DNS 查詢服務(wù)。只是﹐這樣的 DNS 主機(jī)﹐我們稱之為 cache only name server 而已。如果您了解 DNS 的查詢流程﹐您應(yīng)該知道 DNS 的 cache 作用和它的效益。所以﹐就算您不打算設(shè)定自己的 domain name 服務(wù) ﹐我也建議您至少可以將 cache only NS 跑起來。
[color="#000088"]設(shè)定 NAMED
當(dāng)您對 /etc/named.conf 檔案和 /var/named 目錄的設(shè)定有初步了解之後﹐下面﹐讓我們用一個(gè)實(shí)際例子來看看如何設(shè)定自己的 domain name 服務(wù)吧。我個(gè)人的習(xí)慣是先將網(wǎng)域和主機(jī)的資料整理出來﹐並列成一個(gè)表格﹕
  
    Domain
      名稱
    [color="#ffffff"]IP 位址
   
  
    rh71.siyongc.domain
    192.168.100.23
  
  
    acer.siyongc.domain
    192.168.100.20
  
  
    mdk.siyongc.domain
    192.168.100.24
  
  
    emilie.siyongc.domain
    192.168.100.11
  
  
    rh71.dmz.domain
    10.0.1.131
  
  
    lp64.dmz.domain
    10.0.1.130
  
當(dāng)所有的主機(jī)名稱和 IP 整理出來之後﹐再看看我們這裡需要設(shè)定哪些 domain ﹖ 從上面的資料中﹐我們不難發(fā)現(xiàn)有兩個(gè)正解 zone 和兩個(gè)反解 zone  需要設(shè)定﹐分別是﹕
         
    [color="#ffffff"]區(qū)域名稱
    [color="#ffffff"]記錄項(xiàng)名稱
   
  
    siyongc.domain
    emilie﹑acer﹑rh71﹑mdk
  
  
    dmz.domain
    lp64﹑rh71
  
  
    100.168.192.in-addr.arpa
    11﹑20﹑23﹑24
  
  
    1.0.10.in-addr.arpa
    130﹑131
  
因?yàn)檫@些 IP 和 domain
都在內(nèi)部網(wǎng)路使用﹐所以我們省卻了註冊這關(guān)﹐同時(shí)也不必?fù)?dān)心授權(quán)的問題。但這些資訊也只能在內(nèi)部網(wǎng)路使用﹐無論如何是不能設(shè)定在對外的 DNS 上面的
(為什麼﹖除了安全的考量之外﹐private IP 的使用本來就有這樣的規(guī)定﹐就算您真的對外散佈這些 DNS 資訊﹐在 IP
的路由上還是有問題﹐所以﹐內(nèi)部的資訊﹐只能內(nèi)部使用)。
一般來說﹐我會(huì)先設(shè)定“反查詢區(qū)域(revers zone)”﹐當(dāng)然﹐這是個(gè)人習(xí)慣而已。所以﹐我首先在 /etc/named.conf 上面補(bǔ)上兩個(gè)反解 zone 的設(shè)定﹕
zone "100.168.192.in-addr.arpa" IN {        // 定義反解區(qū)域名稱
        type master;                // 定義伺服器類型
        file "192.168.100.rev";        // 指定記錄檔名稱
};                                // 結(jié)束區(qū)域設(shè)定
zone "1.0.10.in-addr.arpa" IN {
        type master;       
        file "10.0.1.rev";
};
注意哦﹕如果您要設(shè)定外部 DNS 的反解﹐那就先獲得 ISP 的授權(quán)才能自己設(shè)定﹔否則反解部份就不用自己擔(dān)心了﹐但一定要請 ISP 幫忙。
Tips﹕假如您是 hinet 的固定制 ADSL 用戶﹐可以到 hinet 的網(wǎng)站填寫表格﹐請他們幫忙設(shè)定反解﹕
http://hidomain.hinet.net/rever.html
其它 ISP 的用戶﹐請自行接洽 ISP 的客服部門。無論如何﹐如果沒有取得授權(quán)﹐那就不要自己設(shè)﹗
這裡﹐我們再一次碰到反解區(qū)域的識(shí)別標(biāo)誌﹕“ .in-addr.arpa
”﹐同時(shí)﹐我們解釋一下上次關(guān)於本機(jī)反解還沒說明的地方﹕如果您了解 DNS
的授權(quán)和查詢過程(這章一開始的時(shí)候﹐我就已要求您一定要學(xué)習(xí)的)﹐您會(huì)知道反解查詢是先從 root 開始(正解也是一樣)﹐然後到 arpa ﹑到
in-addr ﹑到第一組 IP ﹑到第二組 IP ﹑...... 這樣查詢下來的。所以﹐在設(shè)定反區(qū)域的時(shí)候﹐您一定要將您的 net ID
部份反過來寫﹐例如﹕我的網(wǎng)路為
192.168.100.0/24﹐它的反查詢區(qū)域名則是﹕“100.168.192.in-addr.arpa”﹔假如我將 netmask 改為
16 bit ﹐即變成
192.168.0.0/16﹐它的反解區(qū)域名就會(huì)變成﹕“168.192.in-addr.arpa”。如果您還搞不懂如何區(qū)分 Net ID 和
Host ID﹐請立即去看一看“
學(xué)習(xí)網(wǎng)路
”中的“
IP 基礎(chǔ)
”。
同時(shí)﹐我將這些 zone 都設(shè)定為“主 DNS 伺服器”(即﹕master﹐也有人稱之為 primary dns )。
在每個(gè) zone 的最後部份﹐我分別指定了它們各自的記錄檔名稱。它們都存放在 /var/named 這個(gè)目錄下面(也就是前面 options 指定的 directory 啦)。檔案的名稱隨您喜歡﹐不致做成混亂則可。
完成上面的設(shè)定之後﹐我們就可以到 /var/named
目錄去建立相應(yīng)的記錄檔案了。說實(shí)在﹐在 named.conf 裡面如何定義檔案名稱沒一定的標(biāo)準(zhǔn)﹐只要您能正確指定哪個(gè)記錄檔給哪個(gè) zone
使用﹐而且檔案名稱能夠一致就行。首先﹐根據(jù)第一個(gè) zone 的 file 設(shè)定﹐我要建立一個(gè)
/var/named/192.168.100.rev 檔案﹐其內(nèi)容如下﹕
$TTL    86400
@  IN  SOA rh71.siyongc.domain. root.rh71.siyongc.domain. (
                                      2001111601 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
@   IN  NS  rh71.siyongc.domain.
@   IN  NS  lp64.dmz.domain.
11  IN  PTR emilie.siyongc.domain.
20  IN  PTR acer.siyongc.domain.
23  IN  PTR rh71.siyongc.domain.
24  IN  PTR mdk.siyongc.domain.
而另外一個(gè)反解設(shè)定檔是 /var/named/10.0.1.rev ﹐我們依樣畫葫蘆就行了﹕
$TTL    86400
@  IN  SOA rh71.siyongc.domain. root.rh71.siyongc.domain. (
                                      2001111601 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
@    IN  NS  rh71.siyongc.domain.
@    IN  NS  lp64.dmz.domain.
130  IN  PTR lp64.dmz.domain.
131  IN  PTR rh71.dmz.domain.
就這樣﹐反解 DNS 就設(shè)定完成了﹗是否很簡單呢﹖如果您回答“ Yes ”的話﹐那就讓我們繼續(xù)正解區(qū)域的設(shè)定吧。同樣的﹐先在 /etc/named.conf 裡面加上兩個(gè) zone﹕
zone "siyongc.domain" IN {
        type master;
        file "siyongc.domain";
};
zone "dmz.domain" IN {
        type master;
        file "dmz.domain";
};
完成後﹐再建立 /var/named/siyongc.domain 這個(gè)檔案﹕
$TTL    86400
$ORIGIN siyongc.domain.
@ IN  SOA  rh71.siyongc.domain. root.rh71.siyongc.domain. (
        2001111601 28800 14400 3600000 86400 )
        IN  NS     rh71.siyongc.domain.
        IN  NS     lp64.dmz.domain.
        IN  MX  10 rh71.siyongc.domain.
        IN  MX  20 lp64.dmz.domain.
;; -- default address
@       IN  A      192.168.100.23
;; -- linux servers --
rh71    IN  A      192.168.100.23
        IN  MX  0  rh71.siyongc.domain.
        IN  MX  10 lp64.dmz.domain.
        IN  HINFO  "Petium II 266""Redhat 7.1"
        IN  TXT    "The internet gateway."
mdk     IN  A      192.168.100.24
        IN  MX  0  mdk.siyongc.domain.
        IN  MX  10 rh71.siyongc.domain.
        IN  HINFO  "Petium II 266 dell""Mandrak 8.0"
;; -- Windows desktops --
acer    IN  A      192.168.100.20
        IN  MX  0  mdk.siyongc.domain.
        IN  HINFO  "Petium III 800 acer""Windows ME"
emilie  IN  A      192.168.100.11
        IN  MX  0  mdk.siyongc.domain.
        IN  HINFO  "Petium II 300""Windows 98"
;; -- cnames --
gw      IN  CNAME  rh71
www     IN  CNAME  rh71
ftp     IN  CNAME  rh71
mail    IN  CNAME  rh71
這裡﹐我們在正解記錄檔裡面看到幾個(gè)新的記錄類別﹐或許需要進(jìn)一步講解一下的﹕
因?yàn)槲疫@個(gè)區(qū)域的記錄分別由兩臺(tái)主機(jī)負(fù)責(zé)﹐所以我這裡指定了兩個(gè) NS
記錄。這裡﹐如果您確定上一個(gè) ORIGIN 是正確的話﹐那也可以偷懶﹕正如我上面解釋過﹐如果名稱後面不是以“.”結(jié)尾的話﹐它所屬的
ORIGIN ( @ ) 就會(huì)自動(dòng)的加在該記錄名稱後面﹔所以﹐您可以只寫“ rh71
”而不帶小數(shù)點(diǎn)結(jié)尾﹐就會(huì)變成“rh71.siyongc.domain.”了﹐這個(gè)名稱實(shí)際就是我所要的。不過﹐我建議您在設(shè)定 NS
的時(shí)候還是儘量使用 FQDN 為好。
接下來的 ‘ MX ’ 記錄恐怕要花些時(shí)間解析﹕
[color="green"]MX 記錄
MX 是‘Mail eXchange’的意思﹐它指定了負(fù)責(zé)該記錄項(xiàng)(可以為 domain 也可以是 host )的郵件伺服器名稱(最好使用 FQDN )﹐而且該名稱必須是一個(gè) A 記錄(不建議使用 CNAME )。
在郵件系統(tǒng)中﹐只要郵件伺服器雙方都知道對方的 IP
就可以進(jìn)行郵件交換了。我們用 /etc/hosts 也可以做到名稱查詢的目的﹐但正如我們可以想像的﹕ineternet
有那麼多郵件伺服器﹐我們不可能一一為它們建立好 IP
對應(yīng)。就算﹐我們可以這樣做﹐如果對方要更換郵件伺服器呢﹖要維護(hù)這樣一個(gè)對應(yīng)殊非易事。既然﹐我們可以用 DNS 來查詢主機(jī)和
IP﹐為什麼不使用這麼便利的系統(tǒng)呢﹖這也是 DNS 系統(tǒng)的應(yīng)用原因啊~~~
但問題是﹐各區(qū)域的郵件伺服器名稱都不一樣﹐我們不可能知道對方的郵件伺服器主機(jī)名稱是什麼﹖就算知道﹐如果對方以後更換名稱呢﹖
您看﹐即使我們使用了 DNS 系統(tǒng)來進(jìn)行郵件路由﹐也不是這麼簡單的事情。但是﹐使用
MX 記錄就大大發(fā)揮了 DNS 系統(tǒng)的功能了﹕我們只要為每一個(gè)區(qū)域建立起 MX 記錄﹐利用 DNS
查詢得到的郵件伺服器名稱(郵件路由查詢中﹐DNS 只是其中一種方法)﹐這樣﹐當(dāng)郵件伺服器要和對方的區(qū)域進(jìn)行郵件傳遞的時(shí)候﹐就可以通過 MX
記錄得到對方的郵件伺服器名稱﹐而不需預(yù)先知道要和哪臺(tái)郵件主機(jī)溝通。在日後﹐就算對方更換名稱﹐將 DNS
記錄改改就可以﹐完全無需知會(huì)其它郵件主機(jī)﹔而外面的郵件伺服器也根本無需認(rèn)知到這個(gè)改變。
這樣的設(shè)計(jì)﹐無疑是非常靈活便利的﹗另外﹐使用 MX 還有一個(gè)功能﹕您可以用多個(gè)
MX 同時(shí)指定好幾臺(tái)郵件伺服器名稱﹐從而提供備援或平行處理服務(wù)。在我這個(gè)例子中﹐我就分別為‘siyongc.domain’這個(gè)區(qū)域指定了兩個(gè)
MX
記錄﹕‘rh71.siyongc.domain.’和‘lp64.dmz.domain.’。但您有沒有發(fā)現(xiàn)它們前面都有一個(gè)數(shù)字呢﹖這數(shù)字有什麼作用
啊﹖
問得好﹗當(dāng)外面的郵件伺服器通過 DNS
查詢到我們的郵件伺服器﹐如果發(fā)現(xiàn)超過一臺(tái)主機(jī)負(fù)責(zé)郵件交換的話﹐數(shù)值越低的就越先被查詢。但有時(shí)候該主機(jī)沒有回應(yīng)呢﹖那麼就由下一個(gè)數(shù)值的主機(jī)負(fù)責(zé)了。
這樣有一個(gè)好處就是﹕就算第一臺(tái)郵件伺服器出現(xiàn)故障﹐也不至於導(dǎo)致郵件交換功能癱瘓掉。我們通常會(huì)將各自的 MX
主機(jī)儘量分佈在不同的位置上(例如別的城市或國家的分公司主機(jī))﹐假如萬一發(fā)生專線﹑甚至 ISP 的問題﹐我們還能將郵件轉(zhuǎn)往下一臺(tái) MX
主機(jī)。然而﹐在設(shè)計(jì)上﹐由於帳號和 client 端的設(shè)定因素﹐我們的郵件並非真的完全轉(zhuǎn)到下一個(gè) MX 主機(jī)接收﹐而是先將郵件暫時(shí)佇列(
queue ) 在那臺(tái)機(jī)器上﹐當(dāng)原來的 MX 主機(jī)恢復(fù)連線之後﹐郵件會(huì)自動(dòng)的從佇列主機(jī)那邊送回來﹐這樣就能避免郵件丟失或被退信。
補(bǔ)充說明一下﹕上面這段說明單純只就 DNS 的設(shè)定而言的﹐事實(shí)上﹐還需要在 MX
指定的 ip 上面進(jìn)行相關(guān)設(shè)定才有用。我們將會(huì)在“架設(shè) MAIL”的文章為大家作進(jìn)一步的說明。但您要知道﹕DNS
的功能只負(fù)責(zé)名稱解釋﹐至於解釋出來的結(jié)果是如何運(yùn)用的﹐則與 DNS 無關(guān)。只是﹐在 mail system 設(shè)定中﹐需要 DNS
配合的地方有很多﹐尤其是 MX 相關(guān)的記錄。假如您心急想知道目前所談的功能﹐或許可以參考如下討論﹕
Mail Service Redundant Design
Tips﹕雖然﹐我們通常喜歡用‘10’﹑‘20’﹑‘30’....  這樣的偏好值( preference ) 來分配 MX 記錄﹐但只要您喜歡﹐用‘1’﹑‘2’﹑‘3’...  這樣的順序一樣可以。不過﹐我建議您還是使用慣例啦。
現(xiàn)在很多大型郵件系統(tǒng)﹐都可以同時(shí)使用多臺(tái)郵件主機(jī)來提供郵件交換服務(wù)﹐這時(shí)候您可以
將 MX 的 preference 設(shè)為相同﹐然後利用 NIS 和 NFS 服務(wù)﹐將郵件同步到相同的帳號去。您已經(jīng)在前面的章節(jié)裡面學(xué)會(huì)了
NIS 和 NFS﹐等日後學(xué)習(xí)郵件主機(jī)架設(shè)的時(shí)候﹐不妨玩玩看﹗
或許﹐您還發(fā)現(xiàn)我這裡為所有主機(jī)指定了 MX 記錄﹐有些直接指向自己(如 rh71﹑mdk
等)﹐而有些則指向別的機(jī)器(如 lp64﹑acer 等)。在 Linux 機(jī)器上面﹐各主機(jī)本身就具備郵件交換功能(除非您將之移除了)﹐而
Windows 則除非額外加裝﹐否則本身是沒有郵件交換功能的。這裡的設(shè)定是﹐從外面通過 DNS 查詢而寄往那些主機(jī)的郵件﹐都會(huì)轉(zhuǎn)到 MX
上面指定的郵件伺服器。這在實(shí)際的網(wǎng)路環(huán)境中很常見﹐尤其您接觸過“ mail hub ”這個(gè)概念。無論如何﹐我建議您應(yīng)該幫負(fù)責(zé) domain
的郵件伺服器本身設(shè)定一個(gè)偏好值最低的 MX 記錄指向自己(但這不是硬性必須如此的)。
Tips﹕事實(shí)上﹐我當(dāng)初對 MX 的理解一直存在著錯(cuò)誤﹐直到有一次在新聞組上和大家討論﹐才糾正過來。如果您對這個(gè)故事感興趣的話﹐或是想更進(jìn)一步了解 MX 的實(shí)際運(yùn)作原理﹐請參考 > 一文。
在過去﹐有些人並不知道如何正確的運(yùn)用 MX 記錄﹐但相對的﹐他們會(huì)為 domain
名稱本身設(shè)定一個(gè) A 記錄 (@    IN    A    192.168.100.23
)。這樣的做法雖然不是正統(tǒng)的﹐但也行之有年了。而且﹐在許多網(wǎng)站的 URL 上﹐這樣的設(shè)定﹐也能讓您少輸入“ www. ”這四個(gè)鍵~~~ ^_^
另外﹐在這個(gè)檔裡面﹐您或許還發(fā)現(xiàn)‘ TXT ’這樣的記錄類別﹐它是‘Text Information’的意思﹐它實(shí)際上不牽涉任何設(shè)定﹐只記錄一些環(huán)境說明而已﹔這和‘ HINFO(Host
Information) ’差不多﹐但 HINFO 一定要有兩項(xiàng)記錄(分別用引號分開)﹐其中第一項(xiàng)是關(guān)於 CPU
的訊息﹐第二項(xiàng)則是作業(yè)系統(tǒng)。然而﹐TXT 和 HINFO 這些資訊僅能在一個(gè)信任的環(huán)境中提供﹐如果您架設(shè)的 DNS
是對外提供服務(wù)的﹐那麼﹐就不要設(shè)定這些資訊了。要不然﹐入侵者可非常感謝您哦﹐因?yàn)槟鷰退麄兪s了很多主機(jī)系統(tǒng)的探測手續(xù)~~~
所以﹐這裡僅做範(fàn)例﹐供您參考而已。
而最後您所看到的‘CNAME’記錄又是怎樣的呢﹖CNAME
也是一個(gè)常見的記錄類別﹐它是一個(gè)別名記錄( Canonical Name )。當(dāng) DNS 系統(tǒng)在查詢 CNAME 左面的名稱的時(shí)候﹐都會(huì)轉(zhuǎn)向
CNAME 右面的名稱再進(jìn)行查詢﹐一直追蹤到最後的 PTR 或 A 名稱﹐成功查詢後才會(huì)做出回應(yīng)﹐否則失敗。例如﹐在正解查詢中﹐一個(gè) IP 通常(當(dāng)
然也有例外)﹐只會(huì)對應(yīng)一個(gè) A 記錄﹐但我們可以使用 CNAME 在 A 名稱之上賦予該 IP
更多的名稱。也就是說﹕所有關(guān)於‘www.siyongc.domain’﹑‘ftp.siyongc.domain’﹑
‘mail.siyongc.domain’這些名稱的查詢﹐實(shí)際上都會(huì)再查詢一次‘rh71.siyongc.domain.’這個(gè)記錄﹐直到找到它的
IP 位址為止。有些朋友或許會(huì)設(shè)定多層的 CNAME 查詢﹐例如﹕
C    CNAME    B
B    CNAME    A
這樣的話﹐會(huì)一層一層的逐級 CNAME 下去... 但是﹐這很浪費(fèi) DNS
資源﹗因?yàn)槊恳粋(gè) CNAME 都一定會(huì)產(chǎn)生另外一個(gè)查詢動(dòng)作﹐如果層級越多﹐那就產(chǎn)生越多的重複查詢。所以﹐精明的 DNS
管理員﹐都會(huì)儘量的減少查詢次數(shù)的發(fā)生﹐他會(huì)將 CNAME 變成這樣子﹕
C    CNAME    A
B    CNAME    A
這樣就用心多了﹗
基本上﹐我們在正解設(shè)定上所使用到的記錄大概就前面所看到的。哦﹐對了~~ 還有另外一個(gè) /var/named/dmz.domain 檔案也不要忘記了﹕
$TTL    86400
$ORIGIN dmz.domain.
@ IN  SOA  rh71.siyongc.domain. root.rh71.siyongc.domain. (
        2001111601 28800 14400 3600000 86400 )
        IN  NS  rh71.siyongc.domain.
        IN  NS  lp64.dmz.domain.
        IN  MX  10 rh71.dmz.domain.
;; -- linux servers --
rh71    IN  A   10.0.1.131
        IN  MX  0 rh71.dmz.domain.
        IN  HINFO "Petium II 266""Redhat 7.1"
        IN  TXT   "The internet gateway."
lp64   IN  A   10.0.1.130
        IN  MX   0 rh71.dmz.domain.
        IN  HINFO "Pentium 90""Linpus 6.4"
;; -- cnames --
gw      IN  CNAME   lp64
www     IN  CNAME   lp64
ftp     IN  CNAME   lp64
mail    IN  CNAME   lp64
您看﹗就這樣﹐我們的 DNS 就已經(jīng)設(shè)定好了﹐包括反解和正解哦~~~ ^_^
[color="#000088"]重新啟動(dòng) named
當(dāng)您以為所有設(shè)定檔都設(shè)定好之後﹐最想做的事情莫過於要測試一下啦。但在測試之前﹐我們還要重新啟動(dòng) named ﹐否則﹐您查詢出來的還是舊資料。聰明的您或許已經(jīng)知道使用如下命令來重新啟動(dòng)DNS 服務(wù)了吧﹕
service named restart
然而﹐作為一個(gè)有經(jīng)驗(yàn)的 DNS 管理員﹐在重新啟動(dòng) named 服務(wù)之後﹐他一定會(huì)檢查一個(gè)檔案﹐就是 /var/log/messages 。因?yàn)椹o許多時(shí)候﹐當(dāng)您執(zhí)行 service named restart 之後您看到的都是綠色的 OK ﹐但事實(shí)上是否真的 OK 呢﹖誰也不敢保證﹐除非您在 log 檔中沒發(fā)現(xiàn)錯(cuò)誤信息。所以﹐我也強(qiáng)烈建議您每次重新啟動(dòng) named 之後﹐一定一定要做如下動(dòng)作﹕
vi /var/log/messages
然後按“G”鍵(大寫)跳到檔案末尾部份(事實(shí)上﹐您也可以用 tail 命令)。您或許會(huì)看到如下這樣的記錄﹕
Nov 16 14:54:10 rh71 named[2211]: starting BIND 9.1.0 -u named
Nov 16 14:54:10 rh71 named[2211]: using 1 CPU
Nov 16 14:54:10 rh71 named: named startup succeeded
Nov 16 14:54:10 rh71 named[2215]: loading configuration from '/etc/named.conf'
Nov 16 14:54:10 rh71 named[2215]: the default for the 'auth-nxdomain' option is now 'no'
Nov 16 14:54:10 rh71 named[2215]: no IPv6 interfaces found
Nov 16 14:54:10 rh71 named[2215]: listening on IPv4 interface lo, 127.0.0.1#53
Nov 16 14:54:10 rh71 named[2215]: listening on IPv4 interface eth0, 192.168.100.23#53
Nov 16 14:54:10 rh71 named[2215]: listening on IPv4 interface eth1, 10.0.1.1#53
Nov 16 14:54:10 rh71 named[2215]: listening on IPv4 interface eth2, 10.0.1.131#53
Nov 16 14:54:10 rh71 named[2215]: listening on IPv4 interface vmnet1, 172.16.233.1#53
Nov 16 14:54:10 rh71 named[2215]: listening on IPv4 interface vmnet8, 192.168.183.1#53
Nov 16 14:54:10 rh71 named[2215]: listening on IPv4 interface ppp0, 211.74.244.213#53
Nov 16 14:54:10 rh71 named[2215]: running
上面雖然有 'auth-nxdomain' 和 IPV6 的提示﹐但那是正常的(除非您有設(shè)定相關(guān)的功能)。如果沒有其它錯(cuò)誤信息的話﹐那真要恭喜您了﹗
但有時(shí)候您或許會(huì)看到有其他錯(cuò)誤信息的﹐例如﹕
Nov 16 15:01:49 rh71 named[2287]: loading configuration from '/etc/named.conf'
Nov 16 15:01:49 rh71 named[2287]: /etc/named.conf:41: parse error near zone
Nov 16 15:01:49 rh71 named[2287]: loading configuration: failure
Nov 16 15:01:49 rh71 named[2287]: exiting (due to fatal error)
這個(gè)錯(cuò)誤信息明顯指出了是 /etc/named.conf 的問題﹐而且很可能在 41 行附近。根據(jù)我個(gè)人的經(jīng)驗(yàn)﹐這通常是您漏了 “ ﹔”符號的原因而已。
如果您碰到如下信息﹐那是沒有為所有 RR 記錄項(xiàng)設(shè)定 TTL 而已﹐您可以為每一個(gè)記錄項(xiàng)補(bǔ)上 TTL (在 IN 前面)﹐也可以在記錄檔的前面用 $TTL 來設(shè)定﹕
Nov 16 15:04:47 rh71 named[2395]: master.c:1172: unexpected error:
Nov 16 15:04:47 rh71 named[2395]: dns_master_load: siyongc:3: no TTL specified.
THIS ZONE WILL NO LONGER WORK IN FUTURE VERSIONS. Add a TTL.
Nov 16 15:04:47 rh71 named[2395]: dns_master_load: siyongc:5: using
RFC 1035 TTL semantics
如果您碰到下面這樣的信息﹐那多是因?yàn)槟蜃皱e(cuò)誤的關(guān)係﹐輸入了 named 不認(rèn)識(shí)的記錄類別名稱(例如漏了記錄名稱或打錯(cuò)了)﹕
Nov 16 15:07:44 rh71 named[2422]: dns_master_load: siyongc:2: unknown RR
type 'siyongc.domain.'
Nov 16 15:07:44 rh71 named[2422]: dns_zone_load: zone siyongc.domain/IN: loading
master file siyongc: unknown class/type
如下的問題﹐那可能是您沒有定義 SOA 記錄﹐或設(shè)定有錯(cuò)誤﹕
Nov 16 15:14:33 rh71 named[2506]: dns_zone_load: zone siyongc.domain/IN: could
not find NS and/or SOA records
Nov 16 15:14:33 rh71 named[2506]: dns_zone_load: zone siyongc.domain/IN: has
0 SOA records
Nov 16 15:14:33 rh71 named[2506]: dns_zone_load: zone siyongc.domain/IN: no
NS records
下面的問題可能是您的 SOA 記錄中多輸入了一組數(shù)字﹐或少輸入了一組數(shù)字﹐或數(shù)字格式有錯(cuò)誤﹕
Nov 16 15:14:33 rh71 named[2506]: dns_zone_load: zone siyongc.domain/IN: could not
find NS and/or SOA records
Nov 16 15:14:33 rh71 named[2506]: dns_zone_load: zone siyongc.domain/IN: has
0 SOA records
Nov 16 15:14:33 rh71 named[2506]: dns_zone_load: zone siyongc.domain/IN: no
NS records
Nov 16 15:18:24 rh71 named[2562]: dns_rdata_fromtext: siyongc:4: near eol: unexpected
end of input
Nov 16 15:18:24 rh71 named[2562]: dns_zone_load: zone siyongc.domain/IN: loading
master file siyongc: unexpected end of input
Nov 16 15:19:34 rh71 named[2640]: dns_rdata_fromtext:
siyongc:4: near '14B400':
syntax error
Nov 16 15:19:34 rh71 named[2640]: dns_zone_load: zone
siyongc.domain/IN: loading
master file siyongc: syntax error
以下問題可能是 SOA 的 “ ( ) ”符號有問題﹐要麼是“ ( ” 給斷到下一行了﹐要麼是“ ) ”給註解掉了﹕
Nov 16 15:22:08 rh71 named[2669]: dns_rdata_fromtext: siyongc:3: near eol: unexpected
end of input
Nov 16 15:22:08 rh71 named[2669]: dns_zone_load: zone siyongc.domain/IN: loading
master file siyongc: unexpected end of input
Nov 16 15:22:52 rh71 named[2696]: dns_rdata_fromtext: siyongc:4:
near 'IN': extra input text
Nov 16 15:22:52 rh71 named[2696]: dns_zone_load: zone siyongc.domain/IN:
loading master file siyongc: extra input text
以下是您沒有設(shè)定 NS 記錄或 NS 記錄設(shè)定有錯(cuò)誤﹕
Nov 16 15:25:30 rh71 named[2801]: dns_zone_load: zone siyongc.domain/IN: no NS records
下面的錯(cuò)誤可能是您設(shè)定了一個(gè)記錄項(xiàng)超出了當(dāng)前 ORIGIN 的範(fàn)圍﹐例如 localhost. 或 siyongc. (也就是錯(cuò)誤使用 FQDN )﹔或是錯(cuò)誤的使用了 $ORIGIN 設(shè)定﹔或是在 named.conf 中有多個(gè) zone 在分享同一份記錄檔﹕
Nov 16 15:31:20 rh71 named[2920]: dns_master_load: siyongc:16:
ignoring out-of-zone data
下面的錯(cuò)誤﹐有可能您在設(shè)定多個(gè) $ORIGIN 並同時(shí)嘗試設(shè)定多個(gè) SOA 時(shí)出現(xiàn)的錯(cuò)誤﹕
Nov 16 15:28:31 rh71 named[2855]: dns_master_load: siyongc:26:
not at top of zone
許多許多問題﹐事實(shí)上您都可以在 /var/log/messages 中找到﹐當(dāng)您發(fā)現(xiàn)這些錯(cuò)誤信息之後﹐看看是關(guān)於什麼記錄的﹐然後順藤摸瓜﹐留心一下檔案內(nèi)容﹐就比較容易找到錯(cuò)誤的原因了。
有時(shí)候﹐您想簡化您的 DNS 設(shè)定工作﹐您可以使用 netconf
來做。不過﹐根據(jù)我的經(jīng)驗(yàn)是﹕netconf 未必能夠完全幫您正確的設(shè)定起來。當(dāng)您重新啟動(dòng) named 之後﹐別忘了看一下
/var/log/messages ﹐確定沒有錯(cuò)誤發(fā)生。如果您使用工具來設(shè)定 DNS 而碰到問題﹐這就需要您有手工設(shè)定的能力了。
[color="#000088"]設(shè)定 DNS Client
DNS 系統(tǒng)是一個(gè)典型的 Client/Server 架構(gòu)﹐前面介紹的動(dòng)作僅是確保 DNS 的 server 成功啟動(dòng)起來而已﹐如果您要測試它﹐還必須設(shè)定好 client 端才行。
不知道您會(huì)不會(huì)設(shè)定 linux 的 dns client 呢﹖如果忘記了要打屁屁了哦~~~ 事實(shí)上我們在第一章的“
網(wǎng)路設(shè)定
”那裡就設(shè)定過了﹐也就是修改 /etc/resolv.conf 這個(gè)檔案﹐將您剛設(shè)定好的 DNS 主機(jī) IP 放在檔案的前排位置﹐如﹕
nameserver        192.168.100.23
nameserver        168.95.1.1
nameserver        139.175.10.20
domain        siyongc.domain
search        siyongc.domain dmz.domain test.com
假如您的 client 和 server 在同一臺(tái)機(jī)器上﹐那可以將第一個(gè) name server 設(shè)定為 0.0.0.0 或 127.0.0.1 。
要是您使用 Windows ﹐但不是透過 DHCP 來指定 DNS 的話﹐那您或許需要手工設(shè)定了﹕控制臺(tái) --> 網(wǎng)路 --> TCP/IP (-> 網(wǎng)路卡) --> 內(nèi)容 --> DNS 組態(tài) ﹕

請注意﹕如果您修改了這裡的設(shè)定﹐就算您的 Windows 是透過 DHCP 取得 IP 設(shè)定的話﹐也會(huì)以這裡的設(shè)定為準(zhǔn)。如果您想使用 DHCP 的設(shè)定﹐那就選擇“關(guān)閉 DNS”吧。
[color="#000088"]測試 DNS
要測試我們的設(shè)定是否生效﹐我們可以使用的方法有很多﹐其中最簡單的莫過於 ping 命令了。直接 ping 一下您所預(yù)期的 dns 名稱就知道結(jié)果了。
不過﹐ping 畢竟很有限﹐例如﹕您不能查詢 MX 和 NS 等記錄。實(shí)作上﹐我們最最常使用的 DNS 查詢工具是 nslookup  命令。關(guān)於 nslookup ﹐在“學(xué)習(xí)網(wǎng)路”的“
DNS 協(xié)定
”文章中有很詳細(xì)的例子﹐這裡不再重複。如果我們在測試中失敗﹐例如 nslookup 回應(yīng)說﹕
*** rh71.siyongc.domain can't find XXX.XXXX.XXXX:
Non-existent host/domain
這通常是反解記錄沒設(shè)定好的緣故﹐請確定 DNS 主機(jī)本身的反解有設(shè)定起來﹐而且可以被 DNS 追查得到。如果反解沒有授權(quán)下來﹐那就請上游 ISP 幫忙設(shè)定。不過﹐我發(fā)現(xiàn)這個(gè)錯(cuò)誤信息似乎在新版的 nslookup 中不會(huì)出現(xiàn)﹐anyway ﹐請您自己留意吧。
有時(shí)候 nslookup
會(huì)停在某處一動(dòng)也不動(dòng)﹐其實(shí)它不是當(dāng)?shù)袅拴o而是在查詢沒結(jié)果之後等 time out 而已。您可以按 Ctrl + C 終止查詢﹐再打 exit
跳出來。不過﹐如果您在按了 Ctrl + C 之後接著再輸入一個(gè)無結(jié)果的查詢﹐那就好可能將 nslookup 當(dāng)?shù)。這樣您可能要登錄進(jìn)另外一個(gè)
terminal ﹐然後用 kill 將 PID 殺掉。同上﹐新版的 nslookup 沒有這個(gè)困繞﹐但如果按 Ctrl + C
的話﹐則會(huì)直接跳離 nslookup 程式。
然而﹐nslookup 似乎在以後的版本中不再維護(hù)了﹐取而代之的﹐就是 dig 命令﹐所以﹐當(dāng)您在 Redhat 7.1 上輸入 nslookup﹐您會(huì)看到如下這樣的信息﹕
Note:  nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead.  Run nslookup with
the `-sil[ent]' option to prevent this message from appearing.
這段文字不用解釋了吧﹖真的不知道說什麼就查字典吧~~  ^_^  這裡﹐我們不妨學(xué)習(xí)一下如何用 dig 來查詢和測試 DNS 服務(wù)。
基本上﹐dig 命令的語法如下﹕
dig [@server] domain [] [] [+]
         [-] [%comment]
看起來蠻複雜的﹐恐怕要 man dig 才知道怎麼使用。不過﹐我們平時(shí)只用它來查詢 dns 資料的話﹐要使用到的選項(xiàng)也不會(huì)太多啦﹐如果您會(huì)得在 nslookup 中設(shè)定 type=XXX 的話﹐那您也可以用 dig 來查詢不同的記錄類別資料。例如﹕
# [color="#00ff00"]dig siyongc.domain mx
; > DiG 9.1.0 > siyongc.domain mx
;; global options:  printcmd
;; Got answer:
;; ->>HEADER
上面是的命令是使用預(yù)設(shè)的 name server 來查詢 siyongc.domain 的 mx
記錄。當(dāng)然﹐您也可以用 @ 來指定用某一臺(tái) name server 來查詢其它的資訊。例如﹐我要用 hinet 的 dns 來查詢負(fù)責(zé)
com.tw 的 NS 有哪些﹕
# [color="#00ff00"]dig @168.95.1.1 com.tw ns
; > DiG 9.1.0 > @168.95.1.1 com.tw ns
;; global options:  printcmd
;; Got answer:
;; ->>HEADER
除了用 nslookup 和 dig 之外﹐如果您只想簡單的查詢 dns 資訊的話﹐那您可以用 host 命令。例如﹕
# [color="#00ff00"]host -t any siyongc.domain 0.0.0.0
Using domain server:
Name: 0.0.0.0
Address: 0.0.0.0#53
Aliases:
siyongc.domain. SOA rh71.siyongc.domain. root.rh71.siyongc.domain. 2001111601 28
800 14400 3600000 86400
siyongc.domain. name server lp64.dmz.domain.
siyongc.domain. name server rh71.siyongc.domain.
siyongc.domain. mail is handled by 10 rh71.siyongc.domain.
siyongc.domain. mail is handled by 20 lp64.dmz.domain.
siyongc.domain. has address 192.168.100.23
上面的命令就是用本機(jī) name server 來查詢 siyongc.domain 的 any 資訊。至於 host 命令的格式如下﹕
host [-aCdlnrTwv] [-c class] [-N ndots] [-R number] [-t type] [-W wait]
          name [server]
老話啦﹐看 man host 以了解那些參數(shù)和選項(xiàng)的用法吧。
您可以發(fā)現(xiàn)﹕透過 nslookup ﹑ dig ﹑與 host
命令﹐事實(shí)上可以查詢到許多 dns 上面的設(shè)定資訊。所以﹐如果您的 DNS 是對外提供服務(wù)的話﹐請儘量儘量控制 DNS
資訊量﹐如果您覺得沒必要對外提供的﹐那就拿掉它。無論如何﹐關(guān)於內(nèi)部網(wǎng)路的 DNS
資訊﹐是絕對不能對外散佈的。如果查詢的結(jié)果未如您所預(yù)期的﹐您就要進(jìn)行 debug 工作了。
[color="#000088"]註冊 domain
Okay﹐相信到此為止﹐您已經(jīng)能夠在單一的 dns 上面設(shè)定一個(gè)或多個(gè) domain 的正解和反解服務(wù)了。這時(shí)候﹐您或許早已迫不及待想註冊一個(gè)屬於自己的 domain 來玩玩看吧﹖
呵呵~~ 有此衝動(dòng)絕對正常﹐尤其現(xiàn)在的 domain
註冊那麼方便和便宜﹐前幾天在‘討論園地’得知原來現(xiàn)在註冊一個(gè) .com 或 .org 的網(wǎng)站﹐一年都不用 $10
塊美金﹗實(shí)在是便宜得令人難以至信~~~ 如果您貪圖方便的話﹐可以請任何一家網(wǎng)路公司代您申請 domain
(當(dāng)然需額外的服務(wù)費(fèi))﹔要不然呢﹐也可以直接到網(wǎng)路上完成自己的 domain 註冊。
不過﹐要註冊自己的 domain 之前﹐有些條件您還是要準(zhǔn)備好的﹕

  • 還沒被註冊走的 domain 名字﹔
  • 貴 domain 的擁有人﹑負(fù)責(zé)人﹑發(fā)票人﹑管理員 之姓名﹑住址﹑和聯(lián)絡(luò)資料(皆英文)﹔
  • 管理貴 domain 的 ns 主機(jī)﹐必須有固定 IP (最少要兩臺(tái)﹐可請別人代管)﹔
  • 合法有效的信用卡﹐而且您願(yuàn)意在網(wǎng)路上使用它。

當(dāng)您這些條件都符號之後﹐可以連線到網(wǎng)路上的著名 domain 服務(wù)網(wǎng)站﹐例如﹕
http://www.networksolutions.com
http://www.dotster.com
http://www.godaddy.com
http://www.twnic.net
當(dāng)然﹐還有很多很多~~~ 而最後一個(gè)網(wǎng)站是負(fù)責(zé)臺(tái)灣的 domain 註冊的機(jī)構(gòu)﹐您可以到那裡註冊所有以 tw 結(jié)尾的 domain﹐除了 twnic 之外﹐很多 ISP (例如 seednet )也有提供 tw domain 的註冊服務(wù)。
各網(wǎng)站的註冊手續(xù)和表格或許不儘相同﹐但基本上您需要提供的資訊還是大同小異的﹐我這裡就不介紹如何進(jìn)行了﹐只要您身邊有字典都沒問題啦~~~  ^_^ 在您所提供的資訊中﹐其中有一項(xiàng)比較傷腦筋的﹐就是 ns 主機(jī)要指向哪裡﹖(註冊時(shí)需要最少兩臺(tái))
以正規(guī)的手續(xù)來說﹐如果您要用一個(gè) IP 來作為您的 name
server﹐您必須先要將這個(gè) IP 在 whois 資料庫中註冊為 NS 記錄才能使用﹐假如該 IP 或是該 NS
已經(jīng)註冊過了﹐您就不能按您的意思來註冊了﹐但您可以使用它(當(dāng)然您要確定您能管理那臺(tái)註冊主機(jī)﹐或是獲得對方的管理員同意)。但我這裡告訴您一個(gè)秘訣﹕
第一次註冊 domain 的時(shí)候﹐隨便設(shè)定都可以﹗(哦﹐這是我在 dotster 上面的經(jīng)驗(yàn)啦﹐其它網(wǎng)站是否如此我就不清楚了~~)
然後您在完成註冊後﹐用您的帳號進(jìn)去修改 name server 的 IP 就可以了(當(dāng)然﹐您要設(shè)定的 IP 必須還沒被註冊過﹐或已經(jīng)從
whois 資料庫中註銷)。
然而﹐如果您日後要變更您的 NS 和 IP
的話﹐是很麻煩的一件事情﹗而根據(jù)我以往的經(jīng)驗(yàn)﹐您最好用 email
和網(wǎng)站的支援人員取得聯(lián)絡(luò)﹐才能順利完成修改。嗯﹐這種工作實(shí)際上一點(diǎn)也不好玩啦﹐而且各網(wǎng)站有各自的方法和表格。比方說﹐如果您透過
networksolution 註冊的話﹐日後您要修改 name server﹐必須填寫 host
forms﹐然後會(huì)根據(jù)您提供的確認(rèn)方式確認(rèn)之後才能完成﹐他們的確認(rèn)方式有三種﹕

  • MAIL FROM﹕以您所提供的 email 信箱為依據(jù)﹔
  • CRYPT-PW﹕以您提供的密碼為依據(jù)﹔
  • PGP﹕以您的 PGP 簽名為依據(jù)。

不過﹐在實(shí)作流程上非常複雜﹐比方說﹐如果原本採用 MAIL FROM 方式﹐但後來您的
email 信箱卻變更了﹐那就很麻煩了﹐因?yàn)閷Ψ讲荒芨鶕?jù)您的新 email 信箱來作為確認(rèn)依據(jù)的。我曾經(jīng)為所服務(wù)的公司修改過 NS
記錄﹐到最後﹐只能以 fax 的方式來解決。
而像 dotster
網(wǎng)站﹐則只能透過帳號進(jìn)行線上修改。這原本很方便﹐但最不好的地方是﹕他們不提供確認(rèn)信息﹗往往﹐您以為已經(jīng)修改完畢﹐但等了一個(gè)星期還沒生效﹐去信問他
們﹐才知道原來要修改的那個(gè) IP 並沒有註冊為 ns 主機(jī)﹐或已經(jīng)註冊在別的名稱下面了。我曾經(jīng)數(shù)次寫信給 doster 的 support
信箱﹐要求他們在線上修改後要向用戶提供確認(rèn)資訊(不管成功與否)﹐但不知道他們現(xiàn)在是否有改善了呢﹖(如果還沒改變的話﹐請大家多作投訴﹐直到他們提供
確認(rèn)服務(wù)為止。)
Tips﹕如果您在 dotster 或其它網(wǎng)站修改
NS﹐而不能成功的話﹐請窮追他們的 support 信箱就是了。通常他們都會(huì)幫您搞定的﹐而且提供的資訊比較滿意。例如﹐如果您要修改的 IP
還沒註冊﹐他們會(huì)幫您完成註冊(注意哦﹐name server 的 host 註冊和您的 domain 註冊可是不同的哦~~)。
但我也曾經(jīng)試過到 networksolution 上面註冊一個(gè) new host﹐然後到 dotster 那邊修改﹐也能順利完成﹗但這個(gè)後門﹐不知道現(xiàn)在是否還行得通呢﹖
說實(shí)在﹐就算您註冊了 domain﹐如果您沒有固定 IP 的話﹐最好不要自己管 DNS ﹐請別的有固定 IP 的朋友幫忙﹐或是付費(fèi)請人代管就是了。而上面提到的 domain 網(wǎng)站﹐大都提供這樣的服務(wù)。
另外﹐還有一個(gè)概念或許是許多 DNS 新手容易搞混亂的﹕我們這裡所說的 domain
註冊﹐在整個(gè) DNS 系統(tǒng)中﹐僅屬於“正解”方面的註冊和授權(quán)而已﹔這和“反解”的授權(quán)毫不相關(guān)。而反解的授權(quán)﹐因?yàn)槭歉鷵?jù) IP
授權(quán)的﹐所以必須透過您的 IP 發(fā)放機(jī)構(gòu)進(jìn)行。換句話說﹕反解的授權(quán)﹐只能透過 ISP 進(jìn)行。請您一定要區(qū)分這兩種授權(quán)模式。
[color="#000088"]關(guān)於 Dynamic DNS
如果您還沒有固定 IP 而又想讓別人能夠透過 DNS 來查詢主機(jī)的話﹐您可以到網(wǎng)路上申請所謂的‘動(dòng)態(tài) DNS ’服務(wù)﹐大部份都是免費(fèi)的﹐而且也有多種平臺(tái)的 client 程式提供。如果您有興趣﹐可以找到很多這類網(wǎng)站﹐下面只是其中兩個(gè)﹕
http://www.dyndns.org/
http://dns2go.deerfield.com/
http://www.adsldns.org
(中文)
如果您不知道如何申請和安裝這類動(dòng)態(tài) DNS 的話﹐您可以參考如下網(wǎng)頁﹕
Steven 電腦世界
之“
Linux 使用 ADSL (計(jì)時(shí)制) 的經(jīng)驗(yàn)分享

鳥哥的 Linux 與 ADSL 文件
之 “
動(dòng)態(tài) DNS 申請

Tips﹕如果您使用撥接式 ADSL (PPPoE) 並在 adsldns.org 上面完成註冊之後﹐您只需在 /etc/ppp 目錄下面修改一個(gè) ip-up.local 檔(如果沒有請自行建立)﹐增加如下內(nèi)容﹕
#!/bin/bash
CMD="http://www.adsldns.org:8080/clientupdate.php\
?email=XXXXX@XXXXXX&passwd=XXXXX\
&hostname=XXXXXX.adsldns.org&debug=1"
lynx -dump $CMD > /tmp/adslclient.log
(注意﹕請將 XXXXX 修改為您的正確資料。同時(shí)﹐首兩行結(jié)尾的 \ 符號不要漏了﹐其左右沒空白﹔要不然﹐拿掉 \ 符號並將前面三行寫成一行。)
然後﹐只要您完成 ADSL 撥接之後﹐就能‘自動(dòng)’的幫您修改 IP 記錄了﹗
關(guān)於動(dòng)態(tài) DNS 的應(yīng)用﹐除了上述的環(huán)境之外﹐在 DHCP 分配的網(wǎng)路中設(shè)定 DNS
也可以應(yīng)用得上。但前提條件是﹕您的 named 必須是 bind 9.x 或以後﹐以及 dhcpd 必須是 3.x
或以後的版本。然而﹐RedHat7.1 上面預(yù)裝的 dhcpd 是 2.0p15-4 這個(gè)版本﹐您必須自行升級才能使用這個(gè)非常棒的功能。
下面﹐我將 dhcp 服務(wù)轉(zhuǎn)移到 mandrake 8.1 (其預(yù)裝的 dhcpd 版本是 3.0-0.rc12.1)﹐然後保留 named 在 rh71 上面﹐再透過 ddns 技術(shù)更新和維護(hù) dhcp 所發(fā)放的 DNS 資料。我初步整理出來的步驟如下﹕
  • 在 mdk 上執(zhí)行如下命令﹐產(chǎn)生 dns 加密驗(yàn)證所需的 secret ﹕
    dnssec-keygen -a HMAC-MD5 -b 128 -n HOST DHCP_MDK
    這樣會(huì)在當(dāng)前目錄下產(chǎn)生兩個(gè)以 Kdhcp_mdk 開頭的檔案﹐有興趣您可以看看其中的內(nèi)容。然後您將 Kdhdp_mdk*.private 中的最後一行 Key: 後面那串字串複製下來 (如﹕4sxutdFuNMqF1B0Q2GV1uQ==)﹐待會(huì)要用到。
  • 然後修改 /etc/dhcpd.conf 的內(nèi)容﹐類似如下﹕
    ddns-update-style ad-hoc;                        # 這行一定要加上
    subnet 192.168.100.0 netmask 255.255.255.0 {
           ......                                # 其中內(nèi)容略﹐請自行填寫
    }
    key DHCP_MDK {
            algorithm HMAC-MD5.SIG-ALG.REG.INT;        # 加密演算法名稱
            secret 4sxutdFuNMqF1B0Q2GV1uQ==;        # 這就是上一步驟產(chǎn)生的 key
    }
    zone siyongc.domain. {
            primary 192.168.100.23;                # 指向 name server 所在位址
            key DHCP_MDK;                        # 必須和前面的 key 名稱一致
    }
    zone 100.168.192.in-addr.arpa. {
            primary 192.168.100.23;                # 同上
            key DHCP_MDK;
    }
    然後重新啟動(dòng) dhcpd 的服務(wù)﹐並確定其功能正常。關(guān)於更多的設(shè)定﹐請 man dhcpd.conf ﹐搜尋 ddns 子串就可以找到。
  • 然後轉(zhuǎn)移到 rh71 上面﹐修改 /etc/named.conf ﹐在 options 前面加上如下句子﹕
    key DHCP_MDK {                        // 這段應(yīng)該和 dhcpd.conf 設(shè)定一致
        algorithm HMAC-MD5.SIG-ALG.REG.INT;
        secret 4sxutdFuNMqF1B0Q2GV1uQ==;
    };
    logging {                        // 這是記錄設(shè)定
        channel update_debug {
            file "/var/log/update-debug.log";
            severity  debug 3;
            print-category yes;
            print-severity yes;
            print-time     yes;
        };
        channel security_info    {
            file "/var/log/named-auth.info";
            severity  info;
            print-category yes;
            print-severity yes;
            print-time     yes;
        };
        category update { update_debug; };
        category security { security_info; };
    };
  • 然後再為相應(yīng)的 zone 加上 update 設(shè)定﹕
    zone "siyongc.domain" {
        type master;
        file "siyongc.domain";
        allow-update { key DHCP_MDK; };        // 名稱必須和前面的 key 一致
    };
    zone "100.168.192.in-addr.arpa" {
        type master;
        file "192.168.100.rev";
        allow-update { key DHCP_MDK; };        // 同上
    };
  • 然後建立所需的記錄檔﹕
    touch /var/log/update-debug.log
    touch /var/log/named-auth.info
    chown named.named /var/log/update-debug.log
    chown named.named /var/log/named-auth.info

  • 完成後請重新啟動(dòng) named ﹐並檢查 /var/log/messages 及測試服務(wù)是否正常。
  • 最後﹐就是等待記錄更新了~~~ ^_^
    哦﹐我忘了準(zhǔn)確的更新時(shí)機(jī)了﹐我在某處看到過(記不起來了﹕家裡的書﹖書局的書﹖網(wǎng)路上﹖)﹕更新的時(shí)機(jī)好像是 dns 那邊累積 100
    了一百個(gè)記錄在 journal 的時(shí)候﹔或是每隔 60 分鐘 (哪個(gè)標(biāo)準(zhǔn)先到達(dá)就採用哪個(gè)方法﹐不過﹐真的記得不是很清楚)。如果您在
    /var/named 的記錄檔下面發(fā)現(xiàn)更新(標(biāo)誌其一是 Serial 號碼)﹐或是在 /var/log/update-degub.log
    上看到有記錄。那就成功了﹗
  • 如果一直沒動(dòng)作怎麼辦﹖呵呵~~~
    我也不知道。但我會(huì)建議您將 /etc/dhcpd.conf ﹑named.conf﹑和 /var/named/
    的記錄檔儘量簡化﹐將那些有的沒的全部拿掉﹐並重新啟動(dòng)服務(wù)看看。當(dāng)然了﹐/var/log/ 裡面記錄檔也有很多重要資訊﹐比方說提昇
    named.conf 裡的 debug level 數(shù)值(如﹕severity debug 9 )﹐然後執(zhí)行﹕
    tail -f /var/log/update-dbug.log
    再不然﹐用 tcpdump 抓封包看囉~~~
    老實(shí)說﹐我原本寫這篇文章的時(shí)候並沒有打算將 dhcp + dns
    的動(dòng)態(tài)更新寫進(jìn)來的﹐因?yàn)檫沒實(shí)作過。幸得在新聞組上得到 小州兄 的指點(diǎn)﹐才裝了個(gè) Mandrak8.1 ﹐並按 man page
    的步驟設(shè)定起來的。我覺得在本機(jī)上更新﹐也就是 dhcpd 和 named
    都在同一臺(tái)機(jī)器上﹐會(huì)比較容易成功。如果跨網(wǎng)路進(jìn)行的話﹐那您得要首先解決網(wǎng)路想過的問題﹐例如路由和防火牆這些設(shè)定。
    Anyway﹐我不敢保證您能按照上面的步驟實(shí)作出來﹐總要自己多嘗試嘗試吧。如果您想更進(jìn)一步了解 DNS 的動(dòng)態(tài)更新﹐您可以研究一下 nsupdate 這個(gè)命令。它可以讓您以交談模式來更新 named 的記錄設(shè)定。
    Tips﹕我知道許多所謂的動(dòng)態(tài) dns 服務(wù)﹐大都會(huì)於 server 上提供更新機(jī)制﹐我猜﹐只要透過簡單的 cgi 或 client 程式﹐就應(yīng)該可以完成的。看完下面 Leo 兄的文章﹐您應(yīng)該會(huì)有靈感的﹕
           
    動(dòng)態(tài) DNS 設(shè)定技巧
           
    除此之外﹐如果您還有興趣研究動(dòng)態(tài) DNS 技術(shù)的話﹐不妨到網(wǎng)路上找找 IXFR 的技術(shù)﹐也可以參考如下這些 RFC﹕1034﹐1995﹐1996﹐2136﹐2535﹐2694。
    [color="#000088"]設(shè)定 master / slave
    不管您是否有打算註冊自己的 domain 和管理自己的 DNS
    主機(jī)﹐在您真正架設(shè)對外服務(wù)的 dns 伺服器之前﹐請先行在內(nèi)部網(wǎng)路架設(shè)看看﹐直到您有信心之後才架設(shè)直接向 Internet 提供服務(wù)的 DNS
    。而您需要練習(xí)的這些前置功夫中﹐其一就是 master 與 slave DNS 的設(shè)置。
    假如您真的到網(wǎng)路上註冊過 domain﹐他們通常需要您提供最少兩臺(tái)
    NS 主機(jī)。為什麼呢﹖這是基於備援考量的。當(dāng)一個(gè)註冊 domain 同時(shí)授權(quán)到兩臺(tái) ns 上面管理的話﹐那別人透過 DNS
    查詢的時(shí)候﹐會(huì)獲得兩個(gè) NS 記錄( root zone 就有 13 個(gè) ns
    之多﹗)。對方只需向其中一臺(tái)進(jìn)行查詢就可以了﹐如果第一臺(tái)不能成功的話﹐則轉(zhuǎn)向下一臺(tái)。究竟向哪一臺(tái) NS
    查詢﹐其先後順序沒什麼關(guān)係﹐但關(guān)鍵的是資料的準(zhǔn)確性﹗
    在前面您已經(jīng)知道如何在單一的主機(jī)上面進(jìn)行 DNS
    設(shè)定了﹐那麼﹐當(dāng)有兩臺(tái)主機(jī)需要為同一個(gè) domain 提供 DNS
    服務(wù)的時(shí)候又如何設(shè)定呢﹖您當(dāng)然可以在兩臺(tái)主機(jī)上各設(shè)定一次。但資料的同步呢﹖您總不能在一臺(tái) NS 查詢到一個(gè) IP 位址﹑而在另一臺(tái) NS
    得到另外一個(gè)位址吧﹖如果發(fā)生資料變更需求的時(shí)候﹐您也得同樣的在兩臺(tái)機(jī)器上面進(jìn)行修改﹐而且必須透過人為的觀測﹐以確定雙方的資料一致性。那~~
    是否有更好的辦法來做到這點(diǎn)呢﹖
    當(dāng)然有啦﹐這就是 master 和 slave DNS
    的設(shè)定了。透過 master 和 slave 的架構(gòu)﹐您日後要進(jìn)行資料變更的時(shí)候﹐只需在 master 上面維護(hù)就好﹐然後 slave
    會(huì)定期的自動(dòng)過來將更新資料同步回去(還記得 SOA 那堆數(shù)字的嗎﹖您應(yīng)該知道 Refresh 和 Serial
    的作用吧﹖如果您忘記了﹐請回去溫習(xí)一下)。
    如果您沒有理解錯(cuò)誤﹐應(yīng)該知道 slave 會(huì)在 refresh 時(shí)間到達(dá)的時(shí)候﹐就嘗試和 master 進(jìn)行資料同步的動(dòng)作﹐這在 DNS 系統(tǒng)裡面有一個(gè)專門術(shù)語﹐叫做“zone transfer”(區(qū)域轉(zhuǎn)移)﹐而在技術(shù)層面來說﹐則是 AXFR 查詢﹕
  • 當(dāng) slave 需要進(jìn)行 zone transfer 之前﹐它首先查詢 master 的 SOA 記錄之 serial 數(shù)值﹔
  • 如果發(fā)現(xiàn)數(shù)值比 slave 上的 serial 要大﹐就送出 AXFR 查詢﹔
  • 如果 master 允許 slave 的 zone transfer ﹐那就回應(yīng) AXFR 的查詢結(jié)果﹔
  • 然後 slave 根據(jù)查詢結(jié)果更新自己的記錄檔。
    從上面的流程來看﹐您不難發(fā)現(xiàn) serial
    在整個(gè)區(qū)域轉(zhuǎn)移過程中的重要性。所以﹐您每次修改了 master﹐一定要將增加 serial 數(shù)值。雖然﹐您可以依序的增加數(shù)值﹐但如果您的
    Serial 號碼是依照“日期 + 修改次數(shù)”格式的話﹐那麼您只要修改日期部份﹐就肯定可以獲得一個(gè)更大的數(shù)值(除非您又碰到 Y2K 的問題
    ^_^ )﹔假如您的修改是在同一天發(fā)生的﹐那您可以修改最右邊的兩為數(shù)字(相信您一天之內(nèi)不會(huì)修改 100 次吧﹖)。
    要設(shè)定 slave DNS 其實(shí)非常簡單﹐簡單到或許您不相信﹗真的沒騙您﹐您只需在 slave 主機(jī)上面的 /etc/named.conf 增加這幾行就可以了﹕
    zone "siyongc.domain" IN {
            type slave;
            masters { 192.168.100.23; };        // 請不要漏了 masters 後面的 s ﹗
            file "slave.siyongc.domain";
    };
    一點(diǎn)也沒錯(cuò)﹗就這麼簡單~~~ ^_^ 我們假設(shè)上面的設(shè)定在 10.0.1.130 (
    lp64 ) 上面進(jìn)行﹐而 master 則是 192.168.10.23 ( rh71
    )。這裡﹐我再告訴您一個(gè)您非常樂意聽到的信息﹕您根本無需擔(dān)心如何建立 slave 的記錄檔﹐named 會(huì)自動(dòng)幫您搞定﹗您只需確定
    /var/named 這個(gè)目錄能夠被 named 寫入就行了。如果您不確定﹐那只需將目錄的 owner 改一改就行了﹕
    chown -R named.named /var/named
    這樣的話﹐只要 slave 的 refresh
    時(shí)間到達(dá)﹐就會(huì)自動(dòng)的幫您更新記錄資料了(當(dāng)然了﹐底層的路由和連線必須是暢通無阻的)。但是﹐每次當(dāng)您修改了 master 上面的設(shè)定並重新啟動(dòng)
    named 服務(wù)的時(shí)候﹐master 就會(huì)主動(dòng)向資源記錄當(dāng)中的所有 NS 主機(jī)送出 NOTIFY 信號(自己除外﹐但
    master 的 NS 記錄必須是第一筆)。當(dāng) slave(s) 收到來自 master 的 NOTIFY 之後﹐會(huì)回復(fù)一個(gè)確認(rèn)給
    master ﹔然後根據(jù) /etc/named.conf 檔案中的設(shè)定﹐嘗試向所定義的 masters 位址進(jìn)行 zone transfer
    (是否要更新資料﹐當(dāng)然還必須以 Serial 為依據(jù))﹐就好像 refresh 到達(dá)了一樣。
    Tips﹕假如您發(fā)現(xiàn)修改 master 後並不能及時(shí)同步 slave 上的資料﹐那可能是 slave 並沒寫在 NS 記錄上。如果您不願(yuàn)意修改 NS 記錄﹐那您可以在 master 的 named.conf 裡面的 zone 設(shè)定上加上這幾行﹕
    zone "siyongc.domain" IN {
            type master;
            file "siyongc.domain";
            notify yes;
            also-notify { 192.168.100.26; };
    };
    這樣﹐master 在修改後同時(shí)還會(huì)通知名單中的 slave 主機(jī)。
    事實(shí)上﹐如果有別的 slave DNS 被設(shè)定為指向該這臺(tái) master 的話﹐就算您這裡將 notify 設(shè)為 no ﹐當(dāng) slave 主機(jī)的 refresh 到期的時(shí)候﹐還是可以進(jìn)行區(qū)域轉(zhuǎn)移 (zone transfer) 的。
    當(dāng)然了﹐為了防止別人任意的向 master 進(jìn)行 zone
    transfer 而盜取 zone 資料﹐named 還允許您以 acl (Access Control List)
    來控制哪些主機(jī)才能上來進(jìn)行區(qū)域轉(zhuǎn)移(這個(gè)我們後面再談)﹐同時(shí)﹐還允許 zone transfer 的時(shí)候以加密的方式傳送資料。
    除了上述的備援需求外﹐在其它情形也有可能需要 master / slave
    的架構(gòu)。比方說﹐您有一個(gè)很大型的網(wǎng)路﹐如果所有主機(jī)都集中向 master 進(jìn)行 DNS 查詢﹐那勢必會(huì)增加 master
    的工作負(fù)荷﹑而降低其效能﹐同時(shí)也產(chǎn)生額外的遠(yuǎn)程網(wǎng)路流量。這時(shí)﹐您最好設(shè)定多臺(tái) slave 放置在不同的地點(diǎn)來分擔(dān) master
    的工作﹐同時(shí)也能提供備援服務(wù)。
    [color="#000088"]設(shè)定 forwarder
    我們除了能夠用 slave 來分擔(dān) master 工作﹑減少網(wǎng)路流量之外﹐還可以透過另外一種 DNS 機(jī)制來減低網(wǎng)路流量的﹐那就是 forwarder 設(shè)定了。
    所謂的 forwarder ﹐就是當(dāng)某一臺(tái) NS 主機(jī)遇到非本機(jī)負(fù)責(zé)的
    zone ( slave zone 也屬於本機(jī)負(fù)責(zé)的範(fàn)圍) 之查詢請求的時(shí)候﹐將不直接向 root zone 查詢而把請求轉(zhuǎn)交給指定的
    forwarder (一臺(tái)或多臺(tái)) 主機(jī)代為查詢。如果您不了解 DNS 的查詢模式﹐那您很難理解這個(gè) forwarder 的意義和好處。
    我們知道﹐當(dāng) NS 主機(jī)在接到 client
    的查詢的時(shí)候﹐首先會(huì)檢查這個(gè)查詢是否屬於本機(jī)管轄﹐否則將轉(zhuǎn)向 root zone 再逐級的查詢下去﹐最後將結(jié)果告訴 client
    。而在這個(gè)過程之中﹐NS 主機(jī)還會(huì)將每一筆結(jié)果存放到 cache 中。這樣﹐只要 cache 中的 TTL
    沒過期的話﹐在下次遇到同樣查詢的時(shí)候﹐就可以直接將結(jié)果回應(yīng)給 client 了﹐而無需再重複上次的查詢流程。如果 NS 上面指定了
    forwarder﹐那這個(gè) NS 發(fā)現(xiàn) cache 沒有記錄的話﹐將不向 root 查詢﹐而是將自己扮成一個(gè) client﹐向
    forwarder 送出同樣的請求﹐然後等待查詢結(jié)果﹔而逐級往下查詢的動(dòng)作﹐則交由 forwarder 負(fù)責(zé)﹐NS
    自己就輕鬆多了。但無論這個(gè)結(jié)果是自己直接查詢得來的﹐還是 forwarder 送回來的﹐NS 都會(huì)保存一份資料在 cache
    中。這樣﹐其後的相同查詢就快多了﹐這對於 NS 所服務(wù)的 client 而言更是有效率得多。
    但是﹐假如您仔細(xì)研究一下這個(gè) forwarder
    機(jī)制﹐您會(huì)發(fā)現(xiàn)它的好處並非僅是上面所提到的效能提昇﹐而且﹐對於整個(gè)網(wǎng)路流量(尤其是對外的流量)也有非常正面的幫助。比方說﹐您的內(nèi)部網(wǎng)路需要
    10 臺(tái) DNS 來提供服務(wù)﹐您只需在某一臺(tái)能直接與外界溝通的電腦上架設(shè) DNS 服務(wù)﹐然後將其它內(nèi)部 NS 的 forwarder
    指向該主機(jī)就行了。這樣﹐本來需要 10 次的 root 查詢﹐在 forwarders 的機(jī)制下﹐就只需 1
    次而已﹗連同下層的往返查詢來計(jì)算的話﹐總體上所省下的對外查詢就更多了~~ 如果再加上 cache 的效能﹐forwarder 所降低的 DNS
    流量是非常顯著的。
    事實(shí)上﹐forwarder
    在我們的實(shí)際應(yīng)用中也很常見﹐例如﹐我們只要將 forwarder 設(shè)定為 ISP 的 DNS ﹐那麼﹐我們的 NS 就無需直接向 root
    查詢了﹔又因?yàn)?ISP 上的 DNS 也有 cache 的關(guān)係﹐所以我們的 NS 所獲得的查詢結(jié)果﹐也比直接向 root 查詢來得要快。
    如果您打算使用 forwarder 的話﹐您可以在 /etc/named 的 options { } 裡面加入這樣的句子﹕
            forward first;
            forwarders {        // 別漏了最後的 s ﹗
                    139.175.10.20;
                    168.95.1.1;
            };
    您或許從上面的設(shè)得知的這臺(tái) NS 主要是對外連線的﹐假如您的主機(jī)是內(nèi)部的其它 NS﹐那就集中指向?qū)ν獾?NS 就好了。
    然而﹐上面的設(shè)定由於是在 options 裡面設(shè)定的緣故﹐這樣會(huì)讓所有非本機(jī)的查詢都轉(zhuǎn)向 forwarder 。假如您不想這樣做﹐而只是針對個(gè)別的 zone 設(shè)定 forwarder 的話﹐那您也可以這樣設(shè)定﹕
    zone "siyongc.domain" IN {
            type forward;
            forwarders { 192.168.100.23; 10.0.1.130; };
    };
    這樣﹐在這臺(tái) NS 主機(jī)上面﹐所有關(guān)於 siyongc.domain 的查詢﹐都將轉(zhuǎn)交到 192.168.100.23 或 10.0.1.130 那邊去。
    [color="#000088"]設(shè)定子網(wǎng)域授權(quán)
    到這裡﹐您所需要具備的 DNS
    技巧相信已經(jīng)足夠應(yīng)付普通網(wǎng)路的需要了。但如果您的網(wǎng)路非常龐大﹐而且 DNS 系統(tǒng)比較複雜﹐或是您有興趣知道 Internet 上是如何進(jìn)行
    DNS 授權(quán)的話﹐那您或許需要了解一下 DNS 的子網(wǎng)域 (sub zone) 授權(quán)設(shè)定。
    這個(gè)問題不如用實(shí)際的例子來說明好了。正如您從本章所看到的範(fàn)例﹐目前我在 rh71
    上面已經(jīng)設(shè)定有兩個(gè) domain 的 zone ﹕siyongc.domain 和 dmz.domain 。假設(shè)我現(xiàn)在要在
    siyongc.domain 分出一個(gè) sub-zone﹐稱為 home.siyongc.domain ﹐同時(shí)將這個(gè) sub-zone
    授權(quán)給一臺(tái)叫 diamond 的主機(jī)來管理﹔目前 diamond 上面有兩張網(wǎng)路卡﹕192.168.100.26 和 192.168.2.1
    ﹐而 home 這個(gè) sub-zone 需要管理的 DNS 除了 diamond 本身外﹐還有 pc100 到 pc200 ( IP 範(fàn)圍從
    192.168.2.100 到 192.168.2.200 之間) 等主機(jī)﹐他們都是由 DHCP 發(fā)放的。當(dāng)然了﹐底層的網(wǎng)路連接﹐例如
    hub﹑路由﹑防火牆﹑等等﹐都已經(jīng)設(shè)定好了。那麼﹐我們要如何進(jìn)行呢﹖
    首先﹐我需要修改 rh71 上的 /var/named/siyongc.domain 擋案﹐將 home 授權(quán)給 diamond.home.siyongc.domain 這臺(tái) NS 來管理﹐您只需在記錄檔後面增加這些句子就可以了﹕
    ;; -- sub zones --
    $ORIGIN home
    @       IN  NS     diamond.home.siyongc.domain.
    diamond IN  A 192.168.2.1

    上面我用一個(gè) $ORIGIN 來宣告一個(gè)屬於 siyongc.domain 範(fàn)圍內(nèi)的 sub-zone 叫 home (如果改用帶小數(shù)點(diǎn)的 FQDN 的話﹐則寫成 home.siyongc.domain.
    )﹐以及負(fù)責(zé)這個(gè) sub-zone 的 NS 主機(jī)﹐還有 NS 主機(jī)的 IP 位址所在。這裡的 NS
    記錄就是用來授權(quán)用的了﹗目前我只授權(quán)給單一一臺(tái) NS 而已﹐如果您喜歡﹐那您可以授權(quán)多臺(tái) NS 主機(jī)。事實(shí)上﹐當(dāng)您在網(wǎng)路上註冊 domain
    的時(shí)候﹐他們也是在上游(如 com. 或 com.tw. ) 那邊幫您設(shè)定 NS 記錄和 NS 主機(jī)的 A 記錄而已~~~
    Tips﹕假如您不使用 $ORIGIN 的話﹐那可以取消這行﹐然後將 @ 改為 home ﹐以及將 diamond 改為 diamond.home 就可以了(註﹕兩個(gè)記錄名稱都沒有小數(shù)點(diǎn)﹗)。
    接下來的設(shè)定﹐需要轉(zhuǎn)到 diamond 上面進(jìn)行。首先﹐修改 /etc/named.conf 檔案﹐增加如下數(shù)行﹕
    zone "siyongc.domain" IN {                // 上一級區(qū)域設(shè)定
            type forward;
            forwarders { 192.168.100.23; };
    };
    zone "home.siyongc.domain" IN {        // 本機(jī)管轄區(qū)域設(shè)定
            type master;
            file "home.siyongc.domain";
    };
    這裡﹐您或許發(fā)現(xiàn)我用 forwarder 將上游的查詢轉(zhuǎn)向正確的位置(當(dāng)然﹐您直接在
    options 裡面指定 forwarders 也可以)﹐您應(yīng)該知道這樣做的好處了吧﹖除了無需繞到 root zone
    往下查詢下來之外﹐更重要的原因是﹕這個(gè) sub-zone 主機(jī)和上游主機(jī)不是同一臺(tái) NS ﹐除非這兩臺(tái)主機(jī)同時(shí)是 internet 的合法
    IP 且經(jīng)過註冊(換句話說﹕父網(wǎng)的 NS 主機(jī)可以從 root zone 查詢下來)﹐否則的話﹐它就查詢不到其它 sub-zone
    的記錄了﹗除了用 forwarder ﹐另外還有一個(gè)方法是﹕就是架設(shè) slave 主機(jī)以獲得上游的 zone
    資料。不管用哪一種方法﹐如果您不能查詢到上游 NS 的話﹐您就沒辦法查詢其他 sub-zones 了。
    除此之外﹐我們還必須建立 /var/named/home.siyongc.domain 這個(gè)檔案﹐內(nèi)容如下﹕
    $TTL 86400
    $ORIGIN home.siyongc.domain.
    @ IN  SOA  diamond.home.siyongc.domain. root.diamond.home.siyongc.domain. (
        2001111701 28800 14400 3600000 86400 )
            IN  NS     diamond.home.siyongc.domain.
       600  IN  MX 10  diamond.home.siyongc.domain.
    ;; -- servers --
    diamond IN A 192.168.2.1
            IN  MX 0  diamond.home.siyongc.domain.
    ;; -- workstations --
    $GENERATE 100-200 pc$ A 192.168.2.$
    在這裡﹐我首先將 MX 的 TTL 降為 10 分鐘﹐因?yàn)槲夷壳斑不很確定這個(gè)
    sub-zone 的郵件是否由 diamond 來管。如果不增加 600 這個(gè)欄位的話﹐那麼 TTL 會(huì)以前面的 $TTL
    值為準(zhǔn)﹐也就是一天。然則﹐一旦有別的 DNS 查詢過這個(gè) MX 記錄﹐那麼這個(gè)記錄會(huì)在對方的 cache 中存在一天時(shí)間。假如我日後修改 MX
    記錄的話﹐那我很可能要等一天之後﹐才能讓別的 DNS 查詢到新的設(shè)定值。
    Tips﹕ 事實(shí)上﹐在您進(jìn)行任何 DNS 記錄的修改﹐都必須認(rèn)識(shí)到 TTL 的重要性以及它可能產(chǎn)生的影響﹐這點(diǎn)﹐我在本章最後再談。
    然而﹐在這個(gè)檔案中﹐您首次接觸到 $GENERATE 這個(gè)選項(xiàng)。如果您有寫過 shell script﹐或是具有“變數(shù) (variable) ”概念的話﹐這行一點(diǎn)都不難理解﹕
  • 首先﹐我用 $GENERATE 產(chǎn)生一段數(shù)值範(fàn)圍﹐您可以將之當(dāng)成一個(gè)變數(shù)陣列( array )。注意﹕這段數(shù)值並不能直接用來作記錄項(xiàng)﹔
  • 然後﹐在這個(gè)句子後面的“ $ ”符號就是變數(shù)陣列裡面的值(還記得 for 迴圈嗎﹖如果忘記了﹐請回去 system 系列那邊補(bǔ)習(xí)
    shell
    的知識(shí))﹔
  • 其後﹐我所定義的 pc$ 才是記錄項(xiàng)名稱的開始﹕它的意思就是定義一個(gè) pcXXX 的名稱﹐而 XXX 的值就是 $ 。
  • 那後面的 A 呢﹖您應(yīng)該知道什麼是 A 記錄類別了吧﹖(不過﹐我覺得奇怪﹐這個(gè)版本竟不接受“ IN  A ”這樣的設(shè)定﹗不知道新版有沒有解決了﹖)
  • 同樣道理﹐192.168.2.$ 的那個(gè) $ ﹐和 PC$ 那個(gè) $ 是同一樣的值。
    不難理解吧﹖換而言之﹐如果您不使用 $GENERATE 的話﹐那就為 pc100 到 pc200 這 100 臺(tái)主機(jī)設(shè)定 100 行 A 記錄就是了。那麼﹐請問﹕您願(yuàn)意用那個(gè)方法呢﹖ ^_^
    註﹕假如您已經(jīng)在 Internet 上註冊了一個(gè)合法的 domain
    ﹐那麼您在這個(gè) domain 下面切分出去的 sub-zone 就無須再註冊了。因?yàn)槟?domain 所使用的 zone
    已經(jīng)獲得授權(quán)﹐並且也有自己的 SOA ﹐那麼其下要再授權(quán)出多少個(gè) sub-zone﹐或往下授權(quán)多少層﹐完全由您自己作主。
    [color="#000088"]設(shè)定子網(wǎng)反解授權(quán)
    好了﹐剛纔介紹的 sub-zone
    授權(quán)﹐是屬於正解部份的﹐那麼反解又如何呢﹖通常來說﹐如果您獲得的 IP 是一整段 class (或 A 或 B 或 C )
    的話﹐在反解設(shè)定上也不會(huì)太難就是了。我相信聰明的您一定已經(jīng)知道如何設(shè)定吧﹖(前面不是設(shè)定過了嗎﹖)
    如果您真真正正了解 IP 和 Net mask
    的關(guān)係﹐那我這裡要出一道難題了﹕我在我的網(wǎng)路設(shè)定中﹐10.0.1.0 這個(gè)網(wǎng)路實(shí)際上借用了 3 個(gè) bit 來切割成 8 個(gè)子網(wǎng)路。而我將這臺(tái)
    rh71 上其中一個(gè)界面分配到 sub-net ID 為‘100’的這個(gè)子網(wǎng)中﹐也就是說﹐實(shí)際的 Net ID
    應(yīng)該是‘10.0.1.128’﹔而另外一個(gè)界面則分配在 10.0.1.0/27 這個(gè)子網(wǎng)路中。
    在前面﹐我們已經(jīng)設(shè)定過 0.1.10.in-addr.arpa
    的反解了﹐但那次只是單純的為整個(gè) C Class 做反解﹐事實(shí)上並沒考慮到 sub-net
    的問題,F(xiàn)在我打算將這個(gè)網(wǎng)路的反解再進(jìn)行子網(wǎng)路的授權(quán)設(shè)定。我暫時(shí)保留 10.1.0 這個(gè)‘父網(wǎng)’的反解﹐然後將 128 這個(gè)子網(wǎng)的反解授權(quán)給
    10.0.1.130 ( lp64 ) 上面進(jìn)行(至於其他網(wǎng)暫時(shí)不設(shè)定了﹐反正只要會(huì)了設(shè)定其中的一個(gè)﹐就能舉一反三)。
    Tips﹕對於切割子網(wǎng)的 DNS 反解設(shè)定﹐是非常難懂的﹐您一定要對 IP 位址劃分有很清晰的了解﹐要不然﹐請您先搞定 IP 的 subneting 再回來(可參考“學(xué)習(xí)網(wǎng)路”中的 “
    IP 位址
    ”一文)。在以後的敘述裡﹐請務(wù)必留神﹗如果您不想弄那麼複雜﹐最簡單莫過於在“父網(wǎng)”上面做好所有子網(wǎng)的記錄設(shè)定(像是請 ISP 那邊幫忙設(shè)定反解一樣)。但問題是﹐如果子網(wǎng)那裡要進(jìn)行變更﹐就一定要?jiǎng)跓┥霞壘W(wǎng)路管理員﹐網(wǎng)路的靈活性當(dāng)然就大打折扣了。
    或許﹐在一開始弄 DNS 的時(shí)候就把子網(wǎng)帶進(jìn)來﹐會(huì)顯得過於艱難。我這裡建議您大可先將關(guān)於子網(wǎng)的部份
    略過
    ﹐等您對 named 有一定的經(jīng)驗(yàn)了﹐隨時(shí)歡迎回來再看﹐也很歡迎您
    [email=netman%3cnetman@study-area.org%3e]來信[/email]
    和網(wǎng)中人討論心得﹗
    無論如何﹐我先得在 rh7.1 上面確定 /etc/named.conf 這個(gè)檔案有關(guān)於‘父網(wǎng)’的設(shè)定﹕﹕
    zone "1.0.10.in-addr.arpa" IN {
            type master;       
            file "10.0.1.rev";
    };
    事實(shí)上﹐上面的內(nèi)容和我們以前的設(shè)定沒什麼不一樣﹐您只需確定它有這個(gè)設(shè)定就行了。然而﹐原本的 /var/named/10.0.1.rev 卻必須修改一下﹐使之變成如下內(nèi)容﹕
    $TTL    86400
    $ORIGIN 1.0.10.in-addr.arpa.        ; 宣告當(dāng)前網(wǎng)路(父網(wǎng))反解
    @  IN  SOA  rh71.siyongc.domain. root.rh71.siyongc.domain. (
                2001111701 28800 14400 3600000 86400 )
       IN  NS   rh71.siyongc.domain.
    ; 將 128 這個(gè)子網(wǎng)授權(quán)出去﹕
    sub-128 IN  NS  lp64.dmz.domain.
    ; 以 $GENERATE 的方式﹐建立 CNAME ﹐將查詢轉(zhuǎn)往子網(wǎng)﹕
    $GENERATE 128-159 $ CNAME $.sub-128
    在這個(gè)特殊的“切割子網(wǎng)”例子中﹐其中最關(guān)鍵的設(shè)定是 CNAME
    的設(shè)定﹐如果您沒忘記我前面是如何解釋 CNAME 的話﹐您會(huì)知道凡是查詢 CNAME 左邊的記錄﹐就轉(zhuǎn)到 CNAME
    右邊再查一次。這裡﹐我們用 $GENERATE 的方式將 128-159 這段記錄用 CNAME 轉(zhuǎn)向 sub-128 這個(gè)子網(wǎng)查詢。
    Tips﹕事實(shí)上﹐這個(gè)子網(wǎng)名稱在 DNS 系統(tǒng)裡面可以隨便定義﹐比方說﹐有些人喜歡用 mask bit 的數(shù)目來定義﹐那就可以寫成 128-27 ﹔當(dāng)然﹐如果您喜歡用 IP 範(fàn)圍來定義也可以﹕128-159 。如何定義沒關(guān)係﹐只要不混亂就行。
    因?yàn)?128 至 159 這段 IP 實(shí)際上是在子網(wǎng) 10.0.1.128
    裡面的範(fàn)圍(這段現(xiàn)已授權(quán)出去﹐但您不能在 ineternet 上面查詢 203.30.35.128.134 這樣的五組數(shù)字的 IP
    格式)﹐當(dāng)人們要查詢所有以 10.0.1 開頭的 IP 的時(shí)候﹐都會(huì)先向 1.0.10.in-addr.arpa. 的 NS
    查詢﹐也就是目前這臺(tái)機(jī)器﹔然後再透過 CNAME 將查詢轉(zhuǎn)向其子網(wǎng)路 sub-128.1.0.10.in-addr.arpa.
    進(jìn)行查詢﹐直至找到 128 至 159 之間的 PTR 記錄為止。
    Tips﹕在 A 和 B class 的子網(wǎng)授權(quán)設(shè)定中﹐只要不超過 24bit mask 且使用完整 otec 的話﹐應(yīng)該無需使用 CNAME﹐直接為下一個(gè) otec 進(jìn)行 NS 授權(quán)就行了。
    在上例中的最後一行﹐我將 sub-128 這個(gè)自己定義的子網(wǎng)記錄項(xiàng)﹐以 NS 授權(quán)給 “l(fā)p64.dmz.domain.”來負(fù)責(zé)。而至於 lp64.dmz.domain 的 IP 在哪裡呢﹖那就透過正解查詢來獲得了﹐我們無需擔(dān)心這個(gè)﹐除非解那邊沒設(shè)定起來。
    接下來﹐讓我們轉(zhuǎn)到 sub-128.1.0.10.in-addr.arpa. 的 NS ﹐也就是 lp64 這臺(tái)機(jī)器上面。首先﹐需要修改 /etc/named.conf 檔案﹐讓 named 知道 sub-128 目前由它來負(fù)責(zé)﹕
    zone "1.0.10.in-addr.arpa" {
            type forward;
            forwarders { 192.168.100.23; };
    };
    zone "sub-128.1.0.10.in-addr.arpa" {
            type master;
            file "10.0.1.128.rev";
    };
    這裡的 forwarder 之作用與前面介紹的 sub-zone 授權(quán)時(shí)的設(shè)定一樣﹕如果您不能查詢到父網(wǎng)的 NS 的話﹐您就沒辦法查詢其他子網(wǎng)路。
    當(dāng)我們完成 named.conf 的設(shè)定之後﹐還必須在 /var/named 目錄下面建立相應(yīng)的檔案﹐也就是 10.0.1.128.rev 這個(gè)檔﹕
    $TTL 86400
    $ORIGIN sub-128.1.0.10.in-addr.arpa.                ; 關(guān)於當(dāng)前子網(wǎng)的設(shè)定
    @  IN  SOA  lp64.dmz.domain. root.lp64.dmz.domain. (
                2001111701 28800 14400 3600000 86400 )
    @  IN  NS   lp64.dmz.domain.                ; 這應(yīng)該和父網(wǎng)指定的一致
    ; 固定 IP 的反解﹕
    129  IN PTR dialser.dmz.domain.
    130  IN PTR lp64.dmz.domain.
    131  IN PTR rh71.dmz.domain.
    ; 撥接主機(jī)的反解﹕
    $GENERATE 132-155 $ PTR dialup-pc$.dmz.domain.
    在當(dāng)前的 Internet 環(huán)境來說﹐能順利申請到完整的一組 class IP
    的情況實(shí)在非常少見了。這時(shí)候您很可能要需要上游 ISP
    幫您做反解﹐要驚動(dòng)他們是在所難免的。如果他們肯受權(quán)下來﹐那麼您自己的設(shè)計(jì)彈性就比較高﹐日後要修改也容易得多。但如果上游沒有受權(quán)的話﹐您可千萬不要
    越俎代庖﹐設(shè)了也等於白設(shè)﹕因?yàn)槟?NS 並沒有經(jīng)過授權(quán)﹐別人是不能從 root zone 反查詢得到的。而且﹐更嚴(yán)重的是﹕如果您自己將整個(gè)
    C Class 的反解私自設(shè)定起來的話﹐由於沒辦法知道除了您這個(gè) subent 之外的其他 subnet
    的資訊﹐也就沒辦法設(shè)定。這樣結(jié)果將會(huì)是﹕如果您不設(shè)﹐或許可以透過 ISP 查詢到它們﹔如果設(shè)了反而查不到﹗
    但是﹐如果在上游沒有授權(quán)的情況之下﹐您日後的每次修改﹐都必須要通知上游﹐才能保持資料的準(zhǔn)確性﹐卻是十分的不方便。下面的這個(gè)方法是是一個(gè)折衷的辦法﹐您只需到上游註冊一次(如果上游不同意﹐請努力說服他們)﹐日後的變動(dòng)則完全看您自己的意思了﹕
    假設(shè)您是一個(gè) ADSL 的用戶﹐獲得 5 個(gè)可用 IP﹐分別從 211.2.3.113 到 211.2.3.118﹔同時(shí)﹐您為您目前的 domain 註冊為 my.domain。這樣﹐您首先要到上游完成反解的註冊﹐這樣設(shè)就可以了﹕
    $ORIGIN 3.2.211.in-addr.arpa.
    ......
    114        IN        CNAME                114.my.domain.
    115        IN        CNAME                115.my.domain.
    116        IN        CNAME                116.my.domain.
    117        IN        CNAME                117.my.domain.
    118        IN        CNAME                118.my.domain.
    ......
    然後您也無需另外設(shè)定反解﹐全部都在 my.domain 的記錄檔上面設(shè)就可以了﹕
    ......
    $ORIGIN my.domain.
    114        IN        PTR        dns.my.domain.
    dns        IN        A        211.2.3.114
    115        IN        PTR        www.my.domain.
    www        IN        A        211.2.3.115
    116        IN        PTR        ftp.my.domain.
    ftp        IN        A        211.2.3.116
    117        IN        PTR        pop.my.domain.
    pop        IN        A        211.2.3.117
    118        IN        PTR        smtp.my.domain.
    smtp        IN        A        211.2.3.118
    ......
    照這樣看來應(yīng)該沒什麼問題了。假如您對子網(wǎng)劃分有不理解的地方﹐歡迎參考一篇我與網(wǎng)友的
    討論信件
    (注意﹕內(nèi)容是引用舊版的文章﹐所以設(shè)定上和目前的方法有所不同﹐但原理還是一樣的)。
    許多人都覺得﹕我沒有設(shè)定反解﹑ISP 那邊也不願(yuàn)意幫忙設(shè)定﹐我的 DNS 還不是照常工作﹗那麼究竟什麼時(shí)候才會(huì)用到反解呢﹖如果不設(shè)定反解有什麼後果呢﹖嗯~~ 如果有這個(gè)疑問的話﹐我建議您先讀讀如下的文章﹐相信您就知道反解的重要性在哪裡了﹕
    reverse domain 的使用時(shí)機(jī)
    另外﹐如果 DNS 授權(quán)有誤﹐則很容易做成 lame server 的問題。發(fā)生這問題的原因是﹕從 DNS 系統(tǒng)上查詢某一個(gè)名稱的時(shí)候﹐獲得一個(gè) NS 資訊﹐然後向那個(gè) NS 進(jìn)行查詢的時(shí)候卻得不到結(jié)果。您可以參考下面這篇文章認(rèn)識(shí)問題產(chǎn)生的理論﹐然後進(jìn)行修正﹕
    DNS/bind-4.9.x Lame Server 訊息所代表的意義 ( 理論篇 )
    不過﹐如果 lame server 是由於別人亂設(shè)而引起的話﹐那您只能設(shè)法與對方的管理原取得聯(lián)繫﹐然後請對方修改了。
    [color="#000088"]關(guān)於 DNS 的安全問題
    DNS 系統(tǒng)在網(wǎng)路溝通上面提供了非常便利的途徑﹐一個(gè)設(shè)定完整的 DNS 系統(tǒng)﹐無論在管理或除錯(cuò)方面都是非常有效的。然而﹐在許多網(wǎng)路入侵案例中﹐往往因?yàn)?DNS 提供的信息過多﹐而讓入侵者省卻了許多步驟和時(shí)間﹐這也增加了對入侵行為的偵察和預(yù)警的難度。
    所以﹐假如您同時(shí)需要為內(nèi)部和外部網(wǎng)路提供 DNS 服務(wù)﹑而又有條件的話﹐最好設(shè)定多臺(tái)
    DNS 伺服器﹐分別對內(nèi)和對外提供服務(wù)。在所有這些對外服務(wù)的機(jī)器上﹐我們只設(shè)定最少的必須記錄就可以了﹐千萬不要把 HINFO
    等一些關(guān)於主機(jī)和網(wǎng)路環(huán)境的記錄寫進(jìn)去。同時(shí)﹐任何不必要對外提供的 IP
    和主機(jī)記錄﹐一概刪除就是了。而其它的為信任網(wǎng)路提供服務(wù)的主機(jī)﹐則無論如何也不要讓過多的 DNS 信息流出
    internet。您甚至可以通過火牆過濾來保護(hù)內(nèi)部的 DNS 服務(wù)查詢。
    為了獲得更好的安全效果﹐您可以在 /etc/named.conf 檔案中設(shè)定一些限制﹐讓 DNS 僅對那些信任的網(wǎng)路或主機(jī)提供服務(wù)﹐或是擋掉來自不信任主機(jī)的查詢。下面﹐我提供一個(gè)安全設(shè)定的範(fàn)例給大家參考一下﹕
    //---File: /etc/named.conf
    //
    //---首先定義各安全群組---//
    acl LOCALHOST {
            127.0.0.0/8;
    };
    acl DMZ_net {
            10.0.1.128/27;
    };
    acl TRUSTED_net {
            192.168.100.0/24;
            192.168.2.0/24;
    };
    acl TRUSTED_host {
            192.168.100.26/32;
            10.0.1.130/32;
            10.0.1.161/32;
    };
    acl BAD_Guys {
            38.38.38.38;
            44.44.44.44;
            119.119.119.119;
    };  //-注﹕以上 ip 僅作例子 :-)﹗-//
    //---然後在 options 中設(shè)定預(yù)設(shè)原則---//
    options {
            directory "/var/named";
            forward first;
            forwarders {
                    139.175.10.20;
                    168.95.1.1;
            };
            allow-update { none; };
            allow-transfer { none; };
            allow-query { any; };
            blackhole { BAD_Guys; };                           
    };
    //---在各區(qū)域中另行設(shè)定區(qū)屬安全原則---//
    zone "." {
            type hint;
            file "named.ca";
    };
    zone "localhost" IN {
            type master;
            file "localhost.zone";
    };
    zone "0.0.127.in-addr.arpa" IN {
            type master;
            file "named.local";
    //--- 註﹕上兩個(gè) zone 原本有 update 限制的﹐
    //--- 但由於已經(jīng)在 options 中限制過了﹐故不重複。
    zone "100.168.192.in-addr.arpa" {
            type master;
            file "192.168.100.rev";
            allow-query { LOCALHOST; DMZ_net; TRUSTED_net; };
            allow-transfer { TRUSTED_host; };
            notify yes;
            also-notify { 10.0.1.130;  192.168.100.26; };
    };
    zone "1.0.10.in-addr.arpa" {
            type master;
            file "10.0.1.rev";
            allow-query { LOCALHOST; DMZ_net; TRUSTED_net; };
            allow-transfer { TRUSTED_host; };
            notify yes;
            also-notify { 10.0.1.130; 10.0.1.161;  };
    };
    zone "128.1.0.10.in-addr.arpa" {
            type slave;
            file "slave.10.0.1.128";
            allow-query { LOCALHOST; DMZ_net; TRUSTED_net; };
    };
    zone "siyongc.domain" {
            type master;
            file "siyongc.domain";
            allow-query { LOCALHOST; DMZ_net; TRUSTED_net; };
            allow-transfer { TRUSTED_host; };
            notify yes;
            also-notify {
                    192.168.100.26;
                    10.0.1.130;
            };
            //--- 如果您有設(shè)定 dynamic dns 或是 samba 更新﹐請開放 update 。
            allow-update { LOCALHOST; TRUSTED_net; };
    };
    zone "home.siyongc.domain" in {       
            type slave;       
            masters { 192.168.100.26; };
            file "slave.home.siyongc.domain";
            allow-query { LOCALHOST; DMZ_net; TRUSTED_net; };
    };
    在設(shè)定 DNS 的安全原則的時(shí)候﹐有些問題您必須注意﹕

    • 如果 client (包括 localhost ) 如果不在 allow-query 範(fàn)圍內(nèi)的話﹐將不能查詢該區(qū)域的任何資訊。
    • 當(dāng)這一個(gè)區(qū)域作為 master 且有其它 slave 指向它的時(shí)候﹐slave 主機(jī)必須同時(shí)被包括在 allow-query 和 allow-transfer 設(shè)定中才可以完成區(qū)域轉(zhuǎn)移。
    • 那些不在 allow-query 設(shè)定當(dāng)中的主機(jī)﹐雖然不能夠直接將 server 指向這臺(tái) DNS 來查詢所在區(qū)域。然而﹐如果對方先將 server 指向另一臺(tái) DNS 主機(jī)﹐且該主機(jī)是屬於 allow-query 設(shè)定之中的話﹐也可以對該區(qū)域進(jìn)行查詢。
      例如﹐如果在 zone "siyongc.domain" 當(dāng)中允許
      DMZ_net 的查詢。雖然從外面的主機(jī)不能直接查詢這個(gè) zone ﹐但只要對方將 server 指向 DMZ_net 其中任一臺(tái) DNS
      主機(jī)﹐而該主機(jī)的 allow-query 可以讓其通過的話﹐那他們也就可以查詢 siyongc.domain 了。
    • 實(shí)質(zhì)上﹐also-notify 並不能限制區(qū)域轉(zhuǎn)移的進(jìn)行﹐它只不過可以讓 master 通知其中的 slave 主機(jī)罷了。任何一臺(tái) DNS﹐只要通過了 allow-transfer 和 allow-query 檢查﹐就可以用進(jìn)行區(qū)域轉(zhuǎn)移了。
    • 關(guān)於 allow-update 的限制﹐並非是說在 slave 上允許 master 將資料同步過來﹐而是針對動(dòng)態(tài) DNS 協(xié)定所進(jìn)行的限制。

    [color="#000088"]一些注意之處
    對於剛開始接觸 DNS
    的朋友來說﹐常常會(huì)“硬性的”將反解和正解聯(lián)繫起來。其實(shí)在實(shí)際的設(shè)定中是非常多樣化的﹐反解和正解在許多情形下未必是一致對應(yīng)的。比如我有一組
    192.168.100.* 的 C Class IP ﹐我並非只能分配給 siyongc.domain 這一個(gè) zone
    。如果我喜歡﹐可以將裡面的 IP 分配給好幾個(gè) zone 來使用。同理﹐我的 siyongc.domain 下面﹐也未必只能用
    192.168.0.* 裡面的 IP﹐事實(shí)上我還可以使用其它的 IP 。很簡單一個(gè)例子是﹕我的 rh71
    這臺(tái)主機(jī)﹐就有三張路卡﹐它們分別屬於不同的 IP 網(wǎng)路﹐但它們可以使用同一個(gè)主機(jī)名稱﹐也就是說﹐您可以為同一個(gè) RR 記錄名稱設(shè)定多個(gè) A
    記錄。
    如果您機(jī)器有多個(gè)名稱的話﹐那麼﹐在反解那裡也容許一個(gè) IP 有多個(gè) PTR 記錄的。不過﹐如果您用 nslookup 的正常模式查詢的話﹐會(huì)以 round robind 的形式一次顯示一個(gè)記錄﹐您要經(jīng)過 set type=ptr 之後才可以看到全部記錄。
    每次當(dāng)您修改了 master 機(jī)器上的的內(nèi)容﹐請一定要更新 Serial 號碼﹗同時(shí)﹐在 slave 上面設(shè)定的時(shí)候﹐也不要漏了 masters 的 s 字母﹔同樣﹐設(shè)定 forwarder 的時(shí)候﹐最後也有一個(gè) s 字母~~
    如果您要修改 NS 或 MX 這些敏感性記錄(例如移機(jī)或更換 IP
    )﹐事先請將 TTL 降低﹐然後等上一個(gè) TTL 過期之後再修改﹐並且利用外面的 DNS 來查詢修改結(jié)果。等穩(wěn)定之後才將 TTL
    提高到原來水平。如果記錄資料都很穩(wěn)定﹐不妨將 TTL 提高一點(diǎn)﹐這對於繁忙的系統(tǒng)有所幫助﹐但對於修改則非常不便。所以﹐如何拿捏 TTL
    的水平﹐也是非?季康摹
    老實(shí)說﹐我自己對 DNS 的設(shè)定也是一知半解而已。如果您想看一看正規(guī)的設(shè)定範(fàn)例﹐可以到
    http://dnsrd.nctu.edu.tw/Named-Conf/conf.html
    看看﹔ DNS 的技術(shù)原理則可以參考﹕
    http://turtle.ee.ncku.edu.tw/~tung/dns/
    。另外﹐
    http://www.tp.edu.tw/service/dns0.htm
    這篇相當(dāng)容易上手﹐也建議看看。最後﹐這個(gè)
    http://www.acmebw.com/cats.htm
    網(wǎng)站﹐也有許多 DNS 的問題與解答﹐有問題可以到那裡找找﹐或許答案早在那裡了﹗還有﹐到
    http://www.isc.org/products/BIND/
    這個(gè)網(wǎng)站﹐您可以了解到最新最全面的關(guān)於 BIND 這個(gè)軟體的資訊。
    如果您非常正經(jīng)的想學(xué)習(xí)一下 DNS ﹐有一本 O'reilly 出版的書是非看不可的﹐那本書叫 『 DNS & Bind 』。您最好找最新版的回來看﹐聽說已經(jīng)有第 4 版了。
    假如您發(fā)現(xiàn)我在這裡有什麼失當(dāng)之處﹐
    [email=netman%3cnetman@study-area.org%3e?subject=about%20dns]請您一定要指出[/email]
    ﹐以免誤導(dǎo)觀眾了。謝謝!
                   
                   
                   

    本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/18164/showart_164739.html
  • 您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規(guī)則 發(fā)表回復(fù)

      

    北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年舉報(bào)專區(qū)
    中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
    感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP