LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 824|回复: 2

大家看看这个吧!关于dns

[复制链接]
发表于 2003-7-24 12:06:44 | 显示全部楼层 |阅读模式
啊!图出不了!给连接吧:
http://www.longfly.com/dns/dns-guide.htm 



无论任何时刻,主机名称与 IP 对应的查询都是很重要的一环!因为人脑对于数字组成的 IP 的记忆实在是.....不怎么样,所以,才会发展出可以经由主机名称(hostname)对应到计算机 IP 的一个模式,这样我们就可以轻轻松松的记住主机名称即可,计算机 IP 那就交给 Domain Name System 去搞定即可!那个 DNS 系统则是由柏克莱大学发展的 bind 这个套件啦(Berkeley Internet Name Domain)所提供的啦!基本上,DNS 最大的工作就是将 Hostname 对应到 IP 这个功能了,不过,要架设一个成功的 DNS 主机的话,还得要对于 DNS 的运作很清楚才行啊!否则架设的不对,还反而会造成大家的问题喔!这个章节当中,要学会的数据其实还蛮多的,需要了解:什么是正解、什么是反解、什么是Zone、客户端 (Client) 是经由什么咚咚来查询得到 IP 的呢?!以及 DNS 的授权问题等等,哇!赶快清一清脑门,要好好的用功啰! ^_^


 



--------------------------------------------------------------------------------

原理部分

要设定 DNS 之前,必须要了解什么是 FQDN 呢?什么是 Hostname 与对应到 IP 的流程呢?还有,为什么要有 DNS 这个系统呢?以及我们常常会提到的『什么是正解、反解啊!』这些都是很基础的咚咚,得要理解得很清楚才行!这个 DNS 可以说是架设网站的第一步啦!因为我们总是希望自己的网站容易让人家来记忆嘛!那么总不能叫大家被你的主机所在的 IP 吧!您说是吧!因此,申请一个合法的主机名称,或者设定一部经过合法授权的 DNS 主机,那可是相当重要的一件事啊!
 


--------------------------------------------------------------------------------

什么是 Domain Name System:
 
DNS 的全名是『 Domain name system 』是也,中文译名为『领域名称系统』,这个咚咚的用途是什么哇!为什么我们的计算机或者是 Internet 一定需要他 ( 尤其是以 WWW 的方式来上网时 ) ?呵呵!他最大的用途就是『造福懒惰与记忆性薄弱的人类~』哈哈!没错!为什么说他是造福人类呢?且听我娓娓道来:
/etc/hosts 的历史:
还记得我们在前几章当中提过的 网络基础 里面吧?目前在 Internet 上面通用的通讯协议为 TCP/IP ,那么数据传送是以 TCP 封包来传送,他还是建置在 IP 协议之上的,而众所皆知的, IP 是由四组 8 bit 的号码组成的,也就是类似『 xxx.yyy.zzz.www 』这样的型态,好啦,那么如果我们要连上某一部计算机,就要在网址列输入该计算机主机的 IP 才能连接的上,如果是一部或两部计算机那还无所谓,如果像目前这种 Internet 的主机数目.....嘿!谁记得住这么多的 IP 呀!?由于 IP 是一堆没有意义的数字所组成的,实在不容易被懒惰与记忆性薄弱的人类所接受 ( 说的是鸟哥自己 ....) ,那如果将这些数字以『名字』来取代呢?那又如何?也就是说,只要输入一个『计算机的名字』而我们的系统就会自动的将这个名字转成计算机了解的 IP !嘿嘿!如此一来,我要记得『名字』总是比 IP 容易的多了!早期的人类早就想到这个简单又偷懒的方式了,那就是 /etc/hosts 这个档案的由来!例如,只要你输入『 ping -c 5 localhost 』你的 Linux 马上可以印出 127.0.0.1 这个 IP , Why ?你去看一下 /etc/hosts 就知道为什么了!所以啰,只要将你常常上网的『网址对应的 IP 』写到这个 /etc/hosts 底下,你的 IP 搜寻速度就会快上很多~(注:再次强调,在妳的私有网域内部,最好将所有的 IP 都写入这个档案中啦!)
DNS 的历史:
早期(大约20~30年前)的计算机可是贵重物资,一般人是可望而不可及的,因为计算机数量太少,所以可以使用 /etc/hosts 来记忆这些 IP 与名称的对应。但是在现代, Internet 上面这么多主机,并且常常会突然的『噗通』又多出一部主机来服务,那么我们总不能一个一个的将他输入在 /etc/hosts 里面吧!?对呀!真不聪明!所以后来的这个时候就有所谓的『领域名称解析系统, DNS』出现啦!DNS 利用类似树状目录的型态,将主机名称的管理分配在不同层级的 DNS 主机当中,经由分层管理,所以每一部主机的记忆的信息就不会很多,而且异动上面也相当的容易修改!那么这个 DNS 的功能你知道了吗?对啦!就是『将计算机主机的名称转译成 IP 』就是了!当然啰,他的额外功能还很多!总之,他的最大功能就是『让有意义的,人类较容易记忆的主机名称(英文字母),转译成为计算机所熟悉的 IP 地址!』举个例子来说好了,奇摩雅虎的网站的 IP 是 202.1.237.21 ,所以你可以在你的浏览器上面输入『 http://202.1.237.21 』来连上奇摩雅虎!不过,我想没有几个人能够将这个 IP 背的起来的吧?!反之,我们却都知道奇摩雅虎的网址为 tw.yahoo.com ,那么你只要输入『 http://tw.yahoo.com 』就可以连上 Internet 啦!很容易记忆吧!
  

/etc/hosts  :直接在档案内输入主机名称对应的 IP 来查询;
DNS 系统    :在 Client 端以 resolver 的方式到 DNS 主机上面搜寻 IP 与名称的对应!


Fully Qualified Domain Name ( FQDN )
在提到名称与 IP 的解析之前,我们还必需来讨论一下『什么是 domain name 与 host name ?』也就是,领域名称与主机名称。在讨论这个主题之前,我们来聊一聊比较生活化的话题,请注意喔!底下的例子不涉及政治!呵呵!先提一下,免得大家敏感:
 

我们晓得全台湾有很多个『李登辉』,这个『李登辉』就代表每一个独立的个人!但是妳怎么知道这个李登辉跟前总统李登辉是否为同一个人?咦!每个李登辉都来自不同的县市嘛!对啦,所以我们就以县市来做为区分,所以有台北的李登辉跟高雄的李登辉,这两个就可以分辨了!嗄!万一不幸,台北还有两个李登辉怎么办?那就用乡镇来分呀!所以有台北、三芝的李登辉跟台北、仁爱的李登辉,如果我们将他列出来,可以这样看:
李登辉、三芝、台北
李登辉、仁爱、台北
李登辉、高雄
....


是否就可以分辨他的不同点了呢?呵呵!没错!就是这样!
 

另外一个例子可以使用电话来看,假如高雄有个 1234567 而台南也有个 1234567 ,那么(1)妳在高雄直接拨接 1234567 时,他会直接挂入高雄的 1234567 电话中,(2)但如果妳要拨到台南去,就得加入(06)这个区码才行!我们就是使用区码来做为辨识之用的!
 

是否还不清楚我要说什么?呵呵!我们常常会发现主机名称都是 www 的网站,例如 www.gov.tw, www.seednet.net, www.hinet.net 等等,那么我们怎么知道这些 www 名称的主机在不同的地方呢?就需要给他领域名称啰!也就是 gov.tw, seednet.net, hinet.net 等等的不同,所以即使妳的主机名称相同,但是只要不是在同一个领域内,那么就可以被接受啰!基本上,我们知道 DNS 是有层级之分的,那么每个层级的 Hostname 与 Domain name 可是不一样的咚咚ㄋㄟ~我们可以使用我们的主机来加以说明,如下图所示:



在上面的例子当中,第二层里面,那个 .tw 是 domain name ,而 com, edu, gov 则是主机的名称,而在这个主机的名称之管理下,还有其它更小网域的主机,所以在第三层的时候,基本上,那个 edu.tw 就变成了 domain name 了!而成大与中山的 ncku, nsysu 则成为了 hostname 啰!呵呵!以此类推,最后得到我们的主机那个 aerosol 是主机名称,而 domain name 是由 ev.ncku.edu.tw 那个名字所决定的!自然,我们的主机就是让管理 ev.ncku.edu.tw 这个 domain name 的 DNS 主机所管理的啰!这样是否了解了 domain name 与 hostname 的不同了呢?
 


