| 我們知道電腦網路系統只認識所謂的IP,但是,您可能記得住網路上面所有主機的IP嗎?就鳥哥來說,連自己的主機的IP都記不起來了,怎麼可能連其他的主機IP都記的住!因為,人腦對於數字組成的IP的記憶實在是......不怎麼樣。但是,相對來說,人們對於由文字所組成的主機名稱那可以容易記憶的多了∼所以,才會發展出可以經由主機名稱(hostname)對應到電腦IP的一個模式,這樣我們就可以輕輕鬆鬆的記住主機名稱即可,電腦IP那就交給Domain Name System(DNS)去搞定吧! 那個DNS系統是由柏克萊大學發展的bind這個套件(Berkeley Internet Name Domain)所提供的啦!基本上,DNS最主要的工作就是將Hostname對應到IP這個功能了,不過,要架設一個成功的DNS主機的話,還得要對於DNS的運作很清楚才行啊!否則架設的不對,還反而會造成大家的問題喔!這個章節當中,要學會的資料其實還蠻多的,需要瞭解:什麼是正解、什麼是反解、什麼是Zone、客戶端(Client)是經由什麼咚咚來查詢得到IP的呢?!以及DNS的授權問題等等。哇!趕快清一清腦門,要好好的用功囉!^_^ |
| /etc/hosts:直接在Client端的檔案內輸入主機名稱對應的IP來查詢;DNS系統 :利用額外的DNS服務,讓Client端可以透過名稱解析來取得目的地主機的IP |
| 鳥哥、北區、台南 鳥哥、中區、台南 鳥哥、台北 ...... |


| 名稱 | 代表意義 |
| com | 公司、行號、企業 |
| org | 組織、機構 |
| edu | 教育單位 |
| gov | 政府單位 |
| net | 網路、通訊 |
| mil | 軍事單位 |


[root@linux ~]# rpm -qa | grep bind bind-utils-9.2.4-16.EL4 <==這個是用戶端搜尋主機名稱的相關指令 bind-9.2.4-16.EL4 <==這個才是 DNS 伺服器主程式 bind-chroot-9.2.4-16.EL4 <==將 bind 主程式關在家裡面! ^_^ |
[root@linux ~]# vi /etc/sysconfig/named ROOTDIR=/var/named/chroot |


