Linux环境下DNS服务器的配置

来源:互联网 发布:java布尔类型 编辑:程序博客网 时间:2024/04/25 12:00

    DNS是域名系统Domain Name System的缩写,是一种组织域层次结构的计算机和网络服务命名系统,当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与此名称相关的IP地址信息。今天,我就给大家介绍一下目前常见的域名解析方法以及如何在Linux系统上架设DNS服务器,希望能够给各位朋友的DNS学习带来一些帮助。

    域名原理简介

  在DNS中,各个域分别由不同的组织管理。每个组织都可将它的域再分成一定数量的子域,并将这些子域委托给其他组织管理。域名被用做DNS数据库中的索引,子域中任何域名都被认为是域的一部分。判断一个域是否为另一域的子域,简单方法是比较它们的域名,一般子域名以其父域名结尾。

  设计域名系统的一个主要目的是让管理分散化。管理域的组织将该域划分成子域,每一个子域可以由其他组织管理意味着那些下级组织负责维护自己子域的所有数据。他们可以改变数据,甚至可以将自己管理的子域再划分成更多的子域并重新分配,而父域中仅包含指向这些子域的指针。

  实现域名查询和提供域名信息的程序被称为域名服务器。通常域名服务器拥有部分域名空间(称之为区Zone)的完整信息,一个域名服务器可以拥有对多个区的授权。域既包括了该层主机,又包括了子域的所有信息;而区仅包含了一个域中除了分配出去让其它组织管理的子域以外的域名数据信息。如果一个域没有分配任何子域,则该区包含该域的所有域名数据信息。

  DNS定义了PM(Primary Master)和SM(Secondary Master)两类域名服务器。PM从配置文件中读取区域数据,这些数据对整个区域来说都是具有权威性的。SM域名服务器是从其它具有该区授权的PM域名服务器上获得区数据,并定期查询PM域名服务器以保证区数据为最新版本。一般情况下,最好设立一台PM域名服务器和若干台SM域名服务器。这样可以分担负载,以确保区中所有主机都有比较靠近的域名服务器方便访问。

  对域名系统的访问是按照客户/服务器模式进行的,采用缓存(Caching)技术在保证数据可靠真实性的同时,又保证了较高的效率。应用程序一般是利用解析器来实现域名解析的。解析器是一组库函数,任何需要解析域名的应用程序都会调用这组函数来完成域名解析工作。解析器是应用程序实现域名查询的接口。

  域名服务器在接收到客户的查询请求时,一般是按照递归的方式来进行的。下面用一个例子来说明什么叫递归方式查询。一个域名服务器MyDM接收到查询http://www.linuxaid.com.cn的查询请?...铀僖院蟮牟檠?

  域名服务器有生存期(TTL)的概念,一旦生存期到了,名字服务器必须丢弃缓存数据并从权威的名字服务器中重新获取新的数据。这样可以确保域数据在整个网络上的一致性。

  从TCP/IP协议栈的角度来看, DNS属于应用层协议,运行在传输层之上,但是它并不使用TCP提供的服务,而是使用UDP服务。

        域名解析的方法

  1、最早的域名解析方法

  最简单的主机名解析方法是,在一个文件中记录所有的主机名以及与其对应的IP地址,并保证该文件中主机名的唯一性,通过检索文件便可以完成主机名的解析。

  采用这种最简单的解决方法有其历史原因:在整个70年代,APRANET只是一个小规模的、由数百台主机所组成的团体。于是为了解决主机名解析问题,就将连接到ARPANET上的每台主机名和与其所对应的地址都保存在HOSTS.TXT文件中。这样每增加一台机器,就必须修改一次HOSTS.TXT文件。随着网络的不断发展,网络中的主机数量爆炸性地增加,这种域名解析方法已经无法适应新的解析需要了。

  2、分布式的域名服务器

  在这种分布式的域名服务器体系中,每一台域名服务器( DNS )只负责解析属于自己这一部分的主机域名。

  一般来说,如果你所处的公司或组织所拥有的主机并不多,一般是将域名的解析工作交给自己的ISP域名服务器来完成。而如果你所在的组织主机比较多,我们就可以组建自己的域名服务器负责解析你所在组织的主机

        Linux环境下的编译和安装

        在Linux环境下,需要Bind软件的支持,实现DNS服务。

  Bind的安装有两种方式。一种是以RPM包的方式安装,另一种是使用源程序进行编译。RPM包安装方式非常简单,只要使用命令:

  rpm -Uhv bind-8.2.2-p5-9.i386.rpm
  rpm -Uhv bind-devel-8.2.2-p5-9.i386.rpm
  rpm -Uhv cache-nameserver-6.2-2.noarch.rpm

  就可以安装成功。在此不再详述。下面主要说明使用源程序进行编译这种方式。

  1.软件的下载

  下面的示例在Red Hat Linux 7.1下测试通过,需要安装者具有root权限。这里使用的Bind的版本号是8.2.2-patchlevel5。注意在真正的网络应用中(非测试学习环境)使用Bind时一定要下载最新版本,因为以前的版本中有一些安全漏洞。Bind主页为http : //www.isc.org/,下载bind-contrib.tar.gz, bind-doc.tar.gz, bind-src.tar.gz。

  最好在编译前和编译后都做一张系统中所有文件的列表,然后用diff命令比较它们找出其中的差别,并知道到底把软件安装在哪里。只要在编译之前运行 find /* >dns1命令,在编译和安装完软件之后运行find/*>dns2命令,最后用d i ff dns1 dns2 >dns命令找出变化。显示如下:

  [root@Aid /]# mkdir /var/tmp/bind
  [root@Aid /]# cp bind-contrib.tar.gz /var/tmp/bind/
  [root@Aid /]# cp bind-doc.tar.gz /var/tmp/bind/
  [root@Aid /]# cp bind-src.tar.gz /var/tmp/bind/

  我们创建了一个名为“bind”的目录,用它来处理tar文档,并转到新的“bind”目录(cd/ var/ tmp/bind),解压tar文件:

  [root@Aid bind]# tar xzpf bind-contrib.tar.gz
  [root@Aid bind]# tar xzpf bind-doc.tar.gz
  [root@Aid bind]# tar xzpf bind-src.tar.gz

  2.编译配置和优化

  编辑Makefile.set文件(vi /src/port/linux/Makefile.set),并加入:

  'CC=egcs -D_GNU_SOURCE'
  'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro
  -march=pentiumpro -fomitframe-
  pointer -fno-exceptions'
  'DESTBIN=/usr/bin'
  'DESTSBIN=/usr/sbin'
  'DESTEXEC=/usr/sbin'
  'DESTMAN=/usr/man'
  'DESTHELP=/usr/lib'
  'DESTETC=/etc'
  'DESTRUN=/var/run'
  'DESTLIB=/usr/lib/bind/lib'
  'DESTINC=/usr/lib/bind/include'
  'LEX=flex -8 -I'
  'YACC=yacc -d'
  'SYSLIBS=-lfl'
  'INSTALL=install'
  'MANDIR=man'
  'MANROFF=cat'
  'CATEXT=$$N'
  'PS=ps -p'
  'AR=ar crus'
  'RANLIB=:'

  第一行说明使用的GCC编译器的名字是egcs。第二行是优化参数。“DESTLIB =”这一行说明Bind所需的库函数目录,“DESTING =”说明Bind的include目录在哪里。输入下面的命令:

  [root@Aid bind]# make -C src
  [root@Aid bind]# make clean all -C src SUBDIRS=../doc/man
  [root@Aid bind]# make install -C src
  [root@Aid bind]# make install -C src SUBDIRS=../doc/man

  make命令把所有的源文件都编译成二进制文件,接着“make install”把二进制文件和相关的配置文件安装到相应的目录中。

  [root@Aid bind]# strip /usr/bin/addr
  [root@Aid bind]# strip /usr/bin/dig
  [root@Aid bind]# strip /usr/bin/dnsquery
  [root@Aid bind]# strip /usr/bin/host
  [root@Aid bind]# strip /usr/bin/nslookup
  [root@Aid bind]# strip /usr/bin/nsupdate
  [root@Aid bind]# strip /usr/bin/mkservdb
  [root@Aid bind]# strip /usr/sbin/named
  [root@Aid bind]# strip /usr/sbin/named-xfer
  [root@Aid bind]# strip /usr/sbin/ndc
  [root@Aid bind]# strip /usr/sbin/dnskeygen
  [root@Aid bind]# strip /usr/sbin/irpd
  [root@Aid bind]# mkdir /var/named

  strip命令去掉目标文件中的所有符号信息。这样二进制程序就会缩小一些,可以提高程序的性能。mkdir命令创建一个“/var/named”目录。

  3.清除不必要的文件

  [root@Aid /]# cd /var/tmp
  [root@Aid tmp]# rm -rf bind/

  这些命令删除用来编译和安装BIND/DNS的源文件。

        域名服务器建立实例

  1、 实例环境

  假设我们需要建立一台应用于以下情况的企业主域名服务器。

  1)拥有一个C类网段地址,为202.101.55.0。

  2)企业域名注册为company.com。

  3)域名服务器的IP定为202.101.55.55,主机名为dns.company.com,同时充当Proxy。

  4)企业网通过路由器与Internet连接。

  下面我们就逐句地理解这里的配置。

  1.SOA是主服务器设定文件中一定要设定的命令,我们通常将它放在文件的第一行。

  1)最前面的符号“@”代表目前所管辖的域;

  2)接着的“IN”代表地址类别,这里就是固定使用“IN”的;

  3)接下来就是命令SOA;

  4)接下来填入域名服务器 ,记住由于DNS数据文件的特殊格式规定,在最后一定要加上“·”,在这个例子中,我们填入域名服务器 “dns.company.com.”;

  5)接下来是域名服务器管理员的E-MAIL地址,但要注意的是,E-Mail地址中的分隔符“@”在这里“·”来代替,在最后也要加上“。”,在这里我们相应写入“root.dns.company.com.”;

  6)接下来在括号内填上各种选项:

  文件版本号:当你修改这个文件的内容时,也要修改这个版本序列号,以此来区分是否有更新。

  更新时间:指定二级服务器向主服务器拷贝数据的更新时间周期。

  重试时间:指定二级服务器在更新出现通信故障时的重试时间。

  终止时间:指定二级服务器重新执行更新动作后仍然无法完成更新任务而终止更新的时间。

  生存时间:指定当域名服务器询问某个域名和其IP地址后,在域名服务器上放置的时间。

  注:二级服务器所设定的域名服务器是主服务器的备份主机。

  2.在第二行中,我们用NS命令指定这个域的域名服务器。在这里我们指出这个域的域名服务器 是“dns.company.com”。

  3.接下来的两行我们使用A命令来指定域名与IP地址的对应关系。我们将Web服务器的域www.company.com与其IP地址202.101.55.1对应起来;将E-Mail服务器的域名mail.company.com与其IP地址202.101.55.2对应起来。

  4.最后一行,我们使用了CNAME命令为dns.company.com指定了另一个域名以供使用——“proxy.company.com”。

  5、建立反向域名转换数据文件db.127.0.0和db.202.101.55

  反向域名转换数据文件用来提供IP地址查询相应的DNS主机名,每个网段分别有一个数据文件。

  1)网段127.0.0通常只有一个地址,那就是127.0.0.1 loopback地址,所以我们在db.127.0.0中写入的内容是:

  @ IN SOA dns.company.com. root.dns.company.com.(

  200002011 ;文件版本号

  28800 ;刷新时间(秒)

  7200 ;重试时间(秒)

  3600000 ;终止时间(秒)

  86400) ;TTL生存时间(秒)

  IN NS dns.company.com

  1 IN PTR localhost

  前面相信读者已经不会陌生,最后一句我们使用PTR命令让配置文件中的主机可以使用IP地址来知道所对应的域名。

  最前面的1代表127.0.0.1,对应的域名就是localhost。

  2)网段202.101.55就可能会存在更多的记录,前面假定环境下的设置应是:

  @ IN SOA dns.company.com. root.dns.company.com.(

  200002011 ;文件版本号

  28800 ;刷新时间(秒)

  7200 ;重试时间(秒)

  3600000 ;终止时间(秒)

  86400) ;TTL生存时间(秒)

  IN NS dns.company.com

  1 IN PTR www

  2 IN PTR email

  55 IN PTR dns

  55 IN PTR proxy

  6、获得db.cache文件

  在LINUX系统中通常提供一个named.ca文件,但是这个文件通常会发生变化,所以建议最好从Internet上下载最新的版本。该文件可以通过匿名FTP从ftp.rs.internic.net/domain下载,文件名是named.boot。将它拷贝一份为db.cache就可以了。

       

      测试域名服务器

  1、使用nslookup测试

  nslookup命令的功能是查询域名服务器中的数据资料。下例就是使用它来测试域名服务器是否架设成功,其中斜体字代表要输入的内容。

  # nslookup

  Default server:dns.company.com

  Address:202.101.55.55 ;能出现这些信息代表成功

  > www

  server:dns.company.com

  Address:202.101.55.1

  2、使用ping测试

  还有一种更简单的测试方法,那就是用ping命令,如果成功将显示:

  # ping www.company.com

  Ping www.company.com(202.101.55.1);56 data bytes

  64 bytes from 202.101.55.1:icmp_seq=0 ttl=255 time=1.3ms

  64 bytes from 202.101.55.1:icmp_seq=1 ttl=255 time=0.6ms

  64 bytes from 202.101.55.1:icmp_seq=2 ttl=255 time=0.6ms

  ……

  小技巧

  安装好域名服务器后,在内部使用域名进行远程连接时,会发现速度非常慢,其实只要在/etc/hosts中加上所有内部的机器域名就可以了。

  5)要解析的服务器有:

  www.company.com (202.101.55.1) Web服务器

  mail.company.com (202.101.55.2) E-Mail服务器

  2、安装前的准备工作

  首先要保证系统中有/etc/resolv.conf和/etc/hosts.conf这两个文件,/etc/resolv.conf文件中内容如下所示:

  domain compay.com

  nameserver 202.101.55.55

  其中第一行指出对于任何希望连到它上面的主机应该搜寻的域,而第二行指出了在哪个地址可以找到需要的域名服务,/etc/hosts.conf的内容如下所示:

  order hosts,bind

  multi on

  这里的设置告诉主机名称先在/etc/hosts文件中搜索,然后再查询域名服务器 。

  3、定义文件/etc/named.boot

  要使LINUX系统完成域名服务器的功能,则需要运行一个named的服务进程。这个服务进程可以在安装LINUX时选中。

  named启动时需要读取一个初始化文件--/etc/named.boot,这个文件是named的基本配置文件。它并不包含任何DNS数据,针对前面的假定环境,我们要在这个文件中写入:

  diretory /etc/named

  primary company.com db.company

  primary 0.0.127.IN-ADDR.ARPA db.127.0.0

  primary 55.101.202.IN-ADDR.ARPA db.202.101.55

  cache.db.cache

  下面我们逐行讲解这个文件中的内容:

  1) 在第一行中我们指定named从/etc/named目录下读取DNS数据文件。这个目录可以自行指定并创建,指定后将所有的DNS数据文件均存放在这个目录下;

  2) 第二行指定named作为company.com的主域名服务器,db.company文件中包含了所有*.my.com形式的域名解析数据;

  3) 第三行则指定named作为127.0.0网段(本地loopback)地址的转换主服务器。其中db.127.0.0文件中包含了所有127.0.0.*形式的地址到域名的转换数据;

  4) 第四行指定named作为202.101.55网段地址转换主服务器,db.202.101.55文件中包含了所有以202.101.55.*形式的地址到域名的转换数据;

  5) 最后一行指定named从db.cache文件中获得Internet的顶层“根”服务器地址。要说明的是,这些数据文件的名称均是自行决定的。

  4、建立正向域名转换数据文件db.company

  根据/etc/named.boot文件中的定义,我们在/etc/named目录下建立文件db.company,并且在其中写入所有在company.com域内的主机节点。根据前面假定的环境,可以写入:

  @ IN SOA dns.company.com. root.dns.company.com.(

  200002011 ;文件版本号

  28800 ;刷新时间(秒)

  7200 ;重试时间(秒)

  3600000 ;终止时间(秒)

  86400;)TTL生存时间(秒)

  IN NS dns.company.com

  www IN A 202.101.55.1

  email IN A 202.101.55.2

  proxy IN CNAME

原创粉丝点击