分享
 
 
 

FreeBSDDNS的体系结构

王朝system·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

通常,一台计算机只需要配置域名解析就可以了,不需要自己运行名字服务器守护进程,然而有些时候需要设置自己的名字服务器,这就需要FreeBSD下配置名字服务器BIND(Berkeley Internet Name D omain)。BIND也是由伯克利开发的一个著名软件,它的执行程序为named,运行在Internet上几乎所有的名字服务器上,构成Internet的名字系统。

由于普通的客户计算机并不需要运行named,因此在其/etc/rc.conf配置文件中,named_enable 应为NO。当需要运行named以提供DNS服务的时候,就要将这个参数的值改为”YES”。DNS的体系结构

Internet上的DNS名字服务为一种分布式的体系,由分布在Internet各地的DNS服务器上的named 守护进程为整个Internet提供本域内计算机的名字解析服务。DNS域名结构为分级方式,例如www.online.ha.cn 中最后面的cn为顶级域名,由后向前分别划分为不同级别的域。

Internet上的顶级域名有两种,一种象cn这样的国别代码,另一种是如同edu、org、net、com 等分类代码。国别顶级域下的次级域名同样可以按照地域或组织结构来分类划分。

那么要进行名字解析,就需要从域名的后面向前,一级级查找这个域名。因此Internet上就有一些DNS服务器为Internet的顶级域提供解析任务,这些DNS服务器称为根DNS服务器。知道了根DNS服务器的地址,就能按级查找任何具有DNS域名的主机名字,BIND代码中就包括了这些根DNS服务器的地址。

名字服务使用zone的概念来表示一个域内的主机,然而zone与域也有所区别,zone只是域的一部分,而不是整个域。因为zone中不包括域下的子域。例如域名www.example.org.cn的域为example.org.cn ,这是一个独立的zone。这个域下可由子域组成,例如www.sub.example.org.cn就属于其子域sub.example.org.cn,子域也是一个独立的zone,并不包括在example.org.cn 这个zone之内,作为域的example.org.cn中就包括sub.example.org.cn子域。

除了从名字查找主机的IP地址这种正向的查找方式之外,另外还有从IP地址反查主机域名的解析方式。很多情况下网络中使用这种反向解析来确定主机的身份,因此也很重要。查找名字的反向解析是从前面的网络地址向后面的节点地址,逐级查找,因此IP地址zone是IP地址的前面部分。然而由于一个主机的域名可以任意设置,并不一定与IP地址相关,因此正向查找和反向查找是两个不同的查找过程,需要配置不同的zone。使用DNS查询工具

用来进行DNS查询的一个非常有用的工具是nslookup,可以使用它来查询DNS中的各种数据。除了可以在命令行下直接进行基本的DNS查询之外,直接启动nslookup将进入一个交互模式,这里能查询各种类型的DNS 数据。

的名字解析数据可以有各种不同的类型,有设置这个zone的参数的SOA类型数据,有设置名字对应的IP地址的A类型数据,有设置从IP地址反向解析DNS名字的PTR数据,有定义服务与这个zone的DNS服务器的NS数据,以及定义主机别名的CNAME数据。这些不同类型的数据均可以通过nslookup的交互模式来查询,需要使用 set type命令设置相应的查询类型。$ nslookupDefault Server:

ns.hazzptt.net.cnAddress:

202.102.224.68> set type=ns> yahoo.comServer:

ns.hazzptt.net.cnAddress:

202.102.224.68Non-authoritative answer:yahoo.com

nameserver = NS2.DCA.yahoo.comyahoo.com

nameserver = NS5.DCX.yahoo.comyahoo.com

nameserver = NS.EUROPE.yahoo.comyahoo.com

nameserver = NS1.yahoo.comAuthoritative answers can be found from:NS2.DCA.yahoo.com

internet address = 209.143.200.34NS5.DCX.yahoo.com

internet address = 216.32.74.10NS.EUROPE.yahoo.com

internet address = 195.67.49.25NS1.yahoo.com

internet address = 204.71.200.33>

这个例子就使用nslookup来查询yahoo.com这个zone的名字服务器,需要将类型设置为ns来执行查询。用来帮助获得DNS数据的工具还有很多,如dig能迅速返回整个zone的名字解析数据,dnswalk可以用来帮助查询名字服务器的设置。这些工具都可以用来帮助查找DNS的设置问题。配置缓冲或转发方式的named

在Internet中主要使用名字进行连接,因此网络中的DNS查询会十分频繁。很多情况下,会有大量且重复的DNS查询。尤其在使用拨号连接的条件下,由于名字服务器位于ISP端,即使是曾经查询过的名字,其信息仍然保存在线路的另一端的名字服务器的缓冲区内,重复的DNS查询将占据宝贵的线路带宽。并且DNS查询还往往使得网络连接软件不能正确获得超时信息,不能适时断开连接以节省电话连接时间。

