无论任何时刻,主机名称与 IP 对应的查询都是很重要的一环!因为人脑对于数字组成的 IP 的记忆实在是.....不怎么样,所以,才会发展出可以经由主机名称(hostname)对应到计算机 IP 的一个模式,这样我们就可以轻轻松松的记住主机名称即可,计算机 IP 那就交给 Domain Name System 去搞定吧!那个 DNS 系统是由柏克莱大学发展的 bind 这个套件(Berkeley Internet Name Domain)所提供的啦!基本上,DNS 最大的工作就是将 Hostname 对应到 IP 这个功能了,不过,要架设一个成功的 DNS 主机的话,还得要对于 DNS 的运作很清楚才行啊!否则架设的不对,还反而会造成大家的问题喔!这个章节当中,要学会的数据其实还蛮多的,需要了解:什么是正解、什么是反解、什么是Zone、客户端 (Client) 是经由什么咚咚来查询得到 IP 的呢?!以及 DNS 的授权问题等等,哇!赶快清一清脑门,要好好的用功啰! ^_^ |
/etc/hosts
:直接在档案内输入主机名称对应的 IP 来查询;
DNS 系统 :在 Client 端以 resolver 的方式到 DNS 主机上面搜寻 IP 与名称的对应! |
李登辉、三芝、台北
李登辉、仁爱、台北 李登辉、高雄 .... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[root@test
root]# rpm -qa | grep bind
bind-9.2.1-4mdk <==这个是用来安装 Server 的 bind-utils-9.2.1-4mdk <==这个是用来做为 Client 端搜寻 domain name 的指令 |
[root@test
root]# vi /etc/named.conf
// This settings is only for forwarding DNS Server options { pid-file "/var/run/named/named.pid"; //我这里设定 pid-file !这个时候, //请特别留意该路径的所有人 ( owner ) //一定是要 named 这个人才行! forward only; //只允许 forward! forwarders { 168.95.1.1; //我这里使用 hinet 的 DNS ! 139.175.10.20; //这个是 seednet 的 DNS ! }; }; [root@test root]#
ls
-al /var/run/named
|
[root@test
root]# /etc/rc.d/init.d/named start
Starting named: [ OK ] |
[root@test
root]# netstat -utln
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.2: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.2:53 0.0.0.0:* udp 0 0 127.0.0.1:53 0.0.0.0:* |
[root@test
root]# tail -n 15 /var/log/messages | grep
named
Dec 5 02:33:33 test named[3010]: starting BIND 9.2.1 -u named Dec 5 02:33:33 test named[3010]: using 1 CPU Dec 5 02:33:33 test named[3015]: loading configuration from '/etc/named.conf' Dec 5 02:33:33 test named[3015]: no IPv6 interfaces found Dec 5 02:33:33 test named[3015]: listening on IPv4 interface lo, 127.0.0.1#53 Dec 5 02:33:33 test named[3015]: listening on IPv4 interface eth0, 192.168.1.2#53 Dec 5 02:33:33 test named[3015]: running Dec 5 02:33:33 test named: named startup succeeded |
计算机系统 | 计算机 IP | 计算机名称 | 说明 |
Mandrake 9.0 | 192.168.1.2 | mdk90.vbird.org
phorum.mdk90.vbird.org www.mdk90.vbird.org ftp.mdk90.vbird.org |
1. 这是主要的 DNS 设定主机;
2. 我的主要名称为 mdk90.vbird.org 3. 总共有三个『别名』在这部主机上! |
Windows 2000 | 192.168.1.100 | win2k.vbird.org | 记录在 mdk90.vbird.org 里面的纪录数据。 |
Windows XP | 192.168.1.200 | winxp.vbird.org | 记录在 mdk90.vbird.org 里面的纪录数据。 |
[root@test
root]# vi /etc/named.conf
// 设定整体的主机规划!重点在 directory 的意义! options { directory "/var/named"; //这个是在规定『我的正反解档案放置的目录』 forwarders { 168.95.1.1; //不管怎么说,俺就是喜欢 forwarder 的设定 }; pid-file "/var/run/named/named.pid"; //每个 distribution 可能都不同! allow-query { any; }; //是否允许他人查询?当然啦! allow-transfer { any; }; //是否允许 slave 的同步!当然啦! }; //上面这两个设不设定都无所谓啦!默认值! // 首先定义出
. (root) 这个 hint type 的档案内容!
// 再来则是定义出
localhost 的正反解了!很简单啦!就是 127.0.0.1 而已
// 定义出我自己的这一组正反解设定!
|
[root@test
root]# ftp rs.internic.net
Connected to rs.internic.net. Name (rs.internic.net:root): anonymous 331 Guest login ok, send your complete e-mail address as password. Password: <==your password 230 User ftp logged in. Access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd domain ftp> get named.root ftp> bye |
[root@test
root]# vi named.root
; 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 . <file>" ; configuration file of BIND domain name servers). ; ; This file is made available by InterNIC ; under anonymous FTP as ; file /domain/named.root ; on server FTP.INTERNIC.NET ; ; last update: Nov 5, 2002 ; related version of root zone: 2002110501 ; ; ; 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 以下省略 |
[root@test
root]# cd /var/named
[root@test named]# vi named.localhost $TTL 600 ; 这个跟清除 cache 的时间有关系!单位是秒! @ IN SOA localhost. root.localhost. ( 2002120601 ; Serial 与 master 及 slave 是否同步有关! ; 一般而言,如果这个数值变大了, slave 才会同步更新! 28800 ; Refresh 定义出 slave 多久会主动的检查 serial 的值, ; 以便主动的更新数据库! 14400 ; Retry 定义出,如果 slave 没有连上 master DNS 主机 ; 则多久之后会重新再次的主动检查! 720000 ; Expire 如果一直没有连接上 mater ,那么到了这个时候 ; slave 就会放弃检查的动作了,不再更新! 86400 ) ; Minimum 这个其实就是 TTL 啦!如果您没有定义 TTL , ; 那么 TTL 的值就以这个来设定! ; 开始设定正解的信息内容: @ IN NS localhost. ; 特别留意最后面有个 . 喔! localhost. IN A 127.0.0.1 ; A 是正解里面 hostname 对应 IP 的标志 |
符号 | 说明 |
|
|
|
这个就是 zone 定义出的那个咚咚啦!以这个档案内容为例,因为我们在 /etc/named.conf 当中就是定义出 localhost 这个 domain name 为一个 zone 的,因此,呵呵!在这里,这个符号就代表 localhost 啦! |
|
|
|
|
|
这是正解的符号啦!也就是说,前面的 localhost. (还是得要注意那个 . )所对应的 IP 为 127.0.0.1 的意思啦! |
|
呵呵!再次的给他强调下,在 BIND 的设定档当中,关于主机名称的话,最后面有没有加上 . 是差很多的!加上了 . 表示这个『完整的主机名称,亦即是 hostname + domain name 』了,如果没有加上 . 的话,表示该名称仅为『 hostname 』而已!切记切记! |
[root@test
root]# cd /var/named
[root@test named]# vi named.127.0.0 <==这个文件名称是在 /etc/named.conf 里面设定 $TTL 600 ; This is about DNS server's settings @ IN SOA localhost. root.localhost. ( 2002120601 ; Serial 28800 ; Refresh 14400 ; Retry 720000 ; Expire 86400 ) ; Minimum ; The server's infomations @ IN NS localhost. 1 IN PTR localhost. |
符号 | 说明 |
|
|
[root@test
root]# cd /var/named
[root@test named]# vi named.vbird.org <==这个文件名称是在 /etc/named.conf 里面设定 $TTL 600 ; 跟上面提到的一样,设定主机的一些基本信息,包含 master 与 slave ! @ IN SOA mdk90.vbird.org. root.mdk90.vbird.org. ( 2002120601 ; Serial 28800 ; Refresh 14400 ; Retry 720000 ; Expire 86400 ) ; minimum ; 主机的设定参数部分 @ IN NS mdk90.vbird.org. ; 这个 zone (vbird.org) 的主机 @ IN MX 10 mdk90.vbird.org. ; 邮件转递的主要邮件主机! mdk90 IN A 192.168.1.2 mdk90 IN TXT "The testing DNS server" ; 仅是说明文件 phorum.mdk90 IN CNAME mdk90 ;注意这行与下一行的写法! www.mdk90 IN CNAME mdk90.vbird.org. ; 其它主机的设定信息上面 win2k IN A 192.168.1.100 win2k IN HINFO "AMD-K6-III""Windows 2000" winxp IN A 192.168.1.200 |
符号 | 说明 |
|
|
|
|
|
|
|
这个东西就是设定主机别名的咚咚啦!因为我们的主机有很多个名字,没有必要为每个名字都建立一个 A 的标号,这个时候,我们就可以使用 CNAME 来设定另外一个别名!以上面为例,我设定了两个别名在我的主机上面,特别留意的是两个 CNAME 的写法都指向同一部机器,上面关于 CNAME 的那两行最大差异性在于写的是否为 FQDN 与后面有没有加上 . 这个标志啦! ^_^ |
|
这个东西后面接两个咚咚,第一个接的是硬件的等级,第二个接的则是操作系统,这两个咚咚最好不要用在公开的 DNS 主机上面,跟 TXT 一样的问题啦!如果要设定的话,最好使用双引号分隔开来喔! |
[root@test
root]# cd /var/named
[root@test named]# vi named.192.168.1 <==这个文件名称是在 /etc/named.conf 里面设定 $TTL 600 @ IN SOA mdk90.vbird.org. root.mdk90.vbird.org. ( 2002120601 ; Serial 28800 ; Refresh 14400 ; Retry 720000 ; Expire 86400 ) ; minimum ; 其它主机的信息! @ IN NS mdk90.vbird.org. 2 IN PTR mdk90.vbird.org. ; The following is about other hosts 100 IN PTR win2k.vbird.org. 200 IN PTR winxp.vbird.org. |
1. 开始启动!
[root@test root]# /etc/rc.d/init.d/named start Starting named: [ OK ] 2. 关于 port
观察:
3. 关于讯息的内容!
|
Dec 10 11:34:21
test named[31185]: loading configuration from '/etc/named.conf'
Dec 10 11:34:21 test named[31185]: /etc/named.conf:18: missing ';' before '}' Dec 10 11:34:21 test named[31185]: loading configuration: failure Dec 10 11:34:21 test named[31185]: exiting (due to fatal error) 这样的错误就是发生在 /etc/named.conf 的地 18 行,忘记加上 ; 符号了!去修正即可! Dec 10 11:37:20
test named[31236]: dns_rdata_fromtext: named.localhost:9: near eol: unexpected
end of input
Dec 10 11:42:28
test named[31338]: dns_master_load: named.localhost:14: unexpected end
of line
|
既然已经完成了 DNS 主机的设定,接下来自然要进行 Client 端的联机测试啦!要怎么测试呢?底下有几个档案请特别留意喔:一般而言, Linux 的预设 hostname 搜寻都是先 /etc/hosts 来的,为什么呢?您可以查看一下 /etc/nsswitch.conf ,并找到 hosts 的项目:
- /etc/hosts :刚刚上面就提过了,这个是最早的 hostname 对应 IP 的档案;
- /etc/resolv.conf :这个就是设定您 Client 端连上 DNS 主机的 IP 设定文件;
- /etc/nsswitch.conf:这个档案则是在『决定』先要使用 /etc/hosts 还是 /etc/resolv.conf 的设定!
[root@test root]# vi /etc/nsswitch.conf
hosts: files nisplus nis dns
上面那个 files 就是使用 /etc/hosts 而最后的 dns 则是使用 /etc/resolv.conf 的 DNS 主机 IP 搜寻啦!因此,您可以先以 /etc/hosts 来设定 IP 对应ㄋㄟ!当然啦,您也可以将他调换过来,不过,总是 /etc/hosts 比较简单,所以将他摆在前面比较好啦!
好啦,既然我们是要进行 DNS 测试的,那么 /etc/resolv.conf 的内容,自然就要填写我们自己的 IP 啰!所以您应该这样写:
[root@test root]# vi /etc/resolv.conf
nameserver 192.168.1.2
nameserver 163.28.112.1
nameserver 163.28.113.1
nameserver 可以设定多个,但是由于 nameserver 是一个一个的追查下来的,所以,您的 DNS 主机的 IP 要写在最上面喔!然后就可以开始测试了!
测试 DNS 的程序有很多,我们先来使用最简单的 host 吧!然后还有 nslookup 及 dig 哩!
host:
语法:
[root @test root]# host [-a] [FQDN]
[root @test root]# host -l [domain]
参数说明:
-a :所有的信息都列出来;
-l :将后面接的 domain 内的所有的 host 都列出来!
范例:
[root @test root]# host mdk90.vbird.org
mdk90.vbird.org has address 192.168.1.2
很单纯的只列出来 hostname 对应 IP 而已!其它的信息则一概不印出![root @test root]# host -a mdk90.vbird.org
Trying "mdk90.vbird.org"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51741
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;mdk90.vbird.org. IN ANY;; ANSWER SECTION:
mdk90.vbird.org. 600 IN A 192.168.1.2
mdk90.vbird.org. 600 IN TXT "The testing DNS server";; AUTHORITY SECTION:
vbird.org. 600 IN NS mdk90.vbird.org.Received 98 bytes from 192.168.1.2#53 in 9 ms
注意看上面的说明,上面的 600 就是我们订定的 TTL 的数值, A, TXT, NS 则是在 master file ,也就是 named.vbird.org 里面设定的信息!了不了ㄋㄟ?[root @test root]# host -l vbird.org
vbird.org SOA mdk90.vbird.org. root.mdk90.vbird.org. 2002120601 28800 14400 720000 86400
vbird.org name server mdk90.vbird.org.
vbird.org mail is handled by 10 mdk90.vbird.org.
mdk90.vbird.org has address 192.168.1.2
mdk90.vbird.org text "The testing DNS server"
phorum.mdk90.vbird.org is an alias for mdk90.vbird.org.
www.mdk90.vbird.org is an alias for mdk90.vbird.org.
win2k.vbird.org has address 192.168.1.100
win2k.vbird.org host information "AMD-K6-III" "Windows 2000"
winxp.vbird.org has address 192.168.1.200
vbird.org SOA mdk90.vbird.org. root.mdk90.vbird.org. 2002120601 28800 14400 720000 86400
上面的信息有没有很熟悉呢?对啦!那就是我们在设定 named.vbird.org 里面的所有的设定信息!
基本上,如果没有特殊的需求,那么 host 这个程序就实在是很好用了!而且还粉方便ㄋㄟ!
nslookup :
语法:
[root @test root]# nslookup [FQDN]
[root @test root]# nslookup
参数说明:
set type=any :列出所有的信息『正解方面设定档』
set type=mx :列出与 mx 相关的信息!
范例:
[root @test root]# nslookup win2k.vbird.org
Server: 192.168.1.2
Address: 192.168.1.2#53Name: win2k.vbird.org
Address: 192.168.1.100
亦是单纯的将 hostname 对应的 IP 列出来而已!蛮方便的啦!而且前面亦会显示出是哪一部 DNS 主机去查询的![root @test root]# nslookup
> 192.168.1.2 <==检查反解!
Server: 192.168.1.2
Address: 192.168.1.2#532.1.168.192.in-addr.arpa name = mdk90.vbird.org.
> www.mdk90.vbird.org <==检查正解!
Server: 192.168.1.2
Address: 192.168.1.2#53www.mdk90.vbird.org canonical name = mdk90.vbird.org.
Name: mdk90.vbird.org
Address: 192.168.1.2
> tw.yahoo.com <==检查非本机端的正解!
Server: 192.168.1.2
Address: 192.168.1.2#53Non-authoritative answer: <==这一行在说明,这个信息得自『非认证!』亦即由 cache 取得的!
Name: tw.yahoo.com
Address: 202.1.237.21
> set type=any <==显示所有的信息!仅针对正解而言!
> mdk90.vbird.org
Server: 192.168.1.2
Address: 192.168.1.2#53Name: mdk90.vbird.org
Address: 192.168.1.2
mdk90.vbird.org text = "The testing DNS server"
> exit
nslookup 也是一个很不错用的信息喔!不过,底下的 dig 又更厉害了!
dig:
语法:
[root @test root]# dig [-t type] [FQDN]
参数说明:
-t type :查询某种 type ,主要有 any 及 mx 等!
范例:
[root @test root]# dig mdk90.vbird.org; <<>> DiG 9.2.1 <<>> mdk90.vbird.org
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41014
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;mdk90.vbird.org. IN A;; ANSWER SECTION:
mdk90.vbird.org. 600 IN A 192.168.1.2;; AUTHORITY SECTION:
vbird.org. 600 IN NS mdk90.vbird.org.;; Query time: 10 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Tue Dec 10 13:50:38 2002
;; MSG SIZE rcvd: 63
由上面的信息我们可以得到 A 的正解及 NS 的主机名称喔![root @test root]# dig -t mx mkd90.vbird.org
; <<>> DiG 9.2.1 <<>> -t mx mkd90.vbird.org
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 39261
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;mkd90.vbird.org. IN MX;; AUTHORITY SECTION:
vbird.org. 600 IN SOA mdk90.vbird.org. root.mdk90.vbird.org. 2002120601 28800 14400 720000 86400;; Query time: 9 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Tue Dec 10 13:53:10 2002
;; MSG SIZE rcvd: 80
主要是取得 MX 的相关信息啦!
这样的查询方式是不是也很方便呢!?赶快去试看看您的设定对不对吧!
whois:
语法:
[root @test root]# whois hostname
参数说明:
范例:
[root @test root]# whois redhat.comDomain Name: REDHAT.COM
Registrar: NETWORK SOLUTIONS, INC.
Whois Server: whois.networksolutions.com
Referral URL: http://www.networksolutions.com
Name Server: NS2.REDHAT.COM
Name Server: NS3.REDHAT.COM
Name Server: NS1.REDHAT.COM
Status: ACTIVE
Updated Date: 09-jan-2003
Creation Date: 26-may-1994
Expiration Date: 25-may-2006Registrant:
Red Hat, Inc. (REDHAT-DOM)
P.O. Box 13588
Research Triangle Park, NC 27709
USDomain Name: REDHAT.COM
Administrative Contact, Technical Contact:
Network Operations Center (NOC144-ORG) noc@REDHAT.COM
Red Hat, Inc.
P.O. Box 13588
Research Triangle Park, NC 27709
US
919-547-0012Fax- 919-547-0024
Fax- - 919-547-0024Record expires on 27-May-2006.
Record created on 26-May-1994.
Database last updated on 9-Mar-2003 11:44:55 EST.Domain servers in listed order:
NS3.REDHAT.COM 66.187.229.10
NS1.REDHAT.COM 66.187.233.210
NS2.REDHAT.COM 66.187.224.210
whois 可以用来查询某一部主机或某个 domain 主要是经过那个人的注册?那个人的设定内容与哪部机器呢!这个指令也很是好用,例如上面的范例当中,我们可以知道 redhat.com 这部机器的 IP 与注册的状态喔!很不错用吧! ^_^
好了,那么如何开放子网域授权呢?我这里仅说明正解的部分,因为在 ISP 方面通常已经帮我们搞定反解了,所以先不理他!而目前我们去注册的信息上面,通常仅取得的是正解的设定权,例如我的 vbird.idv.tw 就是一个例子!好了,现在假设在我的 mdk90.vbird.org 上面,要将 win2k.vbird.org 这个子网域切割出去给 win2k.vbird.org 管理,那么该怎么办呢?
[root@test
root]# cd /var/named
[root@test named]# vi named.vbird.org <==这个文件名称是在 /etc/named.conf 里面设定 $TTL 600 @ IN SOA mdk90.vbird.org. root.mdk90.vbird.org. ( 2002120601 ; Serial 28800 ; Refresh 14400 ; Retry 720000 ; Expire 86400 ) ; minimum ; 主机的设定参数部分 @ IN NS mdk90.vbird.org. @ IN MX 10 mdk90.vbird.org. mdk90 IN A 192.168.1.2 mdk90 IN TXT "The testing DNS server" phorum.mdk90 IN CNAME mdk90 www.mdk90 IN CNAME mdk90.vbird.org. ; 子网域分割出去给其它主机管理的例子! win2k.vbird.org. IN NS win2k.vbird.org. win2k IN A 192.168.1.100 ; 本机上面其它主机的设定信息方面 winxp IN A 192.168.1.200 |
[root@test
root]# more /var/log/messages
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 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 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@test root]# vi /etc/named.conf // 加入底下这个参数: logging { category lame-servers { null; }; }; // 注意一下,那个 logging 是主要的参数,至于 category 则是定义出什么信息, // 因为我们不要 lame server ,所以选择 lame-servers 这个参数,并定义 // 参数值为 null (空的的意思),这样就修改完成了! 2. 重新启动 bind [root@test root]# /etc/rc.d/init.d/named restart |
在 LPI 网站 http://www.lpi.org 里面提到的,关于 NFS 的考试题库的地方,只有在 LPI level 1 的 102 ,里面的 topic 113 Networking Services ,第五点当中,简易的 DNS 设定。强调的是『应试者需了解何谓正、反解、Zone 与 cache-only 的 DNS 主机』至于会考的档案与指令可能有这些:
- /etc/hosts
- /etc/nsswitch.conf
- /etc/resolv.conf
- /etc/named.boot(V4)及 /etc/named.conf(V8)
- named (这个 daemon )