Linux环境下的DNS管理全攻略

原创
网络
DNS服务器是非常关键的互联网基础设施,高效管理及使用DNS服务器是网络管理员的一个非常重要的问题。本专题将详细介绍如何通过相关配置和技术来高效管理Linux下的DNS服务。

【51CTO.com独家特稿】2009年5月19日21:50开始,江苏、安徽、广西、海南、甘肃、浙江等六省用户申告访问网站速度变慢或无法访问。5月20日,工业和信息化部通信保障局召集国家计算机应急处理协调中心、电信研究院、中国电信集团、暴风影音等参加紧会议,经查明,事故原因是系DNS域名解析故障,网络故障造成多家网站受到影响,暴风也是受害者之一。

例子中提到的DNS系统用于命名组织到域层次结构中的计算机和网络服务。它主要应用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与之相关的其他信息。从上述实例我们不难深刻地体会到,DNS服务器是非常关键的互联网基础设施,高效管理及使用DNS服务器是网络管理员的一个非常重要的问题。本专题将详细介绍如何通过相关配置和技术来高效管理Linux下的DNS服务。

一、DNS服务简介

1.基本原理

DNS(Domain Name System,域名系统)用于命名组织到域层次结构中的计算机和网络服务。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与之相关的其他信息,如IP地址。因为,用户在上网时输入的网址,是通过域名解析系解析找到相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。

值得一提的是,在引入DNS之前,网络中的主机是将容易记忆的域名映射到IP地址并将它保存在一个共享的静态文件hosts(该文件路径为/etc/hosts)中,再由hosts文件来实现网络中域名的管理。最初Internet非常小,仅使用这个集中管理的文件就可以通过FTP为连入Internet的站点和主机提供域名的发布和下载。每个Internet站点将定期地更新其主机文件的副本,并且发布主机文件的更新版本来反映网络的变化。但是,当Internet上的计算机迅速增加时,通过一个中心授权机构为所有Internet主机管理一个主机文件的工作将无法进行。文件会随着时间的推移而增大,这样按当前和更新的形式维持文件以及将文件分配至所有站点将变得非常困难。

域名系统为一个分布式数据库,它使本地负责控制整个分布式数据库的部分段,每一段中的数据通过客户,服务器模式在整个网络上均可存取,通过采用复制技术和缓存技术使得整个数据库可靠的同时,又拥有良好的性能。域名服务器包含数据库的部分段的信息,并可提供被称之为解析器的客户来访问。DNS的数据库结构形成一个倒立的树状结构,根的名字用空字符串""来表示,但在文本中用“.”来书写。树的每一个节点都表示整个分布式数据库中的一个分区(域),每个域可再进一步划分成子分区(域),每个域都有一个标签(label),标明了它与父域的关系。域也有一个域名(domain name),给出它在整个分布式数据库中的位置。在DNS中,域名全称是一个从该域到根的标签序列,以“.”分隔这些标签。该标签最多可包含63个字符。树中每一节点的完整域名为从该节点到根之间路径上的标签序列。如果根域在节点的域名中出现,该名字看起来就象以点结尾(实际上是以点和空标签作结尾)。这些以点结尾的域名被称之为绝对域名(Absolute Domain Name)。不以点结尾的域名被称之为相对域名。域(Domains)即为树状域名空间中的一棵子树,域的域名同该子树根节点的域名一样。也就是说,域的名字就是该域中最高层节点的名字。图1给出了DNS分层结构的图示:  

图1  DNS域名空间的分层结构

DNS基于C/S(Client/Server,客户机/服务器)模式,因而分为Client和Server两种角色。Client扮演询问的角色,也就是向Server询问一个Domain Name,而Server必须要回答此Domain Name所对应的真正IP地址。而当地的DNS先会查自己的资料库。如果自己的资料库没有,则会往该DNS上所设的的其他DNS进行求助询问,依此得到答案之后,将收到的答案存起来,并回答客户。

DNS服务器会根据不同的授权区(Zone),记录所属该网域下的各名称资料,这个资料包括网域下的次网域名称及主机名称。在每一个名称服务器中都有一个高速缓存区(Cache),这个高速缓存区的主要目的是将该名称服务器所查询出来的名称及相对的IP地址记录在高速缓存区中,这样当下一次还有另外一个客户端到次服务器上去查询相同的名称时,服务器就不用在到别台主机上去寻找,而直接可以从缓存区中找到该名称记录资料,传回给客户端,以加速客户端对名称查询的速度。