因此,最好的办法是将查询结果保存在本地计算机上,以避免重复查询造成的无谓的网络流量。虽然很多TCP/IP 客户机能够在本机内保存一个名字解析缓冲区,但这个缓冲区相对来讲太小了,起不到很有效的作用,然而如果要将这个缓冲区设置的较大,又不能及时刷新名字解析数据。要想很好的缓冲DNS数据,最好的缓冲区还是DNS服务器本身,因为DNS 的实现方式就是一种经常刷新的缓冲方式,并且named可以根据不同zone的不同设置,来实现数据刷新。

因此,最简单的办法就是设置一个具备缓冲能力的名字服务器,它将能够用做名字解析的缓冲,这就要需要设置名字服务器的过程。在/etc/resolv.conf中,将127.0.0.1作为第一个可选服务器,其他DNS服务器作为备份,使得名字查询通过本地的名字服务器进行,以利用它的缓冲机制; 在/etc/rc.conf中,将named_enable设置为”YES”,允许启动named,rc.conf中有关named的其他选项不需改变; 改变到/etc/namedb目录下,运行make-localhost程序,这将产生针对本计算机的解析数据localhost.rev文件; 修改/etc/namedb/named.conf文件,使其符合一个转发系统的要求。 启动名字服务器,可以使用root身份直接执行named守护进程,并在rc.conf中更改named_enable的设置值。 设置named.conf

要成功配置named,最重要的一步就是改变配置文件named.conf,一个用于转发的设置文件应为:

options {

directory "/var/namedb";

datasize 20M;

forward only;

forwarders {

202.102.224.68

};};zone "." {

type hint;

file "named.root";};zone "0.0.127.in-addr.arpa" {

type master;

file "localhost.rev";};

这个设置文件中去除了任何注释项,named中使用与C++相同的注释方式,即用两个斜线来表示一行注释,而设置语句也类似C的语法。

第一个语句options用于设置named的参数,directory指明named的工作目录为/etc /namedb,datasize用于设置缓冲区的大小,forward only和forwarders用于指明这个服务器只是一个转发服务器,并设置转发的名字服务器的地址。这两个转发选项不是必须设置的,不进行设置时named 就能很好的适应解析和缓冲任务。这样名字服务器初始时就从根名字服务器中获得信息,这些信息将保存在named的缓冲区内,此后就可以查询缓冲区内的相关服务器来获得进一步的名字解析。

第二个语句用于设置根zone,这用于设置Internet上的根名字服务器,一切本地无法解析的数据将发送给那些根名字服务器进行解析,设置了工作目录下的named.root文件中记录了这些根名字服务器的地址,记录根名字服务器的文件名字也可能为root.hints。第三句定义了对127.0.0.0的反向查询的数据,0.0.12 7.in-addr.arpa为一个反向解析zone,其IP地址也是反序排列的,并且使用in-addr.arpa 后缀,而对应的反向解析数据在localhost.rev文件中定义。

BIND的当前版本为8,之前的版本为4.9.x,它们使用named.boot作为named的配置文件。大多数Unix版本,包括大多数商业Unix在内,还没有更新他们的名字服务器到当前的BIND 8,仍然运行老版本的named。但必须注意named.boot文件的格式与named.conf不同,不能混用。BIND 8提供了很多优秀的特性,因此最好立即升级到新版本。

named.root文件给出了Internet上的多个根名字服务器,用于初始化named的缓冲区。借助这些名字服务器的帮助,一台名字服务器能对整个Internet进行查询。一般不需要改变这些文件的内容,但是如果要建设一个内部网,不与Internet连接,就不需要named.root中的这些根名字服务器的地址,而要更改为自己网络内的根名字服务器的地址。事实上,没有任何内部网络能和Internet相比拟,需要使用多台根名字服务器来维护其域名解析系统,直接设置一台或几台名字服务器,并指定客户计算机使用这些名字服务器就满足要求了。zone数据文件的格式

@

IN

SOA

freebsd.example.org.cn. root.freebsd.example.org.cn.

(

1998012314

; Serial

3600

; Refresh

900

; Retry

3600000

; Expire

3600 )

; Minimum

IN

NS

freebsd.example.org.cn.1

IN

PTR

localhost.

这是根据计算机的名字和域名产生的localhost.rev文件,这个文件定义了对127.0.0.0这个反向zone的反向名字解析数据,可以用于从IP地址查询主机的名字。