--------------------------------------------------------------------------------

DNS 的查询过程:
 
接下来我们要谈一谈,那么 DNS 的 (1)架构是怎样? (2)查询原理是怎样?总是要先知道架构才能知道如何查询的吶!所以底下我们先来介绍一下整体的架构。
DNS 的架构:


上面就是一个简单的 DNS 阶层架构啰,最上方一定是 . 这个 root 的 DNS 主机,他底下管理的就只有 com, edu, gov, mil, org 与以国家为分类的第二层的主机名称了!例如台湾地区最上层的领域名称是以 .tw 为开头,管理这个领域名称的这部机器的 IP 是在台湾,但是他的记录则是记录在 . (root)那部机器里面的!还有其它的国家的最上层如 .cn 指的是大陆,.de 指的是德国一样!那么每个国家之下记录的主要的下层有哪些领域呢?呵呵!主要就是有这六大类:
 

名称
代表意义

com
公司、行号、企业

org
组织、机构

edu
教育单位

gov
政府单位

net
网络、通讯

mil
军事单位


 
其实最早之前在 . (root)之下只有这六大类的 domain name ,但是网络成长的速度太快了,因此后来又多出这些以国码来分的 domain name ,如此一来,在该国家之内,只要向该国家申请 domain name 即可,不需要再到最上层去申请啰!也因此,在这些国码之下,还是有这六大类的 domain name 为主的哩!当然啦,在目前,由于因特网持续的发烧,说实在的 domain name 实在是有点不太够用,所以又有相当多的领域名称被设计出来,例如目前台湾 ISP 提供的 .idv.tw 的个人网站啦!

好了,再强调一次, DNS 系统是以所谓的阶层式的管理,所以,请注意喔!那个 .tw 只记录底下那一层的这六个主要的 domain 的主机而已!至于例如 edu.tw 底下还有个 ncku.edu.tw 这部机器,那就直接授权交给 edu.tw 那部机器去管理了!也就是说『每个上一层的 DNS 主机,所记录的信息,其实只有其下一层的主机名称而已!』至于再下一层,则直接『授权』给下层的某部主机来管理啰!呵呵!所以您就应该会知道 DNS 到底是如何管理的吧! ^_^ 会这样设定的原因不是没有道理的!这样设计的好处就是:每部机器管理的只有下一层的 hostname 对应 IP 而已,所以减少了管理上的困扰!而下层 Client 端如果有问题,只要询问上一层的 DNS server 即可!不需要跨越上层,除错上面也会比较简单呢!

DNS 的搜寻流程:
刚刚说过 DNS 是以类似『树状目录』的型态来进行名称的管理的!所以每一部 DNS 主机都『仅管理下一层 DNS 主机的名称转译』而已,至于下层的下层,则『授权』给下层的 DNS 主机来管理啦!这样说好像很绕口,好吧!我们就以下图来说一说原理啰:


首先,当你在网址列输入 http://aerosol.ev.ncku.edu.tw 时,你的计算机就会依据 /etc/resolv.conf 所提供的 DNS 的 IP 去进行联机查询,好了,由于目前最常见的 DNS 主机就属 Hinet 的 168.95.1.1 这个 DNS 了,所以我们就拿他来做例子吧!嗯!这个时候, hinet 的这部主机会这样工作:

 

先查看本身有没有纪录:刚刚说过啦,由于 DNS 是层阶式的架构,任何一部 DNS 都仅记录下一层里面的主机名称对应的 IP 而已,由于 hinet 并非学术网络里面的主机,所以自然也就没有办法直接提供给 client 端关于 aerosol.ev.ncku.edu.tw 这部机器的 IP 了,所以啦,一般而言,这个时候 168.95.1.1 就会向最顶层,也就是 . (root) 的主机查询 .tw 这部机器的地址;
 
向最顶层 ( root )查询:由于 168.95.1.1 没有纪录我们主机的 IP ,这个时候他就会向『最顶层』的 . (root) 这部主机来查询 . (root) 的下一层,也就是 .tw 这部机器的数据了!这个时候, . (root) 就会告诉 168.95.1.1 说『嘿!你要查 .tw 这个网域的管理者呀!?喝!我这里有  .tw 这个网域的管理的主机之 IP 信息,妳可以直接去找他!』;
 
向第二层查询:168.95.1.1 接着又到 .tw 去查询,而该部机器管理的又仅有 .edu.tw, .com.tw, gov.tw... 那几部主机,经过比对后发现我们要的是 .edu.tw 的网域,所以这个时候 .tw 又告诉 168.95.1.1 说:『你要去管理 .edu.tw 这个网域的主机那里查询,我有他的 IP !』;
 
向下层持续查询:好了,一步一步下来, .edu.tw 可以查到管理 .ncku.edu.tw 的主机 IP ; .ncku.edu.tw 可以查到管理 .ev.ncku.edu.tw 的主机 IP ,而最后我们 aerosol.ev.ncku.edu.tw 就可在管理 .ev.ncku.edu.tw 网域的那部主机的设定纪录当中查询到啦!
 
记录暂存内存:查到了 IP 之后,这部 168.95.1.1 的 DNS 机器总不会在下次有人查询 aerosol.ev.ncku.edu.tw 的时候再跑一次这样的流程吧!粉远粉累的吶!而且也很耗系统的资源与网络的频宽,所以呢, 168.95.1.1 这个 DNS 很聪明的会先记录一份 aerosol.ev.ncku.edu.tw 对应 IP 的信息在自己的暂存内存当中,以方便下一次又有人对同一个主机名称的要求之查询!最后则将结果回报给 client 端!当然啦,那个记忆在 cache 当中的数据,其实是有时间性的,当过了 DNS 设定记忆的时间(通常可能是 24 小时),那么该记录就会被释放喔!
 

由这样的分层负责你发现了什么?嗯!那就是:

 

当一个『合法』的 DNS 主机里面的设定修改了之后,来自世界各地任何一个 DNS 的要求,都会正确无误的显示正确的主机名称对应 IP 的信息,因为他们会一层一层的寻找下来,所以,要找妳的主机名称对应的 IP 就一定得要透过你的上层 DNS 主机的纪录才行!所以只要妳的主机名字是经过上层『合法的 DNS』主机的设定的,那么就可以在 Internet 上面被查询到啦!呵呵!很简单维护吧,机动性也很高。
 
在主机的暂存内存记录当中,由于是有时间性的,所以当妳的主机名称在 DNS 当中被修改了之后,但是由于之前的旧信息还记忆在其它的 DNS 主机的暂存内存里面,所以啦,可能在别人以非妳的 DNS 主机来查询你的主机名称时,就会得到先前的旧信息,这个时间差不多可能是 10 分钟到 2 天左右,这也是为什么我们常说当妳修改了一个 domain name 之后,可能要 2 ~ 3 天候才能全面的启用的缘故啦!
 

好啦!哇!既然 DNS 这么棒,然后我们又需要架站,所以需要一个主机的名称,因此,那么我们需要架设 DNS 了吗?!哈哈!当然不是,为什么呢?刚刚鸟哥提到了很多次的『合法』的字眼,因为他就牵涉到『授权』的问题了!

DNS 使用的 port number :
好了,既然 DNS 系统使用的是网络的查询,那么自然需要有开 Listen 的 port 啰 ( 监听的埠号 )!没错!很合理!那么 DNS 使用的是那一个 port 呢?那就是 53 这个 port 啦!你可以到你的 Linux 底下的 /etc/services 这个档案看看!搜寻一下 domain 这个关键词,就可以查到 53 这个 port 啦!但是这里需要跟大家报告的是,通常, DNS 查询的时候,是以 udp 这个较快速的数据传输协议 ( protocol ) 来查询的,但是万一没有办法查询到完整的信息时,就会再次的以 TCP 这个协定来重新查询的!所以启动 DNS 的 daemon (就是 named 啦) 时,会同时启动 TCP 及 udp 的 53 这个 port number 喔!
 

--------------------------------------------------------------------------------

关于『授权』的意义:
 