[root@linux ~]# vi /etc/named.conf
// 雖然 CentOS 將這個檔案放置到 /var/named/chroot/etc 當中,
// 不過他很好心的幫我們作了個連結,所以你還是可以直接編輯這個檔案啦!
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
pid-file "/var/run/named/named.pid";
forward only; //只允許 forward!
forwarders {
168.95.1.1; //我這裡使用 hinet 的 DNS !
139.175.10.20; //這個是 seednet 的 DNS !
};
};
include "/etc/rndc.key";
|
[root@linux ~]# ls -ald /var/named/chroot/var/run/named drwxrwx--- 2 named named 4096 Oct 12 11:48 /var/named/chroot/var/run/named |
[root@linux ~]# /etc/init.d/named start
Starting named: [ OK ]
|
[root@linux ~]# netstat -utln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.254:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
udp 0 0 192.168.1.254:53 0.0.0.0:*
udp 0 0 127.0.0.1:53 0.0.0.0:*
|
[root@linux ~]# tail -n 15 /var/log/messages | grep named
Oct 16 15:08 linux named[76]: starting BIND 9.2.4 -u named -t /var/named/chroot
Oct 16 15:08 linux named[76]: using 1 CPU
Oct 16 15:08 linux named[76]: loading configuration from '/etc/named.conf'
Oct 16 15:08 linux named[76]: listening on IPv4 interface lo, 127.0.0.1#53
Oct 16 15:08 linux named[76]: listening on IPv4 interface eth0, 192.168.1.254#53
Oct 16 15:08 linux named[76]: command channel listening on 127.0.0.1#953
Oct 16 15:08 linux named[76]: command channel listening on ::1#953
Oct 16 15:08 linux named[76]: running
Oct 16 15:08 linux named: named startup succeeded
|
| 作業系統與 IP | 對應之主機名稱 | 說明 |
| OS: Linux IP: 192.168.1.254 | linux.vbird.tsai www.vbird.tsai ftp.vbird.tsai forum.vbird.tsai | 這部是主要的 DNS 伺服器,主要主機名稱為 linux.vbird.tsai ,其他的三部主機名稱為主機別名。 |
| OS: Linux IP: 192.168.1.150 | slave.vbird.tsai | 主要作為 slave DNS 主機, 相關的 slave 設定將在下個小節才會介紹的啦! |
| OS: Windows XP IP: 192.168.1.100 | winxp.vbird.tsai | 某一部主機的 IP 與主機名稱對應 |
| OS: Sun IP: 192.168.1.200 | sun.vbird.tsai | 某一部主機,用來玩的而已! |
[root@linux ~]# vi /etc/named.conf
// 先定義出整個 DNS 伺服器的相關環境,包括查詢、檔案放置目錄等
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
pid-file "/var/run/named/named.pid";
forwarders { 168.95.1.1; 139.175.10.20; };
allow-query { any; }; // 是否允許被查詢?當然要可以被查詢;
allow-transfer { none; }; // 是否允許傳送 zone ,預設不可
};
// 關於 DNS 伺服器的一些加密資料,先忽略過去先!
include "/etc/rndc.key";
// 關於 root (.) 的設定喔:
zone "." {
type hint; // 特殊的類別!專給 root (.) 用的
file "named.root"; // 就是檔名的定義啦!
};
// 關於本機 localhost 的正反解
zone "localhost" {
type master;
file "named.localhost";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.127.0.0";
};
// 這裡規範出我們的 vbird.tsai 領域名
zone "vbird.tsai" {
type master;
file "named.vbird.tsai";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "named.192.168.1";
};
|
| options內的相關參數說明 | |
| 設定值 | 意義 |
| directory | 這個設定值就是在指定你的zone file要放置到哪個目錄啦!非常重要的設定值。與底下zone設定項目的file配合而成完整檔名。 |
| dump-file | 由圖三我們知道DNS伺服器會將搜尋到的主機IP對應資料放置到快取記憶體中,那如果你想要將目前的快取資料記錄下來時,就用這個設定值指定檔案 |
| statistics-file | 我們DNS的一些統計資料,想要列出時就寫入這個設定值指定的檔名內 |
| pid-file | 將named這個程式的PID記錄下來的一個檔案,這個檔案通常可以在named啟動、關閉時提供正確的PID啦! |
| forwarders | 前面談到cache-only的DNS伺服器設定值已經談過了,請前往參考。 |
| allow-query | 是否允許用戶端的查詢。查詢的重點就是讀取資料庫的內容,既然要架設DNS,當然要允許用戶端的查詢啦。內容可以填寫任何來源(any)或IP或網域(IP/netmask)的格式。 |
| allow-transfer | 是否允許slave DNS的整個領域資料的傳送?這個設定值與master/slave DNS伺服器之間的資料庫傳送有關。除非你有slave DNS伺服器,否則這裡不要開放喔! |
| zone內的相關參數說明 | |
| 設定值 | 意義 |
| type | 該zone的類型,主要的類型有:master,slave及hint。其中需要注意最上層的DNS(.)使用的是hint的類型,然後master主機用master啊!slave主機就用slaveㄇㄟ! |
| file | 就是zone file啦!那麼完整的zone file在哪裡啊?在這裡:
/var/named/chroot/var/named/named.root |
| 反解zone | 正解的zone很好理解,反解的zone怎麼那麼奇怪啊?就如同linux.vbird.org要追蹤時是由org->vbird->linux一樣,至於反解則例如192.168.1.1: 192->168->1->1。由於DNS的領域名稱都是由後往前找,且反解是個特殊的領域,所以必需要將IP反過來寫,同時在最後面加上『.in-addr.arpa』來表示反解宣告!所以192.168.1這個zone就得要寫成1.168.192.in-addr.arpa |
[root@linux ~]# vi /var/named/chroot/var/named/named.root ; 抱歉,版權宣告部分先省略∼ . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ;主機名稱或領域名稱 TTL RR 相對應的資料 ; 以下省略 |
[root@linux ~]# vi /var/named/chroot/var/named/named.localhost
; 1. 首先是主機相關的設定
$TTL 600
; 2. 關於 master/slave 的授權內容,如果沒有 slave 主機,依舊要設定喔!
@ IN SOA localhost. root.localhost. (
2006102001 ; Serial 僅作為序號而已
28800 ; Refresh slave 伺服器的更新時間
14400 ; Retry 當 slave 主機更新失敗,多久再重新更新一次
720000 ; Expire 重複 retry 多久後就宣告不治....不再更新
86400 ) ; Minimum 可視為 TTL ,尤其是你沒有設定 $TTL 時
; 3. 本領域的 DNS 伺服器的主機名稱與 IP 的對應
@ IN NS localhost. ; 特別留意最後面的那個小數點!
localhost. IN A 127.0.0.1
; 4. 其他 RR 可以加入的地方。
|
| 關於本領域的一些設定值 | |
| 設定值 | 說明 |
| $TTL | 還記得圖三的流程吧?當有外部DNS伺服器對你的DNS的這個領域進行查詢時,這一筆記錄會放置在對方DNS伺服器內幾秒鐘的意思。 |
| $ORIGIN | 這個設定值可以重新指定zone的定義。在預設的情況下,這個正反解資料庫檔案中的zone是由/etc/named.conf所指定的,就是zone那個參數的功能。不過,這個zone是可以改的,就是用$ORIGIN來修訂就是了。通常這個設定值不會用到的。 |
| 關於master/slave授權方面的設定值 | |
| 符號與RR | 說明 |
| @ | 這個符號代表zone的意思!以上面的named.local來說,這個檔案由/etc/named.conf定義出zone為localhost.,因此在本檔案的@就代表localhost.囉! |
| . | 這個點(.)很重要!因為他代表一個完整主機名稱(FQDN)而不是僅有hostname而已。舉例來說,如果你在本設定檔上面規範一個主機名稱為www時,那部主機的FQDN為www.localhost.如果你寫出www.localhost時,由於末了沒有那個小數點,則zone會主動加入該主機名稱,所以最終的FQDN會變成www.localhost.localhost.喔! |
| SOA | Start of Authority的意思。這個標誌代表著master/slave相關的認證、授權資料。不論你的DNS系統有沒有設定master/slave的架構,都需要含有這個設定才好。SOA後面共帶有三個參數,所以該行為:
|
| DNS自己的領域之名稱解析器 | |
| 符號與RR | 說明 |
| NS | 就是name server的縮寫,這個標誌的參數是:
|
| A | 是正解的符號,參數是:
|
[root@linux ~]# vi /var/named/chroot/var/named/named.vbird.tsai $TTL 600 @ IN SOA linux.vbird.tsai. root.linux ( 2006102001 28800 14400 720000 86400 ) ; 本領域的 DNS 伺服器的主機名稱與 IP 的對應 @ IN NS linux.vbird.tsai. @ IN NS slave.vbird.tsai. linux IN A 192.168.1.254 slave IN A 192.168.1.150 @ IN MX 10 linux ; 其他 RR 可以加入的地方 www IN CNAME linux ftp IN CNAME linux forum IN CNAME linux winxp IN A 192.168.1.100 sun IN A 192.168.1.200 sun IN TXT "The sun solaris OS" sun IN HINFO "Celeron 1G""Solaris 10" |
| 關於正解的其他RR標誌 | |
| 符號與RR | 說明 |
| MX | 就是Mail eXchanger(MX)的簡寫,他的參數是這樣寫的:
如果你不知道如何設定,通常建議你直接設定成你的mail server主機名稱即可 |
| CNAME | 顧名思義,這個標誌在建立『主機別名』的啦!參數為:
|
| TXT | 這個東西在進行『說明』而已!亦即是前面那部主機的一些資訊。特別注意的是,沒事的話,『資訊不要寫得太詳細,有的時候甚至應該要寫些錯誤的訊息!』為什麼呢?如果寫得太詳細的話,那麼那些個cracker不就很簡單的就可以將您的網站資訊取得,並進而入侵了嗎?@_@ |
| HINFO | 這個東西後面接兩個咚咚,第一個接的是硬體的等級,第二個接的則是作業系統,這兩個咚咚最好不要用在公開的DNS主機上面,跟TXT一樣的問題啦!如果要設定的話,最好使用雙引號分隔開來喔! |
[root@linux ~]# vi /var/named/chroot/var/named/named.127.0.0 $TTL 600 @ IN SOA localhost. root.localhost. ( 2006102001 28800 14400 720000 86400 ) ; 本領域的 DNS 伺服器的主機名稱與 IP 的對應 @ IN NS localhost. 1 IN PTR localhost. |
| 關於反解的RR標誌 | |
| 符號與RR | 說明 |
| PTR | Pointer的簡寫,他的參數是這樣寫的:
那麼萬一今天我們規劃的是B Class的zone呢?例如127.0這樣的zone呢?很簡單啦!就填兩個數字即可!也就是0.1囉! 最重要的地方就是:後面的主機盡量使用完整FQDN,亦即加上小數點(.)!為什麼呢?因為反解的zone是0.0.127.in-addr.arpa,所以如果你寫成localhost時,你的這個IP對應的主機名稱將會變成:localhost.0.0.127.in-addr.arpa之類的怪異主機名稱啊! |
[root@linux ~]# vi /var/named/chroot/var/named/named.192.168.1
$TTL 600
@ IN SOA linux.vbird.tsai. root.linux.vbird.tsa. (
2006102001 28800 14400 720000 86400 )
; 本領域的 DNS 伺服器的主機名稱與 IP 的對應
@ IN NS linux.vbird.tsai.
@ IN NS slave.vbird.tsai.
254 IN PTR linux.vbird.tsai.
150 IN PTR slave.vbird.tsai.
; 其他 RR 可以加入的地方。
100 IN PTR winxp.vbird.tsai.
200 IN PTR sun.vbird.tsai.
|
[root@linux ~]# /etc/init.d/named start <==也可能是需要 restart 喔 |
[root@linux ~]# tail -n 20 /var/log/messages | grep named named[28]: starting BIND 9.2.4 -u named -t /var/named/chroot # 由這個說明我們可以知道 chroot 的目錄與 named 啟動的參數等資料 named[28]: using 1 CPU named[28]: loading configuration from '/etc/named.conf' # 由這個說明,可知道主要的設定檔是由哪裡載入的!記得加上 chroot named[28]: listening on IPv4 interface lo, 127.0.0.1#53 named[28]: listening on IPv4 interface eth0, 192.168.1.254#53 named[28]: command channel listening on 127.0.0.1#953 named[28]: command channel listening on ::1#953 # 由這邊可以查出 DNS 相關的服務在哪幾個介面有提供! # 至於那個 command 我們將在後面再繼續說明。 named[28]: zone 0.0.127.in-addr.arpa/IN: loaded serial 2006102001 named[28]: zone 1.168.192.in-addr.arpa/IN: loaded serial 2006102001 named[28]: zone localhost/IN: loaded serial 2006102001 named[28]: zone vbird.tsai/IN: loaded serial 2006102001 # 記得要有這些 loaded serial 的資料,並且不能出現任何錯誤喔! named[28]: zone vbird.tsai/IN: sending notifies (serial 2006102001) named[28]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2006102001) # 這個則是對於外部有其他 slave DNS 時,會發送注意訊息的說明。 |
named: /etc/named.conf:11: missing ';' before '}' # 注意到上面提到的檔案與數字嗎?說明的是 /etc/named.conf 的第 11 行, # 至於錯誤是因為缺少分號 (;) 所致!去修正一下即可。 dns_rdata_fromtext: named.vbird.tsai:5: near eol: unexpected end of input zone vbird.tsai/IN: loading master file named.vbird.tsai: unexpected end of input # 指的是 named.vbird.tsai 的第五行有問題,通常是 SOA 那五個數字沒有完全! # 趕緊去修訂一下即可啊! dns_rdata_fromtext: named.vbird.tsai:12: near 'linux': not a valid number zone vbird.tsai/IN: loading master file named.vbird.tsai: not a valid number # 說明第 12 行在 linux 附近需要有一個合法的數字!趕緊去瞧瞧改改即可! |
[root@linux ~]# vi /etc/named.conf
....前面省略....
zone "vbird.tsai" {
type master;
file "named.vbird.tsai";
allow-transfer { 192.168.1.150; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "named.192.168.1";
allow-transfer { 192.168.1.150; };
};
....後面省略....
|
[root@slave ~]# vi /etc/named.conf
....前面省略....
zone "vbird.tsai" {
type slave;
file "named.vbird.tsai";
masters { 192.168.1.254; };
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "named.192.168.1";
masters { 192.168.1.254; };
};
....後面省略....
|
[root@slave ~]# ls -l /var/named/chroot/var/named -rw-r--r-- 1 root root 229 Oct 18 14:44 named.127.0.0 -rw-r--r-- 1 root root 675 Oct 18 13:44 named.localhost -rw-r--r-- 1 root root 2517 Oct 18 00:34 named.root # 注意,只要三個檔案即可,其他兩個 named.vbird.tsai 與 # named.192.168.1 不可以存在!否則會有問題啊! [root@slave ~]# ls -ld /var/named/chroot/var/named drwxr-x--- 4 named named 4096 Oct 19 01:17 /var/named/chroot/var/named # 注意到,這個目錄的使用者必須要是 named ,然後分數至少得 750 才行! |
[root@slave ~]# /etc/init.d/named start [root@slave ~]# tail -n 20 /var/log/messages zone 1.168.192.in-addr.arpa/IN: transferred serial 2006102001 transfer of '1.168.192.in-addr.arpa/IN' from 192.168.1.254#53: end of transfer zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2006102001) zone vbird.tsai/IN: transferred serial 2006102001 transfer of 'vbird.tsai/IN' from 192.168.1.254#53: end of transfer zone vbird.tsai/IN: sending notifies (serial 2006102001) # 理論上,你應該會看到如上的輸出資訊才對!系統會告知 zone file 的傳輸結果 [root@slave ~]# ls -l /var/named/chroot/var/named -rw-r--r-- 1 root root 229 Oct 18 14:44 named.127.0.0 -rw------- 1 named named 472 Oct 19 01:29 named.192.168.1 -rw-r--r-- 1 root root 675 Oct 18 13:44 named.localhost -rw-r--r-- 1 root root 2517 Oct 18 00:34 named.root -rw------- 1 named named 580 Oct 19 01:29 named.vbird.tsai |
1 dumping master file: tmp-XXXXEnDd9D: open: permission denied 2 transfer of 'vbird.tsai/IN' from 192.168.1.254#53: failed while receiving responses: permission denied 3 transfer of 'vbird.tsai/IN' from 192.168.1.254#53: end of transfer |
[root@linux ~]# vi /etc/nsswitch.conf
hosts: files dns
|
[root@linux ~]# vi /etc/resolv.conf
nameserver 192.168.1.254
nameserver 168.95.1.1
nameserver 139.175.10.20
|
語法: [root@linux ~]# host [-a] [FQDN] [server] [root@linux ~]# host -l [domain] [server] 參數說明: -a :代表列出該主機所有的相關資訊,包括 IP、TTL 等等 -l :若後面接的那個 domain 設定允許 allow-transfer 時,則列出該 domain 所管理的所有主機名稱對應資料! server:這個參數可有可無,當想要利用非 /etc/resolv.conf 內的 DNS 主機 來查詢主機名稱與 IP 的對應時,就可以利用這個參數了! 範例一:強制以 192.168.1.254 這部 DNS 主機來查詢 [root@linux ~]# host www.vbird.tsai 192.168.1.254 Using domain server: Name: 192.168.1.254 Address: 192.168.1.254#53 <==這裡重要!告知這筆記錄是哪部 DNS 伺服器去找的! Aliases: www.vbird.tsai is an alias for linux.vbird.tsai. linux.vbird.tsai has address 192.168.1.254 |
範例二:找出我們自己這個 vbird.tsai 領域的所有主機對應 [root@linux ~]# host -l vbird.tsai 192.168.1.254 Using domain server: Name: 192.168.1.254 Address: 192.168.1.254#53 Aliases: vbird.tsai name server linux.vbird.tsai. vbird.tsai name server slave.vbird.tsai. linux.vbird.tsai has address 192.168.1.254 slave.vbird.tsai has address 192.168.1.150 ....後面省略.... |
[root@linux ~]# host -l yahoo.com Host yahoo.com not found: 5(REFUSED) ; Transfer failed. |
語法: [root@linux ~]# nslookup [FQDN] [server] [root@linux ~]# nslookup 參數說明: 1. 可以直接在 nslookup 加上待查詢的主機名稱或者是 IP ,[server] 可有可無; 2. 如果在 nslookup 後面沒有加上任何主機名稱或 IP ,那將進入 nslookup 的查詢功能 在 nslookup 的查詢功能當中,可以輸入其他參數來進行特殊查詢,例如: set type=any :列出所有的資訊『正解方面設定檔』 set type=mx :列出與 mx 相關的資訊! 範例一:直接搜尋 winxp.vbird.tsai 的 IP 資訊 [root@linux ~]# nslookup winxp.vbird.tsai 192.168.1.254 Server: 192.168.1.254 Address: 192.168.1.254#53 <==同樣的,請注意搜尋的 DNS IP 喔! Name: winxp.vbird.tsai Address: 192.168.1.100 |
[root@linux ~]# nslookup <==進入 nslookup 查詢畫面 > 192.168.1.254 <==執行反解的查詢 > www.vbird.tsai <==執行正解的查詢 # 上面這兩個僅列出正反解的資訊,沒有啥了不起的地方啦! > tw.yahoo.com <==執行非本機上的查詢 Server: 192.168.1.254 Address: 192.168.1.254#53 Non-authoritative answer: # 注意這邊,因為不是自己的資料庫,所以是未認證過的資料(可能是快取) tw.yahoo.com canonical name = tw.yahoo-ap1.akadns.net. tw.yahoo-ap1.akadns.net canonical name = vip1.tw.tpe.yahoo.com. Name: vip1.tw.tpe.yahoo.com Address: 202.43.195.52 > set type=any <==變更查詢,不是僅有 A,全部資訊都列出來 > sun.vbird.tsai Server: 192.168.1.254 Address: 192.168.1.254#53 Name: sun.vbird.tsai Address: 192.168.1.200 sun.vbird.tsai text = "The sun solaris OS" <==看吧!更多資訊跑出來! sun.vbird.tsai hinfo = "Celeron 1G" "Solaris 10" > exit <==離開吧!皮卡丘 |
語法: [root @test root]# dig [@server] [FQDN] [type] 參數說明: @server :如果不想以 /etc/resolv.conf 來作為 DNS 主機,則可在此填入其他的 IP type :預設是查詢 A 標誌,你可以在這裡入其他的標誌,如 mx, ns 等。 此功能亦可使用 [-t type] 來處理。 範例一:查詢 linux.vbird.tsai 吧! [root@linux ~]# dig @192.168.1.254 linux.vbird.tsai ; <<>> DiG 9.2.4 <<>> @192.168.1.254 linux.vbird.tsai ; (1 server found) ;; global options: printcmd ;; Got answer: ;; -;>>HEADER<<- opcode: QUERY, status: NOERROR, id: 8977 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1 ;; QUESTION SECTION: ;linux.vbird.tsai. IN A ;; ANSWER SECTION: linux.vbird.tsai. 600 IN A 192.168.1.254 ;; AUTHORITY SECTION: vbird.tsai. 600 IN NS slave.vbird.tsai. vbird.tsai. 600 IN NS linux.vbird.tsai. ;; ADDITIONAL SECTION: slave.vbird.tsai. 600 IN A 192.168.1.150 ;; Query time: 4 msec ;; SERVER: 192.168.1.254#53(192.168.1.254) ;; WHEN: Thu Oct 19 15:34:23 2006 ;; MSG SIZE rcvd: 100 |
範例二:查詢 vbird.tsai 這個領域的 MX 吧! [root@linux ~]# dig @192.168.1.254 vbird.tsai mx ; <<>> DiG 9.2.4 <<>> @192.168.1.254 vbird.tsai mx ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3390 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;vbird.tsai. IN MX <==瞧!要求的資料不一樣了喔! ;; ANSWER SECTION: vbird.tsai. 600 IN MX 10 linux.vbird.tsai. ;; AUTHORITY SECTION: vbird.tsai. 600 IN NS slave.vbird.tsai. vbird.tsai. 600 IN NS linux.vbird.tsai. ;; ADDITIONAL SECTION: linux.vbird.tsai. 600 IN A 192.168.1.254 slave.vbird.tsai. 600 IN A 192.168.1.150 ;; Query time: 4 msec ;; SERVER: 192.168.1.254#53(192.168.1.254) ;; WHEN: Thu Oct 19 15:45:58 2006 ;; MSG SIZE rcvd: 116 |
[root@linux ~]# whois [domainname] <==注意啊!是 domain 而不是 hostnam
[root@linux ~]# whois redhat.com
Registrant:
Red Hat, Inc.
P.O. Box 13588
Research Triangle Park, NC 27709
US
Domain Name: REDHAT.COM
Administrative Contact, Technical Contact:
Network, Operations noc@REDHAT.COM
Red Hat, Inc.
1801 Varsity Drive
ATTN Domain Administrator
Raleigh, NC 27606
US
919.754.3700 fax: 919-754-3704
Record expires on 25-May-2011.
Record created on 26-May-1994.
Database last updated on 19-Oct-2006 03:58:04 EDT.
Domain servers in listed order:
NS3.REDHAT.COM 66.187.229.10
NS2.REDHAT.COM 66.187.224.210
NS1.REDHAT.COM 66.187.233.210
|
[root@linux ~]# whois vbird.idv.tw
[查詢 whois.twnic.net]
[whois.twnic.net]
Domain Name: vbird.idv.tw
Contact:
Der-Min Tsai
vbird@aerosol.ev.ncku.edu.tw
Record expires on 2008-09-17 (YYYY-MM-DD)
Record created on 2002-09-13 (YYYY-MM-DD)
Registrar: HINET
|
[root@linux ~]# vi /var/named/chroot/var/named/named.vbird.tsai
# 在這個檔案的最下方增加這兩行:
niki IN NS niki.vbird.tsai.
niki IN A 192.168.100.100
|


[root@linux ~]# more /var/log/messages 1 Oct 5 05:02:30 test named[432]: lame server resolving '68.206.244.205. in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 205.244.200.3#53 2 Oct 5 05:02:31 test named[432]: lame server resolving '68.206.244.205. in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 206.105.201.35#53 3 Oct 5 05:02:41 test named[432]: lame server resolving '68.206.244.205. in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 205.244.112.20#53 |
1. 修改 /etc/named.conf [root@linux ~]# vi /etc/named.conf // 加入底下這個參數: logging { category lame-servers { null; }; }; 2. 重新啟動 bind [root@linux ~]# /etc/init.d/named restart |
command channel listening on 127.0.0.1#953 |
couldn't add command channel 127.0.0.1#953: not found |
1. 先建立 rndc key 的相關資料吧!
[root@linux ~]# rndc-confgen
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "aoIyK4uoiR1hEqedk2D2lw==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# 上面的輸出請將他貼到 rndc.conf 檔案當中吧!
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "aoIyK4uoiR1hEqedk2D2lw==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
# 至於上面的 key 及 controls 的項目則貼到 named.conf 當中去!
# 請注意,這個 rndc-confgen 是利用亂數計算出加密的那把 key ,
# 所以每次執行的結果都不一樣。所以上述的資料與你的螢幕會有點不同。
2. 建立 rndc.conf 檔案
[root@linux ~]# vi /etc/rndc.conf
# 在這個檔案當中將原本的資料全部刪除,並將剛剛得到的結果給他貼上去
key "rndc-key" {
algorithm hmac-md5;
secret "aoIyK4uoiR1hEqedk2D2lw==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
[root@linux ~]# chmod 640 /etc/rndc.conf <==必需要設定好權限!
[root@linux ~]# chown root.named /etc/rndc.conf
3. 修改 named.conf
[root@linux ~]# vi /var/named/chroot/etc/named.conf
# 找到如下的這一行:
include "/etc/rndc.key";
# 將上述資料刪除!因為該資料是舊的!然後加入這一段:
key "rndc-key" {
algorithm hmac-md5;
secret "aoIyK4uoiR1hEqedk2D2lw==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
[root@linux ~]# /etc/init.d/named restart
|
[root@linux ~]# rndc
Usage: rndc [-c config] [-s server] [-p port]
[-k key-file ] [-y key] [-V] command
command is one of the following:
reload Reload configuration file and zones.
stats Write server statistics to the statistics file.
dumpdb Dump cache(s) to the dump file (named_dump.db).
flush Flushes all of the server's caches.
status Display status of the server.
# 其他就給他省略啦!請自行輸入這個指令來參考囉!
|
範例一:將目前 DNS 伺服器的狀態顯示出來 [root@linux ~]# rndc status number of zones: 6 <==這部 DNS 管理的 zone 數量 debug level: 0 <==是否具有 debug 及 debug 的等級 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF <==是否將查詢的資料記錄下來? server is up and running <==主機目前正在運作當中 範例二:將目前系統的 DNS 統計資料記錄下來 [root@linux ~]# rndc stats # 此時,預設會在 /var/named/chroot/var/named/data 內產生新檔案,你可以去查閱: [root@linux ~]# cat /var/named/chroot/var/named/data/named_stats.txt +++ Statistics Dump +++ (1161322745) success 22 referral 0 nxrrset 0 nxdomain 3 recursion 6 failure 0 --- Statistics Dump --- (1161322745) 範例三:將目前快取記憶體當中的資料記錄下來 [root@linux ~]# rndc dumpdb # 與 stats 類似,會將 cache 的資料放置成為一個檔案,你可以去查閱: # /var/named/chroot/var/named/data/cache_dump.db |
rndc: connection to remote host closed This may indicate that the remote server is using an older version of the command protocol, this host is not authorized to connect, or the key is invalid. |
[root@linux ~]# dnssec-keygen -a [演算法] -b [密碼長度] -n [類型] 名稱
參數:
-a :後面接的 [type] 為演算方式的意思,主要有 RSAMD5, RSA, DSA, DH
與 HMAC-MD5 等。建議你可以使用常見的 HMAC-MD5 來演算密碼;
-b :你的密碼長度為多少?通常給予 128 位元就可以了;
-n :後面接的則是用戶端能夠更新的類型,主要有底下兩種,建議給 HOST 即可:
ZONE:用戶端可以更新任何標誌及整個 ZONE;
HOST:用戶端僅可以針對他的主機名稱來更新。
[root@linux ~]# mkdir -p /var/named/keys; cd /var/named/keys
[root@linux keys]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST web
Kweb.+157+50096
[root@linux keys]# ls -l K*
-rw------- 1 root root 47 Oct 20 14:20 Kweb.+157+50096.key
-rw------- 1 root root 81 Oct 20 14:20 Kweb.+157+50096.private
# 上面那把是公鑰,下面那把則是私鑰檔案!
[root@linux keys]# cat Kweb.+157+50096.key
web. IN KEY 512 3 157 +j8TSooNNIUPb3OR9Rh53Q==
# 注意到最右邊的那個密碼長度,等一下我們要複製的僅有那個地方!
|
[root@linux ~]# vi /etc/named.conf // 先在任意地方加入這個 Key 的相關密碼資訊! key "web" { algorithm hmac-md5; secret "+j8TSooNNIUPb3OR9Rh53Q=="; }; // 然後將你原本的 zone 加入底下這一段宣示 zone "vbird.tsai" { type master; file "named.vbird.tsai"; allow-transfer { 192.168.1.150; }; update-policy { grant web name web.vbird.tsai. A; }; }; [root@linux ~]# chown named /var/named/chroot/var/named [root@linux ~]# /etc/init.d/named restart |
[root@web ~]# cd /usr/local/ddns [root@web ddns]# nsupdate -k Kweb.+157+50096.key > server 192.168.1.254 > update delete web.vbird.tsai <==刪除原有的 > update add web.vbird.tsai 600 A 192.168.1.222 <==更新到最新的 > send > 最後在此按下 [ctrl]+D 即可 |
[root@web ~]# vi /usr/local/ddns/ddns_update.sh #!/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH # 0. keyin your parameters basedir="/usr/local/ddns" # 基本工作目錄 keyfile="$basedir"/"Kvbird.+157+05841.key" # 將檔名填進去吧! ttl=600 # 你可以指定 ttl 的時間喔! outif="ppp0" # 對外的連線介面! hostname="web.vbird.tsai" # 你向 ISP 取得的那個主機名稱啦! servername="192.168.1.254" # 就是你的 ISP 啊! # Get your new IP newip=`ifconfig "$outif" | grep 'inet addr' | \ awk '{print $2}' | sed -e "s/addr\://"` checkip=`echo $newip | grep "^[0-9]"` if [ "$checkip" == "" ]; then echo "$0: The interface can't connect internet...." exit 1 fi # create the temporal file tmpfile=$basedir/tmp.txt cd $basedir echo "server $servername" > $tmpfile echo "update delete $hostname A " >> $tmpfile echo "update add $hostname $ttl A $newip" >> $tmpfile echo "send" >> $tmpfile # send your IP to server nsupdate -k $keyfile -v $tmpfile |