第一个设置定义了一个SOA记录,这个类型的记录定义了包含一个zone的开始,并用于设置zone中数据刷新时间等参数。在这个记录中,@代表一个zone,由于这个设置文件中没有设置它的值,那么它就是named.con f中的定义语句中zone的值,这里就为0.0.127.in-addr.arpa。空白字符分隔之后为IN,这是用于表示定义的关键字,SOA表示这一行的类型为SOA记录,接下来的freebsd.example.org.cn. 为这台主机的全名,注意,这里以 ”.” 结尾,如果在名字解析配置文件中不以点结尾,named将自动附加上当前 zone的值;此后给出了一个联系用的email地址,这里为root@freebsd.expampleorg.or g.cn,但是由于@在设置文件中有特殊含义,因此使用点代替;

再后面就是SOA记录的参数,这些参数使用了括号,并分在几行分别设置,这主要是为了使得设置更为清楚,将它们放在同一行内也可以。SOA记录的参数有序列号,用于标识SOA记录数据 ── 其他名字服务器使用这个数据与自己缓冲区内的数据对比,来判断这个zone的数据是否更新,否则就没有必要传输全部zone的数据。因此可以使用日期来表示不同的序列号,以使得更改过SOA记录之后,其他名字服务器能即使刷新数据;刷新时间 ── 用于告诉其他名字服务器何时来检查zone中的数据是否更新,这里配置为1小时(3600秒),这个时间间隔对于不经常改变的服务器来讲太小了,应该配置为一天或更大;第三个参数为连接的尝试次数;然后是过期时间,表示一旦某个zone的正式名字服务器不能提供其服务,其他名字服务器在其缓冲区中保存多久该zone的缓冲数据;最后一个参数指出其他名字服务器缓冲这个文件内容的最小时间间隔,在这个间隔内不应该刷新该zone的名字解析数据。

当括号结束之后,这个SOA设置项就结束了。而第二项设置定义了一个名字服务器记录,这个设置直接用空格和IN 开头,表示这一项仍然使用上一项中的设置,这里就是@。NS代表这一项定义是名字服务器类型,最后给出了名字服务器的名字freebsd.example.org.cn.,表示这个zone的名字解析数据位于这个名字服务器中。

第三项定义了一个反向查询指针记录PTR,第一列为1,由于没有使用点结尾,因此其全形式应为127.0.0.1 ,第三列PTR表示这个记录为PTR记录,是给定IP地址返回名字的查询形式,最后一列即是127.0.0.1的名字localhost。定义自己的名字服务

缓冲形式的名字服务只能用于名字查询,但没有定义任何名字数据。如果要想让自己的网络有一个域名,并为其他计算机都提供服务,就必须使用完整配置的名字服务器。正向解析zone

第一步要为自己的子域在/etc/namedb/named.conf文件中定义zone,并修改设置文件 named.conf。在named.conf文件中,首先要删除forward的相关设置,使服务器不仅用于转发请求,也能拥有自己的名字解析数据库。然后再增加一项新zone的定义:

zone "bsdgroup.example.org.cn" {

type master;

file "db.bsdgroup";};

这一项描述了bsdgroup.example.org.cn的zone对应的配置文件为db.bsdgroup。其中 type master表示这台DNS服务器为这个zone的主服务器,对于一个zone来讲,可以由多个DNS 服务器提供服务,以提供一定的备份能力。当为一个zone使用多个DNS服务器的时候,通常可以设置一个主服务器,而其他服务器为辅服务器,辅服务器将从主服务器上获得zone的解析数据,而本地文件只是用于万一主服务器出现故障的情况。

更改过named.conf中的zone设置项,就能创建zone的解析数据文件db.bsdgroup,用于保存zone内的解析数据。

@

IN

SOA

ns.bsdgroup.example.org.cn. admin.example.org.cn. (

1999010801 ; Serial (date, 2 digits version of day)

86400

; refresh (1 day)

7200

; retry (2 hours)

8640000 ; expire (100 days)

86400 ) ; minimum (1 day)

IN

NS

ns.bsdgroup.example.org.cn.

IN

NS

ns1.bsdgroup.example.org.cn.

IN

MX

10

ns

IN

MX

20

ns1ns

IN

A

192.168.4.21ns1

IN

A

192.168.4.22www

IN

CNAME

freebsd.example.org.cn.

这个设置文件中首先为这个zone定义了SOA记录,接下来定义了服务于这个zone的两个名字服务器。当为一个zone定义名字服务器时,有的管理员以为将名字服务器设置的越多越能提供备份,其实并不是这样。如果定义的一台名字服务器,其named.conf(或named.boot)设置文件中并没有设置它为这个zone服务,那么该名字服务器上就没有这个zone的解析数据,这就导致一些客户从这个名字服务器中查询这个zone的数据失败。这个配置错误就是Internet中经常发生的Lame Server错误,一些老版本的named不能检测并纠正这个错误,就会导致网络上部分客户计算机不能解析这个zone。同样,多个名字服务器之间还应该保持zone数据一致,正确划分好主/辅服务器可以很好的解决这个问题。

