如何在Linux上建立DNS服务器•什么是DNS服务器•使用DNS的应用条件•LINUX下的DNS简介•named•/etc/named.conf•ndc域名服务器(DNS)在TCP/IP网络上,各个设备必须被分配一个惟一的地址。地址的语法由IP协议指定,称为IP地址。IP地址是4个0、255范围内的数字,由点号分开,例如127.0.0.1。Internet或企业Intranet中的计算机使用这些数字地址与其他计算机通信。人们在使用网络资源的时候,倾向使用有代表意义的名称。这正是域名系统(DNS)出现的原因。DNS是一个分布式数据库系统,提供了主机名称与IP资源之间的映射。DNS按逆向树的方式工作,很类似于文件系统中的目录结构。为了便于管理,DNS被划分为域。从顶层DNS结构以下的第一层独立的实体是七个顶层域,它们按照不同类别划分。商业组织使用.com域;教育组织使用.edu域;政府部门使用.gov域等等。这些域可以被进一步划分为代表域中独立企业和分支的子域。DNS的名字服务部分是基于客户服务器机制的,客户查询名字服务器(即DNS服务器)查找主机地址信息。各个DNS区域中都设置了一台主名字服务器,它维护了区域中所有主机信息的权威性数据库。除了本地主机信息,名字服务器还维护了如何与其他名字服务器通信的信息。如果名字服务器中没有保存特定域的信息,它在接收到关于该域的请求时,将继续沿着域层次把请求向上或向下传递,直到查找到一个权威答案。最常用的DNS名字服务器包括主名称服务器和二级名称服务器。1.主名称服务器主名称服务器时从本地硬盘文件中检索DNS登记项的服务器。对于特定区域,主名称服务器是具有权威性的,因为它不需要从其他区域的名字服务器中再次查询DNS信息。每个区域中都只有一个主名字服务器。一台服务器可以用做某个区域的主服务器,同时作为另一个或多个区域的二级服务器2、二级名字服务器二级名字服务器中保存了主名字服务器DNS数据库的只读副本。当二级名字服务器启动时,它与主名称服务器联系并请求一个完整的主DNS数据库的副本。在最初的复制之后,二级名称服务器定时与主名称服务器联系,并下载最新的DNS信息。这个下载过程被称为“区域传输”,它保证了主名称服务器上修改的DNS信息跨越系统被复制。区域传输通常每2到4小时进行一次。二级名字服务器可以从多台主名字服务器中接收DNS更新信息。换句话说,一台主机可以作为多个区域的二级DNS服务器。当本区域不能解析某个DNS请求时,服务器可以将请求转发给网络中的其他DNS服务器进行解析。主DNS服务器和二级DNS服务器都可以实现这种转发的功能。要配置DNS服务器、二级DNS服务器,需要在netconf中选择“DomainNameServer(DNS)”菜单项。下面,介绍其中的选项:●“domain”定义了DNS管理的域名。●“reversemapping”建立了一个伪域,●“secondaries”用于创建二级服务器。把IP地址转换伪主机名称。●“forwarders”和“forwardzones”用于设置DNS服务器的转发功能。使用DNS的应用条件下面假定我们需要建立一台企业网的DNS主服务器,应用条件如下:(1)一个C类网段地址(本例中假定是192.168.2)(2)企业域名为my.com,并已注册(主域名服务器地址192.168.2,主机名为linux.my.com)(3)企业网通过路由器与Internet连接•假如你的应用环境与上述条件不同,可在上述例子的基础上针对以下情况作修正:•(1)多个网段•(2)封闭的内部网•(3)只能访问局部公共网的情况(如169网、上海热线等)LINUX下的DNS服务器•DNS服务器的主体是域名服务器进程named,named启动后向DNS客户机提供域名解析服务,把域名转换成IP地址。/etc/rc.d/init.d/namedstart启动域名服务•named启动时需要读取一个初始化文件,缺省情况下是/etc/named.conf,所以/etc/named.conf是named的基本配置文件。建立named配置文件/etc/named.conf•/etc/named.conf是基本的配置文件,但不包含任何DNS数据,针对我们前面的假定,我们先建立以下/etc/named.conf,其内容如下:•其中以“;”开头的行是注释行,其他各行含义是•(1)diretory/var/named指定named从/var/named目录下读取DNS数据文件。这个目录用户可自行指定并创建,指定后所有的DNS数据文件都存放在此目录下。(2)primarymy.comdb.my•指定named作为my.com域的主域名服务器,db.my文件中包含所有*.my.com形式的域名转换数据。(3)primary0.0.127.IN-ADDR.ARPAdb.127.0.0•指定named作为127.0.0网段地址转换主服务器,db.127.0.0文件中包含了127.0.0.*形式的地址到域名的转换数据。(127.0.0网段地址是局域网接口的内部loopback地址)(4)primary33.22.192.IN-ADDR.ARPAdb.192.22.33•指定named作为192.22.33网段地址转换主服务器,db.192.22.33文件中包含了所有192.22.33.*形式的地址到域名的转换数据。(5)cache.db.cache•指定named从db.cache文件中获得Internet的顶层“根”服务器地址要注意(3)(4)两行中的网段地址是倒写的建立各个DNS数据文件下一步,要按/etc/named.conf中的定义,建立各个DNS数据文件。(1)建立正向域名转换数据文件db.my•根据/etc/named.conf的定义,我们在/var/named目录下建立db.my,其中应该包括所有在my.com域内的主机节点。但在机器数量较多时,为了调试方便,建议一开始只把几台节点的数据放入文件,待named正常工作后再把其他节点的数据补充进去。下面是db.my的例子:•@INSOAlinux.my.com.root.linux.my.com.(•199511301;serial,todaysdate+todaysserial#•28800;refresh,seconds•7200;retry,seconds•3600000;expire,seconds•86400);minimum,seconds•NSlinux.my.com.•MX10support.my.com.•localhostA127.0.0.1•linuxA192.22.33.20•support2A192.22.33.102•hp712A192.22.33.160•supportA192.22.33.100•mailMX10support.my.com.•MX20support2.my.com.••ftpCNAMEhp712.my.com.•nsCNAMElinux.my.com.•其中第一行是SOA记录,定义了域名数据的基本信息,依次是DNS服务器名、DNS管理员邮件地址,括号内的第一个数字是文件版本号,每次本文件内容修改后,必须更改此号。其余数字与DNS服务器直接的数据交换有关,在这里我们不需要改动。•括号后面有一条NS记录和一条MX记录,定义了域名服务器本身的域名和username@my.com形式邮件地址所对应的邮件服务器名字。•在此以下是各种域名/地址转换数据,其中A记录是DNS域名到IP地址的记录,是必须有的,以hp712.my.com为例,在A记录中域my.com被省略,只写成hp712,named在处理时会根据named.conf中的定义自动加上my.com,而其对应IP地址为192.22.33.160。•另一种记录是MX记录。MX是邮件地址转换记录,本例中定义了将username@mail.my.com的邮件地址转换成username@support.my.com或username@support2.my.com,即实际上真正的邮件服务器是support.my.com和support2.my.com,其中support.my.com的优先数为10,support2.my.com的优先数为20,所以通常邮件首先被发往优先数小的主机support.my.com。•还有一些是为方便提供的CNAME记录。CNAME定义了一些主机的别名,比如我们将hp712.my.com作为公司的服务器,所以我们提供了的别名,用户只需要根据习惯就可以访问公司的、ftp服务器了,如果将来我们换用别的主机作服务器,只需要修改CNAME记录就可,对用户没有影响。•注意:MX和CNAME记录最后的带域名的主机名后必须带一个“.”建立反向DNS数据文件•建立反向DNS数据文件db.127.0.0和db.192.22.33•反向DNS数据文件用来提供根据IP地址查询相应DNS主机名,每个网段分别有一个数据文件。•对于内部网段127.0.0通常只有一个地址,即127.0.0.1loopback地址,db.127.0.0内容如下:•@INSOAlinux.my.comroot.linux.my.com.(•1997022700;Serial•28800;Refresh•14400;Retry•3600000;Expire•86400);Minimum•INNSlinux.my.com.••1INPTRlocalhost.•而外部网段的数据文件db.192.22.33中包含所有主机IP地址到DNS主机名的转换数据。db.192.22.33内容如下:•@INSOAlinux.my.com.root.pc590.my.com.(•199609206;Serial28800;Refresh•7200;Retry•604800;Expire•86400);MinimumTTL•NSlinux.my.com.•;•;Allhosts•;•20PTRlinux.my.com.•102PTRsupport2.my.com.•100PTRsupport.my.com.•160PTRhp712.my.com.•反向DNS数据文件中的主要部分是PTR记录,PTR记录中的IP地址都只有主机号,named会根据named.conf的定义自动加上前面的网络号,注意后面的主机名要附加一个“.”获得db.cache文件•在Linux系统上通常在/var/named下已经提供了一个named.ca,该文件文件中包含了Internet的顶层域名服务器,但这个文件通常会发生变化,所以建议最好从Internic下载最新的版本。该文件可通过匿名ftp从ftp.rs.internic.net下载,在domain目录下,文件名为named.root。注意该文件下载后要拷贝到named的工作目录并重命名成named.conf中指定的文件名,本文中为db.cache。五、启动和测试named•首先,用/etc/rc.d/init.d/namedstart启动named:•然后,为了使用和测试named,要把Linux设置在使用DNS状态。方法是在/etc目录下,创建resolv.conf文件。以我们的例子,/etc/resolv.conf内容为:•searchmy.com•nameserver192.22.33.20•然后,我们就可以测试named了。•Linux和其他Unix系统均提供了nslookup工具,在命令行状态下输入:•nslookup就进入交换式nslookup环境,如果named正常启动,nslookup会显示当前DNS服务器的地址和域名,否则表示named没能正常启动。下面简单介绍一些基本的DNS诊断:1)检查正向DNS解析