很多朋友都认为『架设 DNS 可以设定主机的名称,而我要架站需要主机有名字,因此一定需要架设 DNS ,只要有 DNS,我的主机就可以有名字了!』是这样吗?当然不是!这是错误的观念!怎么说呢?从上面的图示当中,你应该不难发现,当我要搜寻 aerosol.ev.ncku.edu.tw 主机时,就需要向管理 .ev.ncku.edu.tw 这个网域的那部机器查询才行,而要查询 .ev.ncku.edu.tw 则需要在 .ncku.edu.tw 上面询问才可以!这是因为『上层 DNS 主机 .ncku.edu.tw 已经将 .ev.ncku.edu.tw 这个网域的管理权 "授权" 给 green.ev.ncku.edu.tw 这部机器,当有人要查询 .ev.ncku.edu.tw 这个网域的主机 IP 时, .ncku.edu.tw 将会把查询的任务直接转给 green.ev.ncku.edu.tw 去管理了!从此, .ncku.edu.tw 这个网域的管理主机,将不会再接管 ev.ncku.edu.tw 这个网域的名称管理!』是否很像人类社会的『授权』的概念?也就是说,当你老板充分的『授权』给你某项工作的时候,从此,要进行该项工作的任何人,从老板那边知道你才是真正『有权』的人之后,都必须要向你请示一样! ^_^!所以啰,如果你要架设 DNS ,而且是可以连上 Internet 上面的 DNS 时,你就必须要透过『上层 DNS 主机的授权』才行!这是很重要的观念喔!等一下我们在底下会介绍一个如何架设一个『经过合法授权的 DNS 主机』哩!
其实,如果将上面的话改换成:『我要架站,所以我要让我的主机有一个合法的名字!』那样就合理了!怎么说呢?因为我可以请上层 DNS 帮我设定主机名称对应 IP 就可以啦!如此一来,要找我的 hostname 对应 IP 的人,都可以直接在我的上层 DNS 里面找到,根本不需要透过我的 Linux 主机吶!例如我们研究室的 aerosol.ev.ncku.edu.tw 就可以在 green.ev.ncku.edu.tw 这部管理 DNS 的 server 上面找到ㄋㄟ~不必亲自来我的 aerosol.ev.ncku.edu.tw 上面找!也就是说,藉由 DNS 系统最大的功能『主机名称转译成 IP 』这个动作,那么你只要向任何一个合法的 DNS 主机申请一个『主机名称, hostname 』给你的 Linux 主机,让大家都可以藉由该 DNS 主机来查询到你的 Linux 之 IP ,就可以使用该主机名称来架站啦!就是这么简单!

好了,那么你就应该知道了,要让你的主机名称对应 IP 且让 Internet 上面的计算机都可以查询的到,就需要:
 

上层 DNS 的授权让你设定 DNS 主机,或者是;
直接请上层 DNS 主机来帮你设定!
 
这两种模式,那么哪种模式比较好呢?这没有一定的答案,底下我们来谈一谈,你比较适合哪一种模式的设定呢?
 


--------------------------------------------------------------------------------

网站代管还是自己设定 DNS:
 
如果你曾经申请过 domain name 的话,例如向 Hinet 或 Seednet 等台湾各大主要 ISP 申请 domain name 的话,应该都会知道有两种主要的模式,就是刚刚上头提到的 DNS 授权,或者是直接交给 ISP 来管理。交给 ISP 管理的,就可以称作是网站代管啦!当然啦,如果你是学校单位的话,或者是企业内部的小单位,那么就得请您向上层 DNS 主机的负责人要求啰!无论如何,您只能有两个选择就是了,要不就是请他帮忙你设定好 hostname 对应 IP ,要嘛就是请他直接将某个 domain name 段授权给你做为 DNS 的主要管理网域。那么我怎么知道那个方式对我比较好呢?请注意,由于 DNS 架设之后,会多出一个监听的 port ,所以理论上,是比较不安全的!因此,能不设当然就不要设定比较好啰!所以,这里的建议如下:
 
需要架设 DNS 的时机:
你所负责需要连上 Internet 的主机数量庞大:例如你一个人负责整个公司十几部的网络 Server ,而这些 Server 都是挂载你的公司网域之下的。这个时候想要不架设 DNS 也粉难啦!
你可能需要时常的修改你的 Server 的名字,或者是你的 Server 有随时增加的可能性与变动性;
 

不需要架设 DNS 的时机:
网络主机数量很少:例如家里或公司只有需要一部 mail server 时;
你可以直接请上层 DNS 主机管理员帮你设定好 Hostname 的对应时;
你对于 DNS 的认知不足时,如果架设反而容易造成网络壅塞的情况;
架设 DNS 的费用很高时!
 


--------------------------------------------------------------------------------

正解与反解的 Zone 意义:
 
讲了这许多,还得再提一提关于正解、反解与 Zone 的问题才行啊!
  
什么是正解与反解?
我们在前头的开宗明义当中就提到啦, DNS 系统本来最主要的功能就是在转译 hostname 与 IP 啰,由于计算机在网络上面其实认识的只是 IP 啦,所以,一般来说,我们称『由 hostname 去寻找出 IP 的程序称为 正解 』,至于由 IP 去查询得到 hostname 那就被称为反解了!正反解的设定情况是差异性很大的!怎么说呢?
 
正解:在正解的情况之下,我们可以透过主机分层设定的方式来查询(例如上面的一些图示啰!),而因为是 Hostname 对应 IP ,所以即使在不同网段的 IP ,仍然可以写在同一个 domain 之中!例如我的主机是在学校里面 ( 140.116.xxx.xxx ),但是我申请的是 vbird.idv.tw 这个 domain 的名称,而很多朋友则是以 ISP 提供的 IP ( 例如 61.xxx.xxx.xxx ) 来进行 *.idv.tw 的申请的!呵呵!那么一来,我的 vbird.idv.tw 就与大家的 *.idv.tw 在同一个 domain 的设定当中啰,但是这些主机却是在不同的网域之中喔(140.116.xxx.xxx 不会跟 61.xxx.xxx.xxx 在同一个网段中吧! ^_^) !所以啰,任何一部 DNS 都可以将你的 IP 写入他们的正解当中啰!
 
反解:但是反之则不行!怎么说呢?因为当初 IP 规划分配的时候,就必需要一个区域一个区域的划分的,所以当然不可能同一个网段的 IP 在不同的地方出现吧!因为这涉及到 TCP/IP 的协议与 router 的架构ㄋㄟ~因此,同一个 IP 网段的反解就真的得要透过上层主机的设定才行了!所以由 IP 反查 hostname 的话,那么大部分的情况下,就需要向直属的上层申请了!
 
举个例子来说:我想要自己的领域名称的名字,所以我可以去外面的 ISP 申请注册一个合法的名字来架设我的 DNS !从此之后,别人就可以经过我的 DNS 正解查询得到我的主机 IP。但是如果要由 IP 反查回 hostname 的话,我就『一定必需要』请管理我主机所在网域的上层的 DNS 管理员来设定才行ㄋㄟ!这也是目前比较麻烦的地方,因为正解你可以自行设定,但是反解则必需要请上层的管理员设定!如果是向 ISP 申请的 IP ,那就得向 ISP 申请反解名称改换,这个部分通常很麻烦~
 

什么是 Zone ?
知道正反解之后,再来要来知道一下,什么又是 Zone ( 区域 ) 呢?说的简单一点的话,一个正解或反解的设定就是一个 zone ,例如我要规范 vbird.idv.tw 这个 domain 的设定内容,那么他就是一个 zone !通常,『一个设定档就是一个 zone 』!在我的例子中,我的 vbird.idv.tw 这个 domain 的 DNS 设定档里面,必需要有:
 
hint( root ) 的设定;
vbird.idv.tw 这个 domain 的正解设定;
localhost 的正解设定;
localhost 的反解设定。
 
那么我就有四个 zone 了!如果以我们系馆的 DNS 主机 green.ev.ncku.edu.tw 来说的话,他至少要有:
 

hint(root);
ev.ncku.edu.tw 正解;
ev.ncku.edu.tw 反解以及 ;
localhost 正解;
localhost 反解。
 
等五个 zone 的定义啰!嘿!你会发现,我没有 vbird.idv.tw 这个 domain 的反解设定~为什么呢?请参考上面的说明吧!因为反解需要要求 IP 协议的上层来设定才行!并且,需要特别留意的是,『每一个 zone 都有一个设定档,而规定这些设定档档名的,就交给 /etc/named.conf 这个参数档来设定!』也就是说, DNS server 使用的 bind 这个套件中,他的主要参数档是 /etc/named.conf ,而这个档案当中就是记录了每一个 zone 的设定档档名!实际上,在设定正反解的,就是每一个 zone 的设定档啦!
 

