DNS在“TCP/IP”的网路世界里,每部电脑的身分都是由4个
数字所组成的“IPAddress”来辨识(例如168.95.192.1),这些
数字号码就像是我们的身分证号码一样,某些部份数字分
别代表不同的意义。当我们在使用网际网路资源时,如果
直接使用“IPAddress”来进行连线,那是最直接不过了!但
是,全部数字化的位址在使用上真的有些不够友善,光是
记一堆数字就够头疼的了!
网路位址vs.主机名称
还好,提供“TCP/IP”网路服务的作业系统都提供系统
管理者可以建立一个名叫“HOSTS”的档案(例如Linux/UNIX中
的/etc/hosts),在这个系统档案档案里,系统管理者可以将
已知的网路机器分别赋予一个「主机名称」并且相对映该
机器的“IPAddress”。如此一来,在进行网路连线时,使用
者就不必一定要直接指定“IPAddress”来连线,因为系统可
以提供应用程式透过“HOSTS”中所提供的「主机名称与位址
对照资料」取得该「主机名称」的「网路位址」。
这样子,使用网路程式时是方便多了,但是,国际网
路的机器成千上万,如果只是利用“HOSTS”的方式来处理
主机名称」与「网路位址」的对映工作,那实在是件很没
效率又几乎不可能的事。所以,如果网路使用的领域只是
单纯的内部网路,因为机器数目不多的情形,那麽使用
HOSTS”就可以应付网路连线上的需求了。
为了因应大型网路上「主机名称」与「网路位址」对
映的需求,就有所谓建立「名称伺服器」来负责以「主机
名称」查询「网路位址」的工作,依据建立的架构方式大
致有两种,“DomainNameSystem”(简称:DNS)、“NFSNetwork
InformationService”(简称:NIS)。我们都可以在Linux系统中
架设这两种服务程式。
“NIS”较早是由Sun所提出的解决方案,运用“RPC”的
功能来提供解决「主机名称与位址」的查询,“NIS”的伺
服程式大都是以“yp”起头的程式档案(ypbind、
ypinit….)。笔者并不准备在这里说明“NIS”伺服器的建立
方式。而是将焦点摆在「建立DNS名称伺服器」的话题上。
DNS服务型态的种类
时下在国际网路上所存在的「名称伺服器」一般都是
属於DNS伺服器,因此笔者才会将焦点放在“DNS”的建立
上。由於“DNS”已经有个相当标准的规定,因此虽然不同
平台上作业系统可能有相当的差异,但是建立“DNSServer”
的方式可能都非常类似。而对於使用“DNS”的方式也是大
同小异。关於使用或架设“DNS”的部份,可以大致归为下
面几类:
●使用远端名称伺服器:
如果自己主机上并没有架设“DNS”,可以设定一台已
知的「名称伺服器」作为本主机网路连线时的名称资讯的
提供者。在Linux系统中,我们可以藉由“/etc/resolv.conf”这
个系统参数档案来指定本主机的「远端名称伺服器」。例
如:
simon:~#cat/etc/resolv.conf
#
#电信局HINET的名称伺服器为168.95.192.1
#下面就设定该主机为本主机的「名称伺服器」
#
#
nameserver168.95.192.1
#
#
一般使用者环境大都是属於这一类的使用型态。
●所谓“Cache-Only”的名称伺服器:
一个「名称伺服器」也不可能拥有国际网路上所有的
主机资讯,因此它提供一个转送方式,将自己「名称伺服
器」无法处理的「查询要求」转送至上一层的「名称伺服
器」查询,然後将所得到的查询结果,传送给提出查询要
求的主机。
而“Cache-Only”的“DNS”就是该伺服器的主机资讯里除
了自己之外就没有了,它将所有的查询要求都转送至其他
伺服器去查询。
●“Primary”名称伺服器:
一个完整功能的「名称伺服器」,管理一个或数个
Domain”的机器资讯。而这些主机相关的资料都依照格式储
存於伺服器的档案目录中,然後会在伺服器启动时将这些
资料读入系统。
●“Secondary”名称伺服器:
基本上它也是一个完整功能的「名称伺服器」,只是
所不同的是,它的主机资料并非完全储存於伺服器所在的
档案目录,而由某个“PrimaryDNS”来提供。
在本次的主题里,我们会就以建立“Cache-Only”以及
Primary”的名称伺服器做个范例说明。
使用BIND-4.9.6建立DNSServer
在Linux系统里,我们使用“BIND”(BerkeleyInternetName
DomainNameServer)来建立我们的「名称伺服器」。
BIND”这个软体每个Linux安装套件都会有,所以你只要
确定在安装时把“BIND”软体安装至Linux系统中,那麽就已
经具备建立“DNSServer”的软体环境了。不过在架设“DNS”
之前,笔者建议读者最好能够对於网路主机名称的命名原
则先有些概念(不妨参考前几期HOPE_NET月刊上的网路专题、
或是坊间网路相关的书籍,我就不在此详述)。接下来我
们以一个假设环境来配合说明架设「DNS名称伺服器」的步
骤。假设环境的一些情形如下:
领域名称(Domain):simon.net
伺服器主机名称(Host):simon
伺服器网路位址(IP):192.9.100.1
根名称伺服器(RootDNS):hinet.net(168.95.192.1)
●建立“/etc/named.boot”启动设定档
“BIND”伺服程式在启动时首先会读取“/etc/named.boot”
这个控制档,因此首先就来进行“named.boot”的设定工作。
(A)“directory”是用来指定「主机相关资讯」资料档案的所
在目录。
(B)“named.boot”一般常用到的资料格式为「格式、领域、来
源主机或档案、备份档案名称」,除了设定“SecondaryDNS”
时较会用到备份档案这个栏位外,其馀大都只用到前叁个
栏位。关於档案名称部份并没有限制,除了“named.boot”不
可变更之外,其他的主机资料档案可以自行指定名称。(图
一)
(C)“cache”表示在<root.cache>这个档案设定着本伺服器的
上层网路名称伺服器。
“primary”则分别设定每个指定「领域」的主机的资料
档案。
(D)在「领域」这个栏位中「.」代表“OTHER”,在本例子
中,如果查询的主机所在领域并未特别定义时,则使用
cache」的设定转至上层名称伺服器查询。而对於我们自己
管理的「领域」则可以使用“primary”、“secondary”来定义
各别「领域」主机资料纪录所在。
<simon.net>是一般主机名称的形式,有些时候使用者
会以“IPAddress”来查询主机资讯,对此需求,也可以参照
<100.9.192.INADDR.ARPA>的格式来定义<192.9.100.x>的主机资
讯。
●建立“/etc/named.hosts”主机资料
在本例中“named.hosts”被指定为储存<simon.net>这个网
路上主机资料,因此我们就必须将本网路上的主机资料全
部建立在这个资料档案中。
(A)“SOA”这个栏位在每个「领域」资料档中只能有一个。
(B)指定<postmaster@simon.simon.net>是本名称伺服器的联络人
邮件信箱。
(C)<simonINA192.9.100.1>表示“simon.simon.net”这台主机的
位址」是<192.9.100.1>,接下来的另一行并未指定哪台主
机名称则表示该设定仍是针对<simon>这台主机。由於可设
定的资料项目不少,我们在此挑选常见的项目在此简要说
明。
<A>–指定网路位址
<CNAME>–设定主机的别名,例如<simon.simon.net>的别名是
<gopher.simon.net>
<HINFO>–可以使用一段文字描述主机环境。
<MX>–用来设定E-Mail传递交换的优先路径,例如范例中的
<simon5>的设定,<simon5.simon.net>的信件都先往
simon5.simon.net>这台主机传送,如果无法与该主机连线时
那就会往<simon.simon.net>传送。
<NS>–用来指定子网路的名称伺服器所在。
<PTR>–与<A>有点相对的功能,它可以指定某个“IP”是
指向某个主机名称,这样就可以以“IP”来查询主机的其他
资讯。
●建立“/etc/named.rev”
前面“named.hosts”是当网路的使用者以“xxx.simon.net”
的方式查询主机资讯时所参考的资料档,而这个
“named.rev”功能则是提供使用者以「192.9.100.x」查询主机
资讯时参考。
;————————–
;/etc/root.cache
;————————–
.99999999INNSHINET.NET
.HINET.NET99999999A168.95.192.1
;————————-EndofFile
●建立“/etc/root.cache”启动设定档
完成前面本地网路的主机资料的建立工作後,再来就
是设定本伺服器的「根伺服器」(RootNameServer)。下列应
该是最简单的设定内容了,读者不妨参照此设定。
●启动“BIND”伺服程式
完成这些主机资讯的建立工作後,最重要的工作就是
启动“BIND”的伺服程式<Named>,你可以直接以系统使用
者的身分执行此程式,在执行後,建议您最好执行<Ps>指
令检查一下<Named>是否成功执行。如果执行<Ps>有见到
<Named>那表示主要的控制档内容无误。
然後,你最好将启动「名称伺服程式」的工作加入
Linux系统启动程序中。以“SlackwareLinux”为例,请修改
/etc/rc.d/rc.inet2”这个档案中关於<Named>的设定,如下的
内容。
#/etc/rc.d/rc.inet2
…..#StarttheNAMED/BINDnameserver.
if[-f${NET}/named];then
echo-n“named”
${NET}/named
fi
……
…….
这样子,在下次启动系统时就会自动执行“BIND”伺服
程式,而您的Linux也就具有“DNSServer”的功能了。
测试查询「名称伺服器」的运作
为了确定「名称伺服器」的运作正常,因此在此提供
一些测试的方式供做参考。
●使用<Ping>
直接使用<Ping主机名称>的方式来测试是否可以成
功,这是最简单的方式,而在测试过程除了与自己网路上
主机连线之外,最好也要对外连线,以便测试<Cache>的设
定是否正确。使用<FTP><Telnet>等网路程式进行连线也
可以达到同样的目的。
●使用<Nslookup>
使用<Ping>可能只参考到主机的“IP”位址而已,而
如要查询主机资讯,那就得透过<Nslookup>这个程式来进
行。<Nsl-ookup>会与系统指定的「名称伺服器」连线并根
据使用者提出的查询条件由「名称伺服器」取得查询结
果。以下是一些使用例子。
重新读取「主机资料」
因为伺服程式是在启动时就将读取「主机资料」,因
此即使你在执行阶段更改了主机资料的内容,仍然不会生
效。必须重新启动<Named>才会使你更新过的资料生效。如
果遇上此情形,你可以用下列之一种来处理:
<kill-9named的PID>先杀伺服程式,再重新执行乙次。
<kill-HUPnamed的PID>让伺服程式进行重置的行为。
执行〈named.restart〉让重新伺服程式执行。
DNS