然后又针对这个zone定义了两个MX记录,表示对应于这个zone的邮件服务器为ns和ns1,这样在电子邮件中的地址中,就不需要使用具体的计算机名字ns.bsdgroup.example.org.cn,而可以直接使用bsdgroup.example.org.cn。其中ns的参数为10,ns1的参数为20,用于标识不同邮件服务器的优先级,一个邮件总是首先向低优先级的邮件服务器发送,只有当这个服务器出现故障时,才会尝试其他的邮件服务器。

这个文件中还定义了几个A记录,这个记录具体定义ns和ns1的IP地址,然后定义了一个 www的计算机,但这只是freebsd.example.org.cn的一个别名。

这个zone是对该zone中的计算机进行正向名字查询,从名字返回相应的IP地址,进一步可以配置反向查询zone,输入要查询的IP地址,返回正确的主机名字。反向解析zone

前面提到的localhost.rev就是一个反向查询zone文件。因此要定义其他反向解析zone,就与它相似。首先在named.conf中增加一个设置语句:

zone "4.168.192.in-addr.arpa" {

type master;

file "bsdgroup.rev";};

网络地址以反方向的方式写出,并使用in-addr.arpa后缀,表示一个反向查询zone为192.168.4。然后创建反向解析数据bsdgroup.rev: @

IN

SOA

ns.bsdgroup.example.org.cn. admin.example.org.cn.

(

1998012314

; Serial

3600

; Refresh

900

; Retry

3600000

; Expire

3600 )

; Minimum

IN

NS

ns.bsdgroup.example.org.cn.21

IN

PTR

ns.bsdgroup.example.org.cn.22

IN

PTR

ns1.bsdgroup.example.org.cn.

注意,这里正向解析和反向解析位于同一台服务器上,这只是一种较简单的情况,但对 Internet上更广泛的复杂情况,并不总是如此。维护名字服务器

当完成了这一步之后,就可以把本网络上所有计算机的解析数据,使用A记录增加到 db.bsdgroup中,使用PTR记录增加到bsdgroup.rev文件中去,并重新启动named守护进程,或者向named发送SIGHUP信号(使用kill或killall),使其重新读取设置文件。那么所有使用这台计算机作名字服务器的计算机将能正确查询相应的名字和IP。

但是,外部的计算机并不知道有这个名字服务器的存在,因此外部计算机还无法查找到正确的结果。因此就需要将这个名字服务器,及其提供服务器的域,登记到Internet上的正式名字服务器上,以便这个名字服务器上的zone数据通过正式服务器发布到整个Internet。最方便的做法是将这个名字服务器登记到其上一级名字服务器上,如在example.org.cn的名字服务器中可以指定bsdgroup.example.org.cn子域的zone设置及名字服务器。

bsdgroup.example.org.cn.

IN

NS

192.168.4.21

此后,外部计算机才能查找bsdgroup这个域的内容。

这个例子中使用了两个名字服务器ns和ns1,为了保持两个服务器中的数据一致,两个服务器一个需要作为主服务器,另一个必须作为辅服务器。主服务器ns在配置文件named.conf中使用 type master来说明,而辅服务器ns1使用type slave来说明:

zone "bsdgroup.example.org.cn" {

type slave;

file "db.bsdgroup";};

这使得ns1首先尝试从ns(192.168.4.21)中获得zone的配置数据,如果不能成功再从本机配置文件中获得。这样既能起到备份作用,又能保持解析数据尽量一致。

named在启动和运行的过程中将不断向控制台打印信息,这些信息也被写入/var/log/messages 文件中。查看这些文件可以判断是否有错误发生。

Feb 15 01:26:17 roke named[6091]: starting.

named 8.1.1 Sat Feb 14

00:18:20 MET 1998 ^Iwb@example.org.cn:/var/tmp/bind-8.1.1/src/bin/namedFeb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa"

(IN) loaded (serial 1)Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ppp0)Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040Feb 15 01:26:17 roke named[6092]: Ready to answer queries.

此外,随着Internet的发展,根DNS服务器也会不断更新,因此保持自己的DNS服务器中 root.hints(或named.root)文件与Internet上的真实根文件服务器同步也是非常重要。通常可以使用dig来从一个根文件服务器上取得这个文件:

# cd /etc/namedb# dig @rs.internic.net . ns >root.hints.new

如果一切正常,就可以将root.hints.new复制为named.root,并重新启动named。此外还有一些常用的工具程序有nslookup,dig,dnswalk,named-xfer等,能用来分析DNS设置,帮助解决设置问题。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有