正反解一定要成套吗?
好了,正反解需不需要成套产生,在这里不用多说明了吧!? ^_^!请注意喔,在很多的情况下,尤其是目前好多莫名其妙的领域名称产生出来,所以,常常会只有正解的设定需求而已。不过也不需要太过担心啦,因为通常在反查的情况中,如果你是使用目前台湾地区最流行的 ADSL 上网的话,那么 ISP 早就已经帮你设定好反解了!例如:211.74.253.91这个 seednet 的浮动式 IP 反查的结果会得到91.253.74.211.in-addr.arpa 这样的主机名称!所以在一般我们自行申请领域名称的时候,你只要担心正解的设定即可!不然的话,反正反解的授权根本也不会开放给你,你自己设定得很高兴也没有用呀! ^_^

--------------------------------------------------------------------------------

架设 DNS 所需要的套件:

安装 DNS 套件: BIND
终于废话都说完了!相信您大概也有点累的吧!?鸟哥是蛮累的啦,因为手臂、肩颈酸痛的毛病颇严重....咦!讲这个干嘛!? @_@ 好啦,我们终于要来安装 DNS 所需要的套件了!还记得前面提过的,我们要使用的 DNS 就是使用柏克莱大学发展出来的 BIND ( Berkeley Internet Name Domain, BIND ) 这个套件啦!那么怎么知道你安装了没?还记得基础篇里面的 RPM 吗?对啦!就是使用 RPM 来检验啰:
 
[root @test root]# rpm -qa | grep bind
bind-9.2.1-4mdk         <==这个是用来安装 Server 的
bind-utils-9.2.1-4mdk      <==这个是用来做为 Client 端搜寻 domain name 的指令


 
万一没装怎么办?嗄!还问我ㄌㄟ~赶快将你的原版光盘拿出来,然后将他安装上去先~不会安装?请自行拿出『鸟哥的 Linux 私房菜 -- 基础学习篇』去观察一下 RPM 的用法吧!
BIND 的预设路径设定:
基本上, BIND 的主要设定档为 /etc/named.conf这一支档案,各种针对主机的设定值都在这个档案中设定的!但是对于 hostname <--> IP 的对应关系,就需要由 zone 来设定了!但是这个 zone 的文件名称是在 /etc/named.conf 里面规定的!所以,请注意喔,每一个 zone 的名称都是可变的,但是需要在 /etc/named.conf 里面命名好!此外,最好将 zone 规定出来的档案直接放置到 BIND 的预设 zone 摆放的目录,就是 /var/named 里面去!比较好管理啰!
BIND 的升级:
必须请大家注意的是,这个 DNS 的 53 port 其实也不是个很安全的咚咚,所以呢,非必要,其实是不太建议起用 DNS 的啦!不过,如果真的要安装的话,那么请随时注意你的 Linux distribution 是否有定时的公告的漏洞修补套件呢?这个真的很重要,因为鸟哥很久很久以前,就是被这个 port 53 给种植了一个蠕虫,真是讨厌的很! @_@

--------------------------------------------------------------------------------

设定部分

在 DNS 的设定上面,基本上,你必须要已经很清楚 zone 是什么了,否则很难继续设定喔!会搞的一塌糊涂的~无论如何,你一定要知道的是, bind 的设定档,就是 /etc/named.conf 这个档案,如果他不存在的话,请自行建立吧!另外,针对 DNS server 的类型大致上可以分为三类,分别是:
 

Master:这种类型的 DNS 本身含有领域名称的设定档(就是有Zone啦!),这个设定档就是设定正解或者是反解的『Database』啰!所以他本身是具有提供 Internet 查询所需的数据喔!例如我可以在我的主机上面设定提供 vbird.idv.tw 这个网域,那么我的主机就是 master 类型的主机啦!
 

Slave:这种类型的主机本身不必直接由 DNS 系统管理员手动设定 DNS 的正反解数据库档案,而是对应到这部 Slave 所支持的 Master 主机去备份 DNS 的设定档案数据,也就是说, Slave 会将 Master 上面已经订定好的正反解对应数据文件备份一份在自己的系统当中喔!( 注:当然啰,这个 Master 必须要开放 Slave 来更新 Slave 的数据对应文件喔!??究竟如何开放呢? ) 此外,需要特别留意的是, Slave 主机并不是在 Master 挂点时才会『活起来』的,而是他与 Master 相同,都同时负责 Internet 上面的 domain 查寻!那么架设这个 Slave 有什么好处呢?呵呵!最大的好处就是『单点维护』啦!怎么说呢?假设你有三部 DNS 主机,那么万一你所管理的网域之内要加入一部新的主机名称,试问,你是要手动修改 3 部计算机还是仅修改一部计算机,其它的两部让他自动的更新其设定呢?这样说亲爱的朋友们,您应该可以理解了吧! ^_^!由于这个 Slave 并不是在 Master 挂点时才会活起来的一个 DNS 主机,因此,如果你向 ISP 订定两部 DNS 主机时,千万要让这两部都活起来喔??!因为不论是 Master 或是 Slave ,在 Internet 上面并非循序来查寻 domain name 的,而是先找到先赢的,所以我们不会晓得哪一部主机会先被查询到!当然啦!因此两部 Master/Slave 的机器就需要通通可以在 Internet 上面工作啦!
 

Cache-only:通常设定在防火墙上面的呢!这种类型的 DNS 主机没有自己的数据库,单纯仅帮助 Client 端向外部的 DNS 主机要求数据而已~简单的来说,他可以想成是一个『代理人』的角色而已~
 
底下我们就来谈一谈两个简单的 DNS 主机,分别是 cache-only ( 单纯 forward ) 与较为详细的 Master 类型的 DNS 主机吧!至于 slave 与 Master 的设定蛮类似的,这里我们就不多加介绍了!
 


--------------------------------------------------------------------------------

单纯的 forward DNS 主机设定:
 
什么是单纯的 forward DNS 的主机呢?
好了,了解了 BIND 的预设路径之后,我们知道了主要设定档是 /etc/named.conf 这个档案,但是偏偏我的 /etc 底下就没有这个档案!哈哈!因为你要自行建立啦! ^_^!在介绍怎么设定每一个 zone 之前,我们先来玩一个简单的 DNS 主机!就是 cache-only DNS server !也称为 forward DNS 啰!顾名思义,这个 DNS server 只有 cache ( 快取 ) 的功能,也就是说,他本身没有设定档,完全是由对外的查询来提供他的数据来源!因为他没有设定档,所以他就必须要连上一部合法的 DNS 才行!整个运作的流程可以看成是这个样子:


由上面的图示来看,你可以发现,其实,我们 Client 端虽然都是使用 Cache-Only 的 DNS 再搜寻,但是,实际上 Cache-only 的主机都是请一个 ( Forwarders ) DNS 主机来帮忙查询的,本身并没有设定档的啦!所以说,基本上, cache-only 的 DNS 只是一个中间传递数据的 DNS 主机罢了!那么为什么要架设这样的一个 DNS 主机呢?闲闲没事干?当然不是!这是有原因的啦!底下说给你听啰!

什么时候使用 cache-only DNS?
在某些公司行号里头,为了预防员工利用公司的网络资源作自己的事情,所以都会规定 Internet 的联机上面相当的严格,所以说,有的时候,连自己都会被挡住!自然,这个 port 53 也就同样的,可能被挡住啦!那么我们知道说,如果没有 port 53 这个 DNS ,那么自然就无法解析出 hostname 对应 IP 啰!是的!怎么办?这个时候,您可以在『防火墙的那部机器上面,加装一个 cache-only 的 DNS 服务!』这是什么意思呢?很简单啊!就是你自己利用自己的 firewall 与 DNS 去帮你的 Client 端解译 hostname <--> IP 啰!因为 firewall 可以设定放行自己的 DNS 外出,而 Client 端的 DNS server IP 就设定自己的 firewall ,哈哈!这样就可以取得转译啦!

简易的 cache-only DNS 设定:
设定一个 cache-only 的 DNS 主机其实真的很简单的啦!因为不需要设定正反解的 Zone ,所以只要设定一个档案即可!真是快乐得不得了吶!
 

编辑 /etc/named.conf
在这个档案中,主要是定义跟主机有关的事项,以及各个 Zone 的代表含意与档案,因为 cache-only 没有 Zone ,所以我们只要设定好跟主机有关的设定即可。设定这个档案的时候请注意:
 
批注数据是以『 // 』来作设定的!
每个段落之后都需要以『 ; 』来做为结尾!
 
那么你可以这样设定这个档案啦!
 