举个例子,当DNS客户端向指定的DNS服务器查询网Internet上的某一台主机名称时,DNS服务器会在该资料库中找寻用户所指定的名称。如果没有,该服务器会先在自己的高速缓存区中查询有无该条纪录,如果找到该条名称记录后,会从DNS服务器直接将所对应到的IP地址传回给客户端;如果DNS务器在资料记录查不到且高速缓存区中也没有时,服务器才会向别的DNS服务器查询所要的名称。例如,本地的DNS服务器会向最接近(比如属于同一个IP地址段或者同一个ISP)的DNS服务器去要求帮忙找寻该名称的IP地址.在另一台服务器上也有相同的动作的查询,当查询到后会回复原本要求查询的服务器,该DNS服务器在接收到另一台DNS服务器查询的结果后,先将所查询到的主机名称及对应IP地址记录到高速缓存区中,最后在将所查询到的结果回复给客户端。这样就成功地完成了一次标准的DNS查询-应答过程。

2.DNS系统的组成

DNS系统基于客户机/服务器模式,从概念上说他主要由三个部分组成:

(1)域名空间:域名空间中的记录标识一组主机并提供他们的有关信息。域中的每一个节点都有它的有关信息的数据库。查询命令试图从这个数据库中提取适当的信息。简单地说,域名空间是所有不同类型信息的列表,这些信息是域名、IP地址、邮件别名和那些在DNS系统中能查到的内容。

(2)域名服务器:保持并维护域名空间中的数据的程序。每个域名服务器含有一个域名空间子集的完整信息,并保存其它有关部分的信息。一个域名服务器拥有它控制范围的完整信息。控制的信息按区进行划分,区可以分布在不同的域名服务器上,以便为每个区提供服务。每个域名服务器都知道所有负责其他区的域名服务器。如果来了一个请求,它请求给定域名服务器负责的那个区的信息,那么这个域名服务器只是简单地返回信息。但是,如果请求是不同区的信息,那么这个域名服务器就要与控制该区的相应服务器联系。

(3)解析器:解析器是简单的程序或子程序库,它从服务器中提取信息以响应对域名空间内主机的查询。

DNS是一个很复杂的概念,下表列出了常用的DNS术语。? 

◆域:代表网络一部分的逻辑实体或组织。? 

◆域名:主机名的一部分,它代表包含这个主机的域。它可以和域交换使用。? 

◆主机:网络上的一台计算机。? 

◆节点:网络上的一台计算机。? 

◆域名服务器:提供DNS服务的计算机,它将DNS名字转化为IP地址。? 

◆解析:把一个域名转化为与其相应的IP地址的过程。? 

◆解析器:从域名服务器中提取DNS信息的程序或库子程序。? 

◆反向解析:将给出的IP地址转化为其相应的DNS名字。? 

◆欺骗:使网络看上去好象具有不同的IP地址或域名的行为。

3.DNS服务器的类型

DNS域名服务器是用来存储主机-域名映射信息的,这些服务器具体又可以分为3类:

(1)主DNS服务器(primary name server):它是特定域所有信息的权威性信息源。它从域管理员构造的本地磁盘文件中加载域信息,该文件(区文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对其管辖域的任何查询。

(2)辅助DNS服务器(secondary name server):它可从主服务器中复制一整套域信息。区文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为“区文件复制”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。

(3)高速缓存服务器(caching-only server):可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得每次域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。对于高速缓存服务器只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件,这或许是最常见的域名服务器配置。 #p#

二、DNS服务管理中存在的问题和面临的威胁

1.DNS设计中存在的问题

在系统设计方面,DNS的设计受到当时条件限制,因而存在许多设计缺陷问题。

(1)单点故障。DNS采用层次化的树形结构,由树叶走向树根就可以形成—个全域名(Fully Qualified Domain Name,FQDN),DNS服务器作为该FQDN唯一对外的域名数据库和对内部提供递归域名查询的系统,因而其安全和稳定就存在单点故障风险。

(2)无认证机制。DNS没有提供认证机制,查询者在收到应答时无法确认应答信息的真假,就容易导致DNS欺骗。假设当提交给某个域名服务器的域名解析请求的数据包被黑客截获,然后黑客将一个虚假的IP地址作为应答信息返回给请求者,那么原始请求者就会把这个虚假的IP地址作为它所要请求的域名而进行连接,显然它被欺骗到了别处而连接不上原本想要连接的那个域名,这样就导致了DNS欺骗。如图2所示。  

图2  DNS欺骗原理示意

(4)访问量和维护量巨大以及远距离集中式数据库。单个名字服务器不得不处理所有DNS查询消息,并保存所有因特网主机的记录,数据库会相当巨大,需要为每台新增的主机频繁更新,而且单台名字服务器主机不可能在所有请求查询的客户主机附近,就可能导致相当大的延迟。

(5)BIND(Berkeley Intemet Name Domain)的漏洞:BIND是域名软件,它在提供高效服务的同时也存在许多的安全性漏洞。现已证明在BIND版本4和8上存在缺陷,攻击者利用这些缺陷能成功地进行DNs欺骗攻击,这些漏洞可以被利用取得系统最高权限。构成严重威胁的漏洞主要有两种:一种是缓冲区溢出漏洞,严重的可以使攻击者在DNS服务器上执行任意指令,如BIND SIG Cached RR Ovemow DoS(CAN.2002-1219)在BIND 4和BIND 8中存在一个远程缓冲溢出缺陷,该缺陷使得攻击者可以在DNS服务器上运行任意指令。另一种是DoS漏洞,受攻击后DNS服务器不能提供正常服务,而且其所辖的子网无法正常工作。

2.DNS面临的网络威胁

(1)内部攻击:攻击者在非法或合法地控制一台DNS服务器后,可以直接操作域名数据库,修改指定域名所对应的IP为自己所控制的主机IP,当客户发出对指定域名的查询请求后,将得到伪造的IP地址。

(2)序列号攻击:DNS协议格式中定义了用来匹配请求数据包和响应数据报序列ID,欺骗者利用序列号伪装成DNS服务器向客户端发送DNS响应数据包,在DNS服务器发送的真实DNS响应数据报之前到达客户端,从而将客户端带到攻击者所希望的网站,进行DNS欺骗。

(3)信息插入攻击:攻击者可以在DNS应答报文中随意添加某些信息,指示权威域名服务器的域名及IP,那么在被影响的域名服务器上查询该域的请求都会被转向攻击者所指定的域名服务器上去,从而威胁到网络数据的完整性。

(4)缓存(cache)中毒:DNS使用超高速缓存,即当一个名字服务器收到有关域名和IP的映射信息时,它会将该信息存放在高速缓存中。当再次遇到相同的映射请求,能直接使用缓存中的结果,这种映射表是动态更新的,刷新也是有时限的,这样假冒者如果在下次更新之前成功地修改了DNS服务器上的映射缓存,就可以进行DNS欺骗或者DoS(Denial of Service)拒绝服务攻击了。

(5)信息泄漏:BIND的缺省设置允许任何人进行区传送,区传送可能会造成信息泄漏,区传送一般用于主服务器和辅服务器之间的数据同步,辅服务器可以从主服务器获取最新区数据文件的副本,也就可以获得整个授权区域内的所有主机信息。一旦这些信息泄漏,攻击者就可以根据它轻松地推测主服务器的网络结构,并从这些信息中判断其功能或发现那些防范措施较弱的机器。

(6)不安全的动态更新:随着动态主机配置协议(DHCP)的出现,客户计算机由DHCP服务器动态分配IP地址,使原来手工更新其A记录和PTR记录变得很难管理。因此在RFC2136中提出了DNS动态更新,使得DNS客户端在IP地址或名称出现更改的任何时候都可利用DNS服务器来注册和动态更新其资源记录。尽管DNS动态更新协议规定只有经过授权的主机才能动态更新服务器的zone file,但是攻击者还是可以利用IP欺骗伪装成DNS服务器信任的主机对区数据进行添加、删除和替换。 #p#

三、安装DNS的最新版本

Linux下架设DNS服务器通常是使用BIND程序来实现的。BIND是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。BIND原本是美国DARPA资助伯克里大学(Berkeley)开设的一个研究生课题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上绝大多数的DNS服务器都是用BIND来架设的。

BIND经历了第4版、第8版和最新的第9版,第9版修正了以前版本的许多错误,并提升了执行时的效能。BIND能够运行在当前大多数的操作系统系统平台之上。目前BIND软件由因特网软件联合会(Internet Software Consortium,ISC)这个非赢利性机构负责开发和维护。ISC的官方网站(http://www.isc.org/,如图3所示)包含了最新的错误修复和更新,目前BIND的最新版本为9.6。

图3  BIND下载网站主页

为了保证DNS的安全,强烈建议采用BIND的最新版本进行安装使用,因为最新的版本是在以前版本的基础上进行修改和完善,能从根本上解决一些安全隐患。从上述网站上下载Linux下的最新版本为bind-9.6.1b1.tar.gz,该安装程序为源码安装方式。安装步骤如下所示:

(1)解压缩下载的源码安装包

#tar zxvf bind-9.6.1b1.tar.gz 

(2)切换到解压目录,使用configure命令生成Makefile文件

#cd bind-9.6.1b1

#./configure --prefix=/usr/local/bind

--sysconfdir=/etc/bind --localstatedir=/var

--with-libtool --enable-threads

命令中的configure是编译前对源代码进行针对具体操作系统的编译参数配置,有很多选项可以选择:? 

◆--prefix:指定安装目录;? 

◆--sysconfdir:设置named.conf配置文件放置的目录;? 

◆--localstatdir:设置run/named.pid放置的目录;? 

◆--with-libtool:将BIND的库文件编译为动态共享库文件,这个选项默认是未选择的;? 

◆--enable-threads:如果用户系统有多个CPU,那么可以使用这个选项

(3)编译和安装相关模块。需要注意:下面的编译和安装,安装时需要有root权限

#make

#make install

#p#

四、正确配置DNS相关文件

(1)几个重要的DNS服务器配置文件类型

在使用DNS服务器之前,需要对与之相关的配置文件进行安全配置,因而首先需要了解这些基本文件,表1详细给出了几种主要的与DNS有关的文件以及详细描述:

表1  DNS相关配置文件介绍

(2)named.conf主配置文件

在使用named.conf进行配置时,需要了解如下常用的配置语句,如表2所示。

表2  named.conf主配文件配置语句说明

根据在实际应用中的广泛程度和重要性,下面我们着重对option语句和zone声明的使用进行介绍。

1.使用option语句

option语句的使用语法为:

option语句的使用语法为:

option {
  
配置子句1;  
 

配置子句2;

};

在上述语法中,其配置子句常用的主要有如下两类:? 

◆directory:该子句后接目录路径,主要用于定义服务器区配置文件的工作目录,如/home等;? 

◆forwarders:该子句后接IP地址,定义转发器;

2.使用zone声明

区声明是主配置文件中非常常用而且是最重要的部分,它一般要说明域名、服务器类型以及域信息源三个重要部分。它的语法为:

zone “zone_name” IN {
  
type 子句;  
 

file  子句;
  
其他子句;

};

那么,围绕上述三个重要部分,区声明语句有如下两类子句:? 

◆type:其主要有如下三种,master(说明一个区为主域名服务器)、slave(说明一个区为辅助域名服务器)和hint(说明一个区为启动时初始化高速缓存的域名服务器)。? 

◆file:后接文件路径,主要说明一个区的域信息源的路径。

3.使用ACL(访问控制列表)

访问控制列表(ACL,Access Control List)就是一个被命名的地址匹配列表。使用访问控制列表可以使配置简单而清晰,一次定义之后可以在多处使用,不会使配置文件因为大量的IP地址而变得混乱。

要定义访问控制列表,可以在BIND的主配置文件/etc/named.conf中使用acl语句来实现。acl语句的语法为:

acl  acl_name { 

address_match_list;

};

BIND里默认预定义了4个名称的地址匹配列表,他们可以直接使用,分别为:?   

◆Any:表示所有主机;? 

◆Localhost:表示本机;? 

◆Localnets:表示本地网络上的所有主机;? 

◆None:表示不匹配任何主机。

需要注意的是:acl是named.conf中的顶级语句,不能将其嵌入其他的语句。要使用用户自己定义的访问控制列表,必须在使用之前定义。因为可以在options语句里使用访问控制列表,所以定义访问控制列表的acl语句应该位于options语句之前。

另外,为了便于维护管理员定义的访问控制列表,可以将所有定义acl的语句存放在单独的文件/etc/named.conf.acls中,然后在主配置文件/etc /named.conf中如下语句:

include "/etc/named.conf.options";

之前添加如下的配置行

include "/etc/named.conf.acls"; 

定义了ACL之后,可以在如下的子句中使用:? 

◆allow-query  options,zone:指定哪主机或网络可以查询本服务器或区,默认的是允许所有主机进行查询。 

◆allow-transfer  options,zone:指定哪些主机允许和本地服务器进行域传输,默认值是允许和所有主机进行域传输。  ? 

◆allow-recursion  options:指定哪些主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询的。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。 ? 

◆allow-update  zone:指定哪些主机允许为主域名服务器提交动态DNS更新。默认为拒绝任何主机进行更新。 ? 

◆blackhole  options:指定不接收来自哪些主机的查询请求和地址解析。默认值是none。

上面列出的一些配置子句既可以出现在全局配置options语句里,又可以出现在zone声明语句里,当在两处同时出现时,zone声明语句中的配置将会覆盖全局配置options语句中的配置。

(3)区文件

区文件定义了一个区的域名信息,通常也称域名数据库文件。每个区文件都是由若干个资源记录(RR,resource records)和区文件指令所组成。

1.资源记录

每个区域文件都是由SOA RR开始,同时包括NS RR。对于正向解析文件还包括A RR、MX RR、CNAME RR等等;而对于反向解析文件还包括PTR RR。

RR具有基本的格式。标准资源记录的基本格式是:

[name]      [ttl]     IN     type     redata

各个自字节之间由空格或制表符分隔。表3描述了这些字段的含义:

 

 

表3  标准资源纪录中的字段

2.区文件指令

表4列出了可以在区文件中使用的4个区文件指令。

表4   区文件指令

为了方便读者对DNS服务器配置文件的使用有个详细的了解,本节将针对一个实际的配置文件例子来进行讲解。该配置文件如下所示。我们虚构了一个域cmpbook.com来举例说明主服务器的配置,下面是定义cmpbook.com域的主服务器的named.conf文件:

// generated by named-bootconf.pl

options {

directory "/var/named";

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

// a caching only nameserver config

//

zone "." {

type hint;

file "named.ca";

};

zone "cmpbook.com"{

type master;

file "cmpbook.com";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "named.local";

};

zone "132.211.in-addr.arpa"{

type master;

file "named.rev";

};

上例中第一个master告诉我们这是cmpbook.com域的主服务器。该域的数据是从named.hosts文件中加载的。在我们这个例子中,我们将文件名named.hosts作为区文件名。第三个master语句指向能将IP地址211.132.0.0映射为主机名的文件。它假定本地服务器是反向域132.211.in-addr.arpa的主服务器,该域的数据从文件named.rev中加载。

除了定义上述的主文件外,还需要定义如下的区文件(/var/named/cmpbook.com):

$TTL 86400

$ORIGIN cmpbook.com.

@   

1D IN SOA @ root (     42  ; serial (d. adams)     

3H  ; refresh     15M  ; retry     1W  ; expiry
 

 

 

 

 

1D )  ; minimum

@ IN NS @   @ IN A  127.0.0.1   

www IN A 211.132.211.80
 

 

 

 

 

 

 

ftp IN A 211.132.211.68
 

 

 

 

web IN CNAME www

(5)使用Dlint工具进行DNS配置文件检查

Dlint是一个专门检查DNS配置文件开放源代码的软件,用户可以从网站http://www.domtools.com上自行下载安装,目前该网站上的最新版本为Dlint1.4.1。需要注意:使用该软件前要求系统安装支持Perl语言和Dig命令(BIND中一个软件包)的相关软件包。

Dlint软件的安装步骤如下所示,系统会将Dlint安装在/usr/bin/目录下:

(1)解压缩软件包

#tar dlint1.4.1.tar.gz

(2)切换到解压缩的目录下,执行安装命令

#cd dlint1.4.1

#make

Dlint主要针对DNS配置文件进行如下检查:? 

◆检查配置文件是否存在拼写错误;? 

◆检查配置文件中是否有A(Address)记录的主机名称都有配套的PTR(反向解析记录的简称)记录。如果有A记录的主机名称没有PTR,则配置文件不能通过。另外,Dlint可以在用户配置文件中为A记录查找丢失的PTR记录;? 

◆记录in-addr.arpa区的每一条PTR记录是否有对应的A记录存在,并以递归的方式检查子区,查找它们的配置问题;

如下显示了使用Dlint工具进行DNS配置文件检查的运行结果:

#dlint localhost.localhost

;; dlint version 1.4.1, Copyright (C) 1998 Paul A. Balyoz <pab@domtools.com>

;;     Dlint comes with ABSOLUTELY NO WARRANTY.;

;;    This is free software, and you are welcome to redistribute it

;;     under certain conditions.  Type 'man dlint' for details.

;; command line: /usr/local/bin/dlint localhost.localhost

;; flags: normal-domain recursive.

;; using dig version 9.2.1

;; run starting: 涓? 4鏈?15 07:08:18 CST 2009

;; ============================================================

;; Now linting localhost.localhost

ERROR: no name servers found for domain localhost.localhost       

That domain is probably not a zone.  Remove the leftmost portion of the name and try again.

;; ============================================================

;; dlint of localhost.localhost run ending with errors.

;; run ending: 涓? 4鏈?15 07:08:18 CST 2009

(6)使用命令检验DNS功能

1.nslookup命令

nslookup命令是用来验证DNS功能以及故障的一种非常简便有效的工具,通过该命令可以对用户搭建的DNS服务器或者是公用的服务器的功能进行有效验证。该命令不但可以在Linux下使用,而且也可以在Windows系列操作系统中使用。如果该命令能够成功返回信息,也就是能够通过域名从DNS服务器得到需要解析的IP地址信息,或者通过提供IP地址信息得到域名信息。那么,就表明该DNS是正常运行的。

如下例子给出使用nslookup命令向DNS查询www.sohu.com域名IP地址的应用场景,验证表明DNS功能正常:

//正向查询

#nslookup www.google.com

Note:  nslookup is deprecated and may be removed from future releases.

Consider using the `dig' or `host' programs instead.  Run nslookup with

the `-sil[ent]' option to prevent this message from appearing.

Server:         10.2.13.18

Address:        10.2.13.18#53   Non-authoritative answer: www.google.com  canonical name = www.l.google.com www.l.google.com        canonical name = www-china.l.google.com.

Name:   www-china.l.google.com

Address: 72.14.235.99

Name:   www-china.l.google.com

Address: 72.14.235.104

Name:   www-china.l.google.com

Address: 72.14.235.147

//反向查询

#nslookup 72.14.235.99

Note:  nslookup is deprecated and may be removed from future releases.

Consider using the `dig' or `host' programs instead.  Run nslookup with

the `-sil[ent]' option to prevent this message from appearing.

Server:         10.2.13.18

Address:        10.2.13.18#53   Non-authoritative answer:

99.235.14.72.in-addr.arpa       name = tw-in-f99.google.com.   Authoritative answers can be found from:

235.14.72.in-addr.arpa  nameserver = ns3.google.com.

235.14.72.in-addr.arpa  nameserver = ns1.google.com.

235.14.72.in-addr.arpa  nameserver = ns4.google.com.

235.14.72.in-addr.arpa  nameserver =

ns2.google.com.

ns1.google.com  internet address = 216.239.32.10

ns2.google.com  internet address = 216.239.34.10

ns3.google.com  internet address = 216.239.36.10

ns4.google.com  internet address = 216.239.38.10

 2.dig命令

dig(域信息搜索器)命令是一个用于询问DNS域名服务器的灵活的工具。它执行DNS搜索,显示从受请求的域名服务器返回的答复。多数DNS管理员利用dig作为DNS问题的故障诊断,因为它灵活性好、易用、输出清晰。虽然通常情况下dig使用命令行参数,但它也可以按批处理模式从文件读取搜索请求。不同于早期版本,dig的BIND9实现允许从命令行发出多个查询。除非被告知请求特定域名服务器,dig将尝试/etc/resolv.conf中列举的所有服务器。当未指定任何命令行参数或选项时,dig将对“.”(根)执行NS查询。

值得一提的是:dig命令比nslookup命令获取的信息更加详细和全面,因此在Linux下建议用户采用该命令替代nslookup命令进行查询和验证DNS的功能(nslookup命令运行中也提供了“Note: nslookup is deprecated and may be removed from future releases.Consider using the `dig' or `host' programs instead.”字样进行提示)。

另外,鉴于dig命令的强大功能,它提供了几十个参数选项供用户使用,具体情况可以使用man命令进行查阅,这不是本专题的重点内容,下面仅仅给出2个例子来进行简单演示和说明:

(1)运行dig命令获得根DNS信息

#dig
 ; <<>> DiG 9.2.1 <<>>

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41868

;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14
 
;; QUESTION SECTION:

;.                              IN      NS
 ;; ANSWER SECTION:

.                       290515  IN      NS      K.ROOT-SERVERS.NET.

.                       290515  IN      NS      J.ROOT-SERVERS.NET.

.                       290515  IN      NS      D.ROOT-SERVERS.NET.

.                       290515  IN      NS      M.ROOT-SERVERS.NET.

.                       290515  IN      NS      C.ROOT-SERVERS.NET.

.                       290515  IN      NS      G.ROOT-SERVERS.NET.

.                       290515  IN      NS      A.ROOT-SERVERS.NET.

.                       290515  IN      NS      E.ROOT-SERVERS.NET.

.                       290515  IN      NS      H.ROOT-SERVERS.NET.

.                       290515  IN      NS      F.ROOT-SERVERS.NET.

.                       290515  IN      NS      L.ROOT-SERVERS.NET.

.                       290515  IN      NS      B.ROOT-SERVERS.NET.

.                       290515  IN      NS      I.ROOT-SERVERS.NET. 

;; ADDITIONAL SECTION:

D.ROOT-SERVERS.NET.     109756  IN      A       128.8.10.90

E.ROOT-SERVERS.NET.     109756  IN      A       192.203.230.10

F.ROOT-SERVERS.NET.     282557  IN      A       192.5.5.241

F.ROOT-SERVERS.NET.     282557  IN      AAAA    2001:500:2f::f

G.ROOT-SERVERS.NET.     109756  IN      A       192.112.36.4

H.ROOT-SERVERS.NET.     539017  IN      A       128.63.2.53

H.ROOT-SERVERS.NET.     541758  IN      AAAA    2001:500:1::803f:235

I.ROOT-SERVERS.NET.     109756  IN      A       192.36.148.17

J.ROOT-SERVERS.NET.     452944  IN      A       192.58.128.30

J.ROOT-SERVERS.NET.     455358  IN      AAAA    2001:503:c27::2:30

K.ROOT-SERVERS.NET.     103767  IN      A       193.0.14.129

L.ROOT-SERVERS.NET.     103467  IN      A       199.7.83.42

L.ROOT-SERVERS.NET.     103467  IN      AAAA    2001:500:3::42

M.ROOT-SERVERS.NET.     109072  IN      A       202.12.27.33
 
;; Query time: 50 msec

;; SERVER: 10.2.13.18#53(10.2.13.18)

;; WHEN: Wed Apr 15 06:39:20 2009

;; MSG SIZE  rcvd: 500

(2)正向解析域名www.google.com

#dig www.google.com
 
; <<>> DiG 9.2.1 <<>> www.google.com

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53325

;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 7, ADDITIONAL: 7
 ;; QUESTION SECTION:

;www.google.com.                        IN      A ;; ANSWER SECTION:

www.google.com.         600893  IN      CNAME   www.l.google.com.

www.l.google.com.       292     IN      CNAME   www-china.l.google.com.

www-china.l.google.com. 81      IN      A       72.14.235.99

www-china.l.google.com. 81      IN      A       72.14.235.104

www-china.l.google.com. 81      IN      A       72.14.235.147 ;; AUTHORITY SECTION:

l.google.com.           78559   IN      NS      a.l.google.com.

l.google.com.           78559   IN      NS      b.l.google.com.

l.google.com.           78559   IN      NS      d.l.google.com.

l.google.com.           78559   IN      NS      f.l.google.com.

l.google.com.           78559   IN      NS      c.l.google.com.

l.google.com.           78559   IN      NS      e.l.google.com.

l.google.com.           78559   IN      NS      g.l.google.com. ;; ADDITIONAL SECTION:

g.l.google.com.         66906   IN      A       74.125.95.9

a.l.google.com.         559     IN      A       209.85.139.9

b.l.google.com.         79061   IN      A       74.125.45.9

c.l.google.com.         64857   IN      A       64.233.161.9

d.l.google.com.         72926   IN      A       74.125.77.9

e.l.google.com.         65021   IN      A       209.85.137.9

f.l.google.com.         64805   IN      A       72.14.235.9
 
;; Query time: 21 msec

;; SERVER: 10.2.13.18#53(10.2.13.18)

;; WHEN: Wed Apr 15 06:28:57 2009

;; MSG SIZE  rcvd: 348

#p#

五、配置辅助域名服务器进行冗余备份

辅助服务器可从主服务器中复制一整套域信息。区文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为“区文件复制”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。

辅助服务器的配置与主服务器的配置不同,它使用slave语句代替master语句。slave语句指向用作域信息源的远程服务器,以替代本地磁盘文件。下面的named.conf文件可以配置cmpbook.com域的辅助服务器:

// generated by named-bootconf.pl

options {

directory "/var/named";

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

//

// a caching only nameserver config

//

zone "." {

type hint;

file "named.ca";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "named.local";

};

zone "cmpbook.com"{

type slave;

file "named.hosts";

masters {211.132.10.3;};

};

zone "132.211.in-addr.arpa"{

type slave;

file "named.rev";

masters {211.132.10.3;};

};

cache . named.ca

secondary vbrew.com 211.132.10.3 named.hosts

secondary 132.211.in-addr.arpa 211.132.10.3 named.rev

primary 0.0.127.in-addr.arpa named.local

第一个slave语句是使这个服务器成为vbrew.com的辅助服务器。它告诉named从IP地址为211.132.10.3的服务器中下载cmpbook.com的信息,并将其数据保存在/var/named/named.hosts文件中。如果该文件不存在,named就创造一个,并从远程服务器中取得区数据,然后将这些数据写入新创建的文件中。如果存在该文件,named就要检查远程服务器,以了解该远程服务器的数据是否不同于该文件中的数据,如果数据有变化,它就下载更新后的数据,用新数据覆盖该文件的内容;如果数据没有变化,named就加载磁盘文件的内容,不必做麻烦的区转移工作。将一个数据库拷贝到本地磁盘文件中,就不必每次引导主机时都要转移区文件;只有当数据修改时,才进行这种区文件的转移工作。该配置文件中的下一行表示该本地服务器也是反向域132.211.in-addr.arpa的一个辅助服务器,而且该域的数据也从211.132.10.3中下载。该反向域的数据存储在named.rev中。 #p#

六、配置高速缓存服务器缓解DNS访问压力

高速缓存服务器可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得每次域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。对于高速缓存服务器只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件,这或许是最常见的域名服务器配置。

配置高速缓存域名服务器是很简单的。必须有named.conf和named.ca文件,通常也要用到named.local文件。下面是用于高速缓存服务器的named.conf文件的例子:

// generated by named-bootconf.pl

options {

directory "/var/named";

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

// a caching only nameserver config

//

// a caching only nameserver config

//

zone "." {

type hint;

file "named.ca";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "named.local";

directory这一行告诉named到哪里去找寻文件。所有其后命名的文件都将是相对于此目录的。该文件告诉named去维持一个域名服务器响应的高速缓存,并利用named.ca文件的内容去初始化该高速缓存。该高速缓存初始化文件的名字可以是任何名字,但一般使用/var/named/named.ca。值得注意的是:如上的示例并不是表明在该文件中仅仅使用一个hint语句就能完成高速缓存配置,事实上是几乎每一种服务器的配置都要用到cache语句。在一些个别情况下,如果在配置中没有出现master和slave语句,则可以认为它就是一个高速缓存配置。

但是,在我们这个例子中却有一个master语句。事实上,几乎在每一个高速缓存的配置文件中都有这一个语句,它将本地服务器定义为它自己的回送域的主服务器,并假定该域的信息存储在named.local文件中。这个回送域是一个in-addr.arpa域(in-addr.arpa域用于指定逆向解析,或IP地址到DNS名字解析),它将地址127.0.0.1映射为名字localhost。转换自己的回送地址对于大多数人都是有意义的,因为大多数的named.conf文件都包含这一项。

在大多数高速缓存服务器的配置文件中,这种directory、master和hint语句是唯一使用的语句,但也可以增加其他的语句,forwarders和slave等语句都可以使用。

七、配置DNS负载均衡

DNS负载均衡技术是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。

根据我们在上面介绍的区文件的相关知识可以满足DNS负载均衡的要求,我们通过下面的例子来进行介绍。

现假设有三台服务器来应对www.cmpbook.com的请求。在采用Linux系统上实现起来比较简单,只需在该域区文件的数据记录中添加类似下面的资源记录即可:

www1  IN  A  210.113.1.1

www2  IN  A  210.113.1.2

www3  IN  A  210.113.1.3

www   IN  CNAME  www1

www   IN  CNAME  www2

www   IN  CNAME  www3

上述六条资源记录的具体含义为:在DNS服务器中为www.cmpbook.com设定了三台服务器响应客户的访问请求。这三台服务器分别为www1、www2和www3,而他们均为www服务器的别名。因此,在访问www服务器时,DNS服务器将依次循环地将访问请求均衡到三台服务器中去,以达到负载均衡的目的。

【51CTO.COM 独家特稿,转载请注明出处及作者!】

责任编辑:许凤丽 来源: 51CTO.com
相关推荐

2020-12-28 10:50:09

Linux环境变量命令

2020-11-23 15:21:12

Linux环境变量

2009-11-20 15:02:06

2024-10-25 15:25:42

2011-01-11 14:30:29

企业内网开发环境

2020-11-30 13:07:20

Linux环境变量命令

2024-05-07 09:01:21

Queue 模块Python线程安全队列

2013-04-15 10:48:16

Xcode ARC详解iOS ARC使用

2013-06-08 11:13:00

Android开发XML解析

2010-04-23 14:04:23

Oracle日期操作

2014-03-19 17:22:33

2009-12-14 14:32:38

动态路由配置

2009-10-19 15:20:01

家庭综合布线

2009-02-20 11:43:22

UNIXfish全攻略

2013-05-22 10:00:30

iOSWeb Appicon

2010-03-12 15:00:52

Python中

2010-05-26 11:22:08

2009-07-04 11:05:48

Linux安全攻略

2019-06-27 11:47:21

Wordpress容器化HTTPS

2010-08-25 14:36:02

DHCP服务器
点赞
收藏

51CTO技术栈公众号