鸟哥的 Linux ADSL 私房菜


简易 DNS 服务器设定
最近更新日期:2003/10/08
 
无论任何时刻,主机名称与 IP 对应的查询都是很重要的一环!因为人脑对于数字组成的 IP 的记忆实在是.....不怎么样,所以,才会发展出可以经由主机名称(hostname)对应到计算机 IP 的一个模式,这样我们就可以轻轻松松的记住主机名称即可,计算机 IP 那就交给 Domain Name System 去搞定吧!那个 DNS 系统是由柏克莱大学发展的 bind 这个套件(Berkeley Internet Name Domain)所提供的啦!基本上,DNS 最大的工作就是将 Hostname 对应到 IP 这个功能了,不过,要架设一个成功的 DNS 主机的话,还得要对于 DNS 的运作很清楚才行啊!否则架设的不对,还反而会造成大家的问题喔!这个章节当中,要学会的数据其实还蛮多的,需要了解:什么是正解、什么是反解、什么是Zone、客户端 (Client) 是经由什么咚咚来查询得到 IP 的呢?!以及 DNS 的授权问题等等,哇!赶快清一清脑门,要好好的用功啰! ^_^
 
原理部分
  什么是 Domain Name System
  DNS 的查询过程
  关于『授权』的意义
  网站代管还是自己设定 DNS
  正解与反解的 Zone 意义
安装部分
  架设 DNS 所需要的套件
设定部分
  设定一:单纯的 forward DNS 主机设定
  设定二:DNS 主机的详细设定
Client 端的设定
  /etc/nsswitch.conf
  /etc/hosts
  /etc/resolv.conf
  查询指令:host, nslookup, dig, whois
进阶设定
  子网域授权问题
  架设一个合法授权的 DNS 主机
  LAME Server 的问题
重点回顾
本章与 LPI 的关系
参考资源
本章习题练习

原理部分

图一、分层次的 DNS 架构 ( Hostname 与 Domain name )

图二、DNS 层阶概念示意图

图三、DNS 主机查询流程示意图

架设 DNS 所需要的套件:
设定部分

图五、Cache-Only DNS 主机的运作流程

Client 端的设定:
既然已经完成了 DNS 主机的设定,接下来自然要进行 Client 端的联机测试啦!要怎么测试呢?底下有几个档案请特别留意喔: 一般而言, Linux 的预设 hostname 搜寻都是先 /etc/hosts 来的,为什么呢?您可以查看一下 /etc/nsswitch.conf ,并找到 hosts 的项目:
 
[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#53

Name:   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#53

2.1.168.192.in-addr.arpa        name = mdk90.vbird.org.
> www.mdk90.vbird.org  <==检查正解!
Server:         192.168.1.2
Address:        192.168.1.2#53

www.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#53

Non-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#53

Name:   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.com

   Domain 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-2006

Registrant:
Red Hat, Inc. (REDHAT-DOM)
   P.O. Box 13588
   Research Triangle Park, NC 27709
   US

   Domain 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-0024

   Record 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 管理,那么该怎么办呢?

重点回顾
本章与 LPI 的关系
在 LPI 网站 http://www.lpi.org 里面提到的,关于 NFS 的考试题库的地方,只有在 LPI level 1 的 102 ,里面的 topic 113 Networking Services ,第五点当中,简易的 DNS 设定。强调的是『应试者需了解何谓正、反解、Zone 与 cache-only 的 DNS 主机』至于会考的档案与指令可能有这些:

参考资源:
本章习题练习
简易 DNS 服务器设定

2002/12/10:首次完成
2003/03/10:修改部分内容,并且新增 LPI 相关性与重点整理部分!
2003/09/10:修改了部分的版面,并将 slave DNS 的错误修订完毕!
2003/10/08:新增了 lame server 的说明,与解决之道!

2002/12/10 以来统计人数


Designed by VBird during 2001-2004.  Aerosol Lab.