[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
total 12
drwxr-xr-x    2 named    named        4096 Dec  5 02:28 ./  <==注意这个 owner 喔!
drwxr-xr-x   10 root     root         4096 Dec  5 02:01 ../


 

options 的内容指的是在主机内的主要设定值,里头的设定为:
pid-file 指的是每一个 services 的记录自己的 PID ( Process ID ) 的档案啰!这个档案通常用在重新启动或者是 reload 整个 services 最常被使用到的!因为可以使用 kill -1 PID 来重新启动啊!嗄!忘记什么是 PID ?赶快拿出基础篇复习一下!
forwarders (不要忘记那个 s 喔!)就是要设定往前寻找的那个『合法』的 DNS 啰!每一个 forward 的主机之 IP 都需要有『 ; 』来做为结尾!
forward only:这个设定可以让你的 DNS 主机仅进行 forward 而已!是 Cache-Only 主机最常见的设定了!
 
很简单吧!这样就已经设定完成了最简单的 cache-only 的 DNS 主机了!
 

启动 named
启动总不会忘记吧!?赶快去启动一下吧!
 
[root @test root]# /etc/rc.d/init.d/named start
Starting named:                                                 [  OK  ]


 
观察 port 的变化
请特别的注意喔!并不是启动的时候显示 OK 就会成功的!所以,还要赶快的来看一下你的 port 53 有没有启动ㄋㄟ~
 
[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:*


 
特别需要留意的是,如果没有指定接口的话,那么所有的网络接口,包含 lo, eth0, ... 等接口都会被设定为可以接受 domain name 要求的响应接口!此外,还记得我们在前面提到的,每个接口同时都会提供 TCP 与 UDP 封包的服务喔!这样看起来似乎真的有启动的样子,不过,我们还是得瞧一瞧设定方面有没有什么大问题呢?
 
检查 /var/log/messages 的内容讯息
named 这个服务的记录文件就直接给他放置在 /var/log/messages 里面啦,所以来看看里面的几行吧!
 
[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


 
呵呵!看起来似乎是没有问题的样子了!好了!那么就直接来测试看看吧!
 
测试( 请观看 Client 端的测试项目 )
Forwarders 的好处与问题分析
关于 forwarder 的好处与坏处,其实有很多种的意见!大致的意见可分为这两派:
 

利用 Forwarder 的功能来增进效能的理论:这些朋友们认为,当很多的下层 DNS 主机都使用 forwarder 时,那么那个被设定为 forwarder 的主机,由于会记录很多的信息记录,因此,对于那些下层的 DNS 主机而言,会增快很多,亦即会节省很多的查询时间!基本上,这些基本的流程可以看成如下图所示:

所有的 cache-only 都设定 forwarder 为『主 DNS 主机』那一部,则由于主 DNS 主机已经记录了较多的信息了(每个人都来要求嘛!)所以,当其它人来要求相同的查询数据时,则主 DNS 那部机器将会直接由其 cache 当中读取,因此,查询效率就变快了!
 
利用 Forwarder 反而会使整体的效能降低:但是另外一派则持相反的见解!这是因为当主 DNS 本身的『业务量』就很繁忙的时候,那么你的 cache-only 主机还向他要求数据,那么因为他的数据传输量太大,频宽方面可能负荷不量,而太多的下层 DNS 又向他要求数据,所以他的查询速度会变慢!因为查询速度变慢了,而你的 cache-only 主机又是向他提出要求的,所以自然两边的查询速度就会同步下降!
 
很多种说法啦!鸟哥本人也觉得很有趣哩!只是不知道哪一派较正确就是了 >_<"" ,不过可以知道的是,如果上层的 DNS 速度很快的话,那么他被设定为 forwarder 时,或许真的可以增加不少效能哩!
 


--------------------------------------------------------------------------------

DNS 主机的详细设定:
 
那么我们就来架设一部完整的 DNS 主机吧!如同前面说的,我们必须要设定的档案有几个呢?
 
1.    /etc/named.conf

2.    /var/named/named.root

3.    /var/named/named.localhost

4.    /var/named/named.127.0.0

5.    /var/named/named.正解档案

6.    /var/named/named.反解档案

 
大概就是这几个!要注意的是,除了第一个 /etc/named.conf 的档名是预设的之外,其它的档名都是在 /etc/named.conf 里面设定的!那么底下我们就以鸟哥家里的联机状态来说明一下俺是如何设定我的 domain name 啰!要注意的是,这里的 DNS 设定是『私有网域的设定』状态,如果您刚刚看过了『授权』的概念,那么将会知道,底下我所设定的皆是属于『不合法的 DNS 主机』,这意味着我的 DNS 主机只能够向外查询,但是别人是查不到我的 DNS 主机里面的设定内容的!除非他使用我的 DNS 主机的 IP 啰!不过,嘿嘿!我使用的是私有 IP ,想要使用我的 DNS !哈哈!门都没有~
 

7.    手动规划 hostname 与 IP 的对应表:
在作任何事之前,先动手设计一下是好事吶!我假设我的 domain name 是 vbird.org 而网域为 192.168.1.0/24,而主机的名称配合 domain name 来设计的共有三部计算机,分别为:
 

计算机系统
计算机 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 里面的纪录数据。


8.     
要注意的是,在 mdk90 那部机器中,因为我的用途相当的多,所以我希望我的一部主机有多个名称!那么我目前又只有一个正解的领域,所以就仅设定了这个 domain 里面的三个别名了!总共有四个名字吶!
 

9.    设定简易的 /etc/named.conf 档案:
还记得上面提过的,这个档案才是主要的设定档,而其它的 hostname <--> IP 则是在各个 zone 的设定档中!那么这个档案主要的设定首先在于针对主机的设定,这一点刚刚 forwarder DNS 主机已经说过了!那另一个则是在定义每一个 zone 的文件名称与该设定 domain 的 『 Type (类型)』,目前有三种类型,分别为master ( 主要设定档 ) 、 hint ( 就是 root 啦 ) 以及 slave ( 针对 master 来进行数据同步化的设定文件 ) 。好了,那么如果以我们刚刚上面规划的设定来看,那么应该有的 /etc/named.conf 设定就会变成底下的模样了:
 

[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 的档案内容!
zone "." {               //看到了没!?这个就是所谓的 zone 啦!
        type hint;           //选择的 type 为 hint (root . 专用)
        file "named.root";       //设定档案的档名!很多时候预设为 named.root
};

// 再来则是定义出 localhost 的正反解了!很简单啦!就是 127.0.0.1 而已
zone "localhost" {           //这个 zone 表示设定档的预设 domain name 为
                    //localhost 的意思喔!这里请『特别』搞清楚!
        type master;          //主要的在本机的设定档!
        file "named.localhost";    //檔名!可以随自己高兴随便取!
};
zone "0.0.127.in-addr.arpa" {     //反解的 IP 网段!那个 in-addr.arpa 是
                    //固定的 IP 段写法!
        type master;
        file "named.127.0.0";
};

// 定义出我自己的这一组正反解设定!
zone "vbird.org" {          //我的 zone 的 domain name 为 vbird.org
        type master;
        file "named.vbird.org";
};
zone "1.168.192.in-addr.arpa" {
        type master;
        file "named.192.168.1";
};


10.         
要特别留意的是:

options
里面多定义了一个 directory 的咚咚,这个就是设定文件放置的目录了!以底下的档案为例,如果是 localhost 的正解檔,亦即是 named.localhost 时,那么这个档案的放置位置就是在 /var/named/named.localhost 啦!这样可以了解吗?未来你可以自己改变自己档案放置的地方,就可以分的比较清楚!
pid-file 指的是每一个 services 的记录自己的 PID ( Process ID ) 的档案啰!这个档案通常用在重新启动或者是 reload 整个 services 最常被使用到的!因为可以使用 kill -1 PID 来重新启动啊!嗄!忘记什么是 PID ?赶快拿出『鸟哥的 Linux 私房菜 -- 基础学习篇』复习一下!
forwarders (不要忘记那个 s 喔!)就是要设定往前寻找的那个『合法』的 DNS 啰!每一个 forward 的主机之 IP 都需要有『 ; 』来做为结尾!
关于 . (root) 的内容:root 最重要的就是那个 hint 的 type 啦!记得写对喔!
关于 localhost 的正反解:正反解的名称都可以随意设定,不过,要特别留意的就是那个 zone 后面接的其实就是『 domain name 』!这个 domain name 未来在设定档当中会使用得很频繁喔!
关于其它 domain 的正反解:其实与 localhost 没有什么不同的,就只是不同的 domain name 就是了!
反解的写法:反解的 Zone 的写法较为特殊,他必须要将 IP 反过来写的,例如 127.0.0.1/24 这个 C class 的网域,要写的话,则必须要反过来写成 0.0.127 这样的形式!其中需要注意的是,最后面务必要加上『in-addr.arpa』的咚咚!不要忘记了喔!
 

11.        设定 . ( root ) 的内容:
一般而言,反正本机查不到,又没有设定 forwarder 的时候,那么通常就是直接到 . ( root ) 去查询啰!但是我们怎么知道 root 在哪里呢?总还是需要有 IP 吧!没错啰!如果是旧的 Red Hat 或是 Mandrake 都会提供这个 hint type 的档案,但是 Open Linux 里面却没有提供!并且,有的时候,这些主机的 IP 还是可能会变动的啦!因此呢,我们可以连接上管理国际 domain name 的机器,那就是 rs.internic.net 这部机器去下载啰!你可以这样做:
 

[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


12.         
完成之后,我们来看一下 named.root 这个档案吧!
 

[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
以下省略


13.         
共有若干个的主机,注意喔!那个『 ; 』是设定档的批注,与 /etc/named.conf 又不一样!特别留意,不要搞错了!然后你会发现每个『 . 』都有个 NS 与 A 的对应,注意看到黄色的那两行,第一行意思是 . 的 name server (NS) 为 『A.ROOT-SERVERS.NET. 』最后面有没有加上 . 是不一样的!特别留意!而这个 nameserver 的 IP ( 用A对应 ) 为 198.41.0.4 !!其它的用途我们在下一个档案再来谈!总而言之,这个档案不要去改他!因为这个是国际上通用的资料,不能修改啦!改了反而会找不到 . 哩!
 

14.        设定本机端 ( localhost ) 的正解档案:
每一部机器都有 localhost 嘛!所以呢,我们就先来针对 localhost 这个网域的计算机对应来设定一下啰!而由于 localhost 通常其对应的 IP 就是 127.0.0.1 ,所以就直接给他正解有这两个就行啦!但是要特别留意的是,『我的正解要找哪一个 nameserver !?』因此,在底下的设定档当中,最重要的其实就是要使用 NS 这个 nameserver 的『主机名称』标志啦!
 

[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 的标志


15.         
上面有很多的怪怪的字眼,我们得要先说明一下,否则后面您会『雾煞煞』的!
 

符号
说明

$TTL
1.    这个东西主要在:『定义出向外查询的数据可以记录在 DNS 的 cache 当中多久』的意思;

2.    后面接的数字单位为秒;

3.    通常这个数字如果定义太大的话,例如一天(86400)时,那么当别人更改了他的 DNS 讯息时,由于你的 cache 更新时间为一天,所以得要一天之后 cache 当中的数据才会被取代,因此,在一天之内,你查询到的信息『都会是旧的!』

4.    但是这个数字如果定的太小的话,例如五分钟(300)那么这部 DNS 将会不断的向外要求数据,则负荷会变的较大啦!

5.    其实,除非是在测试阶段,不然的话,通常都会建议定义一天的 cache 时间啰!

6.    注意:某些套件上面并不能定义这个咚咚!

@
这个就是 zone 定义出的那个咚咚啦!以这个档案内容为例,因为我们在 /etc/named.conf 当中就是定义出 localhost 这个 domain name 为一个 zone 的,因此,呵呵!在这里,这个符号就代表 localhost 啦!

SOA
7.    这个是 Start of Authority 开始设定的内容的意思啦!也就是接在后面的设定要开始了!请注意,这个咚咚在每个『zone 的设定档』当中都会存在!所以,每个 zone 的设定都一样即可!

8.    在 SOA 后面会接两个咚咚,第一个为主机名称( localhost. ),请特别留意那个 localhost 后面有个小数点 (.) 这个东西很重要!他代表『一个完整的 hostname +  domain name 了』!如果没有加上 (.) 的话,那么就表示该文字『仅为 hostname ,还需要加上 domain name 』!这里是新手最容易出现的错误喔!第二个为管理员的 e-mail !因为不能使用 @ (已经是特殊符号了),所以这里也同样的以 (.) 来取代!例如上面我以 root@localhost 来做为我的 e-mail ,所以就写成了 root.localhost. ,同样的,最后面有个 (.) 喔!

9.    在最后,会有小刮号 ( ) 括起了五个数字,这五个数字除了最后一个与 TTL 有关之外,其它的都跟 slave 与 master 的资料同步运作有关!

§                                                         Serial :这个数字仅是用来做为 master 与 slave 之间的 update 的参考数值也就是说,当 Slave 的 serial 小于 Master 时,那么 update 才会动作!由于担心设定者的设定技巧问题,因此通常我们以时间来做为 Serial 的订定依据,例如 2002 年 12 月 6 日第一次设定,可以写成『2002120601』请注意,这个数字不可超过 10 个数字。

§                                                         Refresh :命令 slave 多久进行主动更新的时间;

§                                                         Retry :如果到了 Refresh 的时间,但是 slave 却无法连接到 master 时,那么在多久之后,slave 会再次的主动尝试与主机联机;

§                                                         Expire :如果 slave 一直无法与 master 连接上,那么经过多久的时间之后,则命令 slave 不要再连接 master 了!

§                                                         Minimun :这个就有点像是 TTL 啦!

NS
§                                                         表示 name server 的意思,后面接的都是『hostname 或 FQDN』这个表示前面的 domain 是由后面的这个主机所管理的啦!

§                                                         『 @ IN NS localhost. 』这一行的意思是说,@ ( zone ,亦即是 localhost 这个 domain ) 的管理的 Name Server 为 localhost 这部主机,请注意,那个 localhost 后面一定要接 (.) 才行!为什么呢?因为如果没有加上 (.) 的话,那么主机名称将会变成 localhost.localhost ! Why ?这是因为 BIND 预设情况中,没有写 . 的话,那么则表示该名称为 Hostname 而已,需要再加上 domain name 才行!

§                                                         由于 Name Server 为主机的名称,所以后续还要加上这个 name server 的正解的 IP 对应(就是底下要谈的 A )才行!

A
这是正解的符号啦!也就是说,前面的 localhost. (还是得要注意那个 . )所对应的 IP 为 127.0.0.1 的意思啦!

.
呵呵!再次的给他强调下,在 BIND 的设定档当中,关于主机名称的话,最后面有没有加上 . 是差很多的!加上了 . 表示这个『完整的主机名称,亦即是 hostname + domain name 』了,如果没有加上 . 的话,表示该名称仅为『 hostname 』而已!切记切记!


16.         

Slave DNS : 所谓的 slave DNS 主机,就是说,当你的 master 主机挂点的时候,那么 slave 主机才会接管原本 master 所管理的 domain name 的设定!而在 master DNS 主机活的好好的时,那么 slave 将不会有接管的动作发生。这样看起来 slave 就有点像是 master 的备份 DNS 主机啰?!答对了!大部分的时候, slave 主机确实是有点像是备份的的后援机器!因为他只有在 master 死掉时,才会显示出管理者的威力出来的!而重点在于,既然有『slave 备份』的功能,那么自然其数据就需要『同步化』啰!因此, SOA 才会定义出数个关于数据同步化的数字出来!
 
这样可以了解上面的意思了吗?呵呵!这个是最基础的几个项目喔!千万要记得!不要忘记了~好了,知道了正解之后,我们要来谈一谈那个反解的东西啦!
 

17.        设定本机端 ( localhost ) 的反解档案:
反解跟正解一样,还都需要 SOA 的标号,也需要 NS 这个咚咚,唯一不同的大概就是由 IP 对应成为 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.


18.         
上面前几行跟前面一样,就不提了!只有最后一行不一样,那个是什么呢?
 

符号
说明

PTR
§                                                         这是反解的符号啦!主要还是在于 IP 对应主机名称的咚咚!要注意的是,由于这个档案的 zone 为 127.0.0 ,所以我们只要加一个数字(最后一个数字)就可以啦!而那个 1 表示的就成为了 127.0.0.1 啰!

§                                                         那么万一今天我们规划的是 B Class 的 zone 呢?例如 127.0 这样的 zone 呢?很简单啦!就填两个数字即可!也就是 0.1 啰!

§                                                         最重要的东西就是:在规划 zone 的时候,是很重要的,而反解的 zone 的名称最后需要接上 in-addr.arpa,这点也请千万不要忘记了!


 
因为这个 domain (localhost) 就只有一部机器,所以我们很简单的就可以将他设定完成了!底下,我们将要设定我们自行假设定三部主机喔!
 

19.        设定 domain name 的正解:
再来设定的就是刚刚我们先前提到的三部主机了,你可以这样设定:
 

[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


20.         
除了先前的 master 与 slave 相关的时间参数之外,还有那个重要的 NS 以及 A 这些参数之外,里面的参数主要有底下几个新鲜玩意儿:
 

符号
说明

SOA
§                                                         特别注意到 SOA 那一行的设定喔!因为我们要设定的已经是 vbird.org 这个 Zone 了,所以请修改一下你的主机名称,还有 DNS 主机的管理员邮件地址喔!

§                                                         另外,还是再次的提醒那个 . 是什么东西!

MX
§                                                         这个东西就是 Mail eXchanger (MX) 的简写,他的用途在使用于邮件主机时,需要的信件转递站!用于一般主机是没有多大的影响,但是对于 mail server 则有相当重要的影响哩!

§                                                         如果不知道如何使用这个玩意儿,没有关系,你可以直接将你的主机名称(FQDN)写入!以我上面的例子来说,我就将邮件主机写成我自己的主机,注意,最好是 FQDN 喔!

§                                                         如果你的邮件主机没有 MX 这个设定其实也没有关系啦,信件还是可以传送到达的,但是,有时后就是会比较慢一些些收到对方寄来的信件就是了!

§                                                         请注意 MX 后面要接上一个数值喔!你可以设定多个邮件主机,但是请特别留意的是,被设定的邮件主机必须要能够支持你的邮件之 relay 才行,否则设定会变成无效的!

TXT
§                                                         这个东西在进行『说明』而已!亦即是前面那部主机的一些信息。

§                                                         特别注意的是,没事的话,『信息不要写得太详细,有的时候甚至应该要写些错误的讯息!』为什么呢?如果写得太详细的话,那么那些个 cracker 不就很简单的就可以将你的网站信息取得,并进而入侵了吗? @_@

CNAME
这个东西就是设定主机别名的咚咚啦!因为我们的主机有很多个名字,没有必要为每个名字都建立一个 A 的标号,这个时候,我们就可以使用 CNAME 来设定另外一个别名!以上面为例,我设定了两个别名在我的主机上面,特别留意的是两个 CNAME 的写法都指向同一部机器,上面关于 CNAME 的那两行最大差异性在于写的是否为 FQDN 与后面有没有加上 . 这个标志啦! ^_^

HINFO
这个东西后面接两个咚咚,第一个接的是硬件的等级,第二个接的则是操作系统,这两个咚咚最好不要用在公开的 DNS 主机上面,跟 TXT 一样的问题啦!如果要设定的话,最好使用双引号分隔开来喔!


21.         
这样应该就设定妥当啰!请额外注意喔!在 DNS 的正解部分,他的重要信息特别的多,比较难设定的意思就对了~所以,您需要特别留意每个设定值是否为正确喔!一般而言,我们会建议大家,设定完成之后,并且执行完启动的 script ,千万要记得去 /var/log/messages 里头看一看有没有错误讯息喔!
 

22.        设定 domain name 的反解:
设定反解要简单的多了~只要找到对应的 hostname 即可:
 

[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.


23.         
很简单吧!就是 IP 的对应即可!
 

24.        启动 named 与 port 及讯息确认:
又到了启动的时刻了!加油!
 

1. 开始启动!
[root @test root]# /etc/rc.d/init.d/named start
Starting named:                  [  OK  ]

2. 关于 port 观察:
[root @test root]# netstat -tuln | grep 53
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:*

3. 关于讯息的内容!
Dec  8 23:27:39 test named[8106]: starting BIND 9.2.1 -u named
Dec  8 23:27:39 test named[8106]: using 1 CPU
Dec  8 23:27:39 test named: named startup succeeded
Dec  8 23:27:40 test named[8111]: loading configuration from '/etc/named.conf'
Dec  8 23:27:40 test named[8111]: no IPv6 interfaces found
Dec  8 23:27:40 test named[8111]: listening on IPv4 interface lo, 127.0.0.1#53
Dec  8 23:27:40 test named[8111]: listening on IPv4 interface eth0, 192.168.1.2#53
Dec  8 23:27:40 test named[8111]: couldn't add command channel 127.0.0.1#953: not found
Dec  8 23:27:40 test named[8111]: zone 0.0.127.in-addr.arpa/IN: loaded serial 2002080601
Dec  8 23:27:40 test named[8111]: zone 1.168.192.in-addr.arpa/IN: loaded serial 2002120601
Dec  8 23:27:40 test named[8111]: zone localhost/IN: loaded serial 2002080601
Dec  8 23:27:40 test named[8111]: zone vbird.org/IN: loaded serial 2002120601
Dec  8 23:27:40 test named[8111]: running


25.         

26.        可能的设定错误问题:
基本上,DNS 算是很难设定的一个 Server 了,所以在除错方面请务必小心!他的设定错误通常有两种情况:

语法设定错误:这个问题比较好解决,因为在 /var/log/messages 里面都已经说的很清楚了!按照内容去修订即可;
逻辑设定错误:这个就比较困扰了!为什么呢?因为他主要发生在您设定 DNS 主机的时候,考虑不周所产生的问题!例如忘记加上 (.) ,系统不会显示错误讯息,但是却会造成查询的误判,而 MX 设定的主机名称错误,也不会出现有问题的讯息,但是 mail server 就是会收不到信等等~这些错误都需要很详细的 DNS client 的测试才能知道问题的所在。
我们这里先就语法设定错误方面进行介绍,至于逻辑设定的问题,那个就需要多多的进行测试才能知道了~
 

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:37:20 test named[31236]: zone localhost/IN: loading master file named.localhost: unexpected end of input
这样的错误通常就是发生在 named.localhost 的第 9 行处,去修正看看,通常在前面几行很有可能是 SOA 后面接的五个数字没有写全的原因!

Dec 10 11:42:28 test named[31338]: dns_master_load: named.localhost:14: unexpected end of line
Dec 10 11:42:28 test named[31338]: dns_master_load: named.localhost:13: unexpected end of input
Dec 10 11:42:28 test named[31338]: zone localhost/IN: loading master file named.localhost: unexpected end of input
同样的,告诉你在该档案 named.localhost 有问题!请查证!


 
通常最大的原因真的就是打错字啦!总之,赶紧去看看 /var/log/messages 的内容,一定可以让您更了解错误的问题喔!
 

27.        测试:这样就设定完成了!请前往 Client 端观察吧!


--------------------------------------------------------------------------------

Client 端的设定:

档案设定:
既然已经完成了 DNS 主机的设定,接下来自然要进行 Client 端的联机测试啦!要怎么测试呢?底下有几个档案请特别留意喔:

·   /etc/hosts :刚刚上面就提过了,这个是最早的 hostname 对应 IP 的档案;

·   /etc/resolv.conf :这个就是设定你 Client 端连上 DNS 主机的 IP 设定文件;

·   /etc/nsswitch.conf:这个档案则是在『决定』先要使用 /etc/hosts 还是 /etc/resolv.conf 的设定!

一般而言, 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 设定:
测试 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 与注册的状态喔!很不错用吧! ^_^


--------------------------------------------------------------------------------

进阶设定

还有一些比较进阶的内容可以提供给大家做为参考喔!例如子网域的授权问题与架设一个合法的 hostname 机器喔!~
 


--------------------------------------------------------------------------------

子网域授权问题:
 
好了,那么万一我的网络很大,我只负责上层的 DNS 而已,下层希望直接交给各单位的负责人来负责,要怎么设定呢?举个例子来说,以成大为例,成大计中仅管理各个系所的的主机 IP 而已,由于各个系所的主机数量可能很大,如果每个人都要请计中来设定,那么管理员可能会疯掉,而且在实际设计上也不太人性化。所以啰,计中就将各个 subdomain 的管理权交给各个系所的主机管理员去管理,如此一来,各系所的设定上面会比较灵活,且上层 DNS 主机也不用太麻烦吶!
好了,那么如何开放子网域授权呢?我这里仅说明正解的部分,因为在 ISP 方面通常已经帮我们搞定反解了,所以先不理他!而目前我们去注册的信息上面,通常仅取得的是正解的设定权,例如我的 vbird.idv.tw 就是一个例子!好了,现在假设在我的 mdk90.vbird.org 上面,要将 win2k.vbird.org 这个子网域切割出去给 win2k.vbird.org 管理,那么该怎么办呢?

主机 mdk90.vbird.org 的设定部分:
主机 mdk90.vbird.org 的设定其实很简单啦!只要将子网域开放出来给别人使用就对了!怎么设定呢?你可以直接修改 /var/named/named.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


 
上面的粗体字就是最重要的地方啦!我将 win2k.vbird.org. 这个网域的 NS 权限(name server)转给 win2k.vbird.org 这部主机来管理,而底下列出来 win2k.vbird.org 这部主机的正解信息!那么未来当有人要查询类似 www.win2k.vbird.org 时,则先会到 mdk90.vbird.org 来查询,而查到 win2k.vbird.org 的网域,因此就会向下游的 DNS 亦即是 win2k.vbird.org 这部机器查询了!

下游主机 win2k.vbird.org 的设定:
这个设定就简单啦!直接参考一下我们上面写的数据,跟着设定,但是你的 domain name 变成 win2k.vbird.org 就是了!简单的很吶! {注:如何修改主机名:vi /etc/sysconfig/network}
 


--------------------------------------------------------------------------------

架设一个合法授权的 DNS 主机:
 
好啦!现在你应该知道什么是『经上游授权的合法 DNS 主机』了吧?!没错!就是上游的 DNS 主机将子网域的查核权开放给你来设定就对啦!嗯!虽然知道原理,但是那么我要如何来架设一个合法的 DNS 主机呢?好让我自己管理自己的 domain !例如我的 vbird.idv.tw 就是 VBird 自己管理的ㄋㄟ~底下我们就来谈一谈怎么设定吧!
 
申请一个合法的 domain name :
既然是要建立一个合法的 domain name server ,自然就要向合法的 DNS 主机申请授权啰!目前你可以到底下的地方去申请喔!
 
http://www.twnic.net/index3.php
 
其实台湾地区的一些 domain 已经不再于 TWNIC 受理了,所以你连上上述的网站之后,可以点选里头相关的连结到各大 ISP 去注册!例如我就注册了 vbird.idv.tw 这个网域!现在以 Hinet 的注册做为说明吧!
 

进入主画面:直接连结到底下的网页去:http://nweb.hinet.net/
选择需要的网域名称,并查询该网域是否以存在:因为网域必需是独一无二的,所以你必需使用该网页当中提供的查询功能,去查询一下你想要的网域是否已经被注册了呢?一定要没有被注册的网域才可以喔!
逐步进行注册:然后以该网站提供的功能一步一步的往下去进行,例如以我的『个人网址』之注册为例,按下个人网址之后,会出现流程步骤为:


选择网站代管或架设 DNS 模式:还记得前面提到的信息吧?对啦!我们可以直接请 ISP 帮我们设定好 host 对应 IP 就好(最多三部),当然也可以自行设定一下我们所需要的 DNS 主机啦!因为未来您可能会架设 mail server ,所以还是自行设定 DNS 主机好了!选择上面图示的第五项『DNS指定/异动』项目,会出现下面图标。记得选择『DNS』及填写你的 hostname 与正确的 IP 即可喔!注意:要填选这个项目,最好你的 IP 是固定制的,浮动制的 IP 不建议用这个选项!


注册完毕!
 

以 DNS 主机的详细设定 之设定内容来设定你的主机,请注意,这个情况之下,你只要设定你的注册的网域的正解即可!反解部分则先不要理会,当然,如果您有办法的话,最好还是请上层的 ISP 帮你设定啰!
 
测试!
如此一来,你的 DNS 主机上面设定的任何信息,都可以透过 Internet 上面的任何一部主机来查询到喔!够棒吧!心动了吗?赶快去试看看吧! ^_^


--------------------------------------------------------------------------------

重点回顾

在 Internet 当中,任何一部合法的主机都具有独一无二的主机名称,这个主机名称包含了 hostname 与 domain name ,并称为 Fully Qualified Domain Name (FQDN);
为了克服人类对于 IP 不易记忆的困扰,而有名称解析器的产生,首先是 /etc/hosts ,而后则是 DNS 系统的产生;
DNS 服务器的类型主要分为 master, slave 以及只进行快取记录的 cache-only 的 DNS 主机;
Internet 上面的主机预设先向 master DNS 查询数据,而 slave 的主要功能在于『备份 master 的设定数据库』档案!并且在 master 挂点时,可做为备援的系统;
目前 Unix Like 的机器当中,都是以 BIND 这个柏克莱大学发展的 DNS 套件;
在 DNS 系统中,正解为由 hostname 找 IP ,而反解则是由 IP 找 hostname ,至于 zone 则是一个或者是部分网域的设定值;
bind 的设定档为 /etc/named.conf ,而 named.conf 可以规范出正反解 zone 的档案所在;
正解的纪录(record)主要有:SOA, A, MX, NS, CNAME, TXT 及 HINFO 等;
反解的纪录主要有: SOA, PTR 等;
在 client 端设定 DNS 查询顺序与相关功能的几个重要档案为: /etc/nsswitch.conf, /etc/hosts, /etc/resolv.conf 等;
DNS 查询的指令主要有: host, nslookup, dig, whois 等等;
在载入了 named 这个 daemon 之后,请务必前往 /var/log/messages 察看此 daemon 的成功与否。

--------------------------------------------------------------------------------

本章与 LPI 的关系

在 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 )

--------------------------------------------------------------------------------

参考资源:

BIND 官方网站:http://www.isc.org/products/BIND/
Study Area 学习网站:http://www.study-area.org/linux/servers/linux_dns.htm
优客笔记:http://turtle.ee.ncku.edu.tw/~tung/dns/dnsintro.html

--------------------------------------------------------------------------------

本章习题练习 ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )

为何要有 DNS 系统:
答:
最主要的功能其实在于 Hostname 对应 IP 的查询,可以让我们的计算机连上 Internet 呢!
 

那么请教 Unix Like 系统当中,主要使用那个套件做为 DNS 主机的架设,同时,他又是使用那个 daemon 来启动 DNS 系统?
答:
在 Unix Like 系统当中,使用 BIND 这个套件做为 DNS 的架设,至于 daemon 则是使用 named 这个 daemon !
 

最早的 Internet 其实是为了政府人员可以连上网络以进行资源的分享,另外,则是电子邮件的使用。而在早期使用的重要档案只有 /etc/hosts 这个,请教这个 hosts 档案的内容含有什么项目?
答:
这个档案的『格式』为 <IP> <主机名称> <主机别名(aliase)>,而,这个档案里面放置了至少一行,也就是:
127.0.0.1 localhost localhost.localdomain
另外,也可以将经常连接的主机 IP 与 HOSTNAME 的对应给他写进来!
 

请说明 DNS 的三种类型与相关的内容:
答:
master, slave 与 cache-only ,slave 主要在于备份, cache-only 仅进行快取的纪录,本身并无数据库档案!更详细的说明请参考上面。
 

正解档案(forward)反解档案(reverse)与内部循环使用的档案(loopback)主要的纪录功能为:
答:
正解文件在设定 hostname 对应到 IP 的纪录,主要的纪录有 A, NS, SOA, MX, CNAME 等等;
反解文件主要设定 IP 对应到 Hostname 的纪录,主要的纪录为 SOA, NS 与 PTR 等。
内部循环则是 localhost 与 127.0.0.1 的对应啦!
 

在主要的 DNS 设定档 /etc/named.conf 当中,有一个较为特殊的档案,他的类型为 hint ,请问这个档案的功能为何?
答:
这个档案主要是由 rs.internic.net 所下载下来的,主要记录了 root (.) 这个 zone 的 IP !可以让我们的 DNS Server 在找不到数据库时,可以到这个 root 去查询数据!
 

在 client 端搜寻 HOSTNAME 对应到 IP 的查询时,最重要的档案,以及该档案的主要用途为何?
答:
/etc/nsswitch.conf :可以用来设定查询主机名称的顺序!例如先查询 /etc/hosts 再查询 DNS 系统;
/etc/hosts :最早的名称解析器;
/etc/resolv.conf:这就是 DNS 系统的 resolver (解析器)了。
 

一般来说,在 Client 端使用的查询 HOSTNAME 的指令大多使用什么?
答:
nslookup :可以用来收集一部主机的相关信息;
dig:可以用来收集详细的主机信息;
whois :可以用来收集详尽的 DNS 主机信息。
host 则较为简单喔!
 
发表于 2003-7-24 13:41:25 | 显示全部楼层
感谢提供!
发表于 2003-7-24 13:48:56 | 显示全部楼层
经典,一篇绝好的学习文档.收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表