怎样用DNS解析域名
.将主机名解析成为IP地址
IP网络中的系统进行通讯必须依靠internet地址。用户和应用程序可以通过主机名来查一个主机,这就要求在数据包发送之前,IP协议层必须将这个主机名翻译成为一个IP地址(例如16.30.0.99)。这个主机名到IP地址之间的转换是在这个网络连接建立之前通过一个gethostbyname()的库函数来实现的。这个库函数也被称为解析器,因为它的作用是将主机名解析为一个IP地址。
同样,反向的解析有时也是必须的;因为有时候,必须将IP地址解析成为一个主机名,例如主机想要验证哪些主机连接到本机就必须通过将连接进来的IP地址映射成为一个名字,通常这个过程被用作鉴权:例如,文件/etc/hosts.equiv,$HOME/.rhosts,或者/etc/exports的使用就是具体例子。将IP地址解析成为主机名是通过调用一个名为gethostbyaddr()库函数而实现的。
维护一个小规模网络中的各个主机中包含有网络中的系统的名字和IP地址的/etc/hosts文件是一件很容易的的事情,而当网络变得很大同时地理上分布更广的时候,维护工作会变得十分困难。这时候就需要用其它的方法来实现域名和IP地址之间的互相解析。
与每一台机器都存储和维护所有主机名和IP地址信息的方式不同,一种称为域名服务器的服务,域名服务
器可以由网络中的一个(或者多个)系统组成,其作用是存储并且提供信息,域名系统提供了另外一种与/etc/hosts文件不同的主机名与IP地址转换的方式,DNS常用在大型的网络中提供主机名解析的服务。
当前最常用的名称服务有Network Information Services(包括NIS和NIS+),和Berkeley internet Name Domain(BIND)服务。
在这一章,我们将学习Berkeley internet Name Domain 服务。
2.DNS概述
Berkeley internet Name Domain(BIND)是一种基于RFC 1034/1035"域名"规范的域名系统(DNS)。BIND是由以下三部分组成:
分层的名称空间: 与单层的的名称空间相对应,/etc/hosts文件的域名解析方式就是一种单层的方式。
名称服务器中保存有域的树型结构的信息,这个服务器程序是在系统中是一个叫做named的进程。而提供这个网络服务的主机被叫做域名服务器。
解析器是一种负责将域名解析成为IP地址的程序,各种网络服务都可以调用这种程序,例如telnet,ftp,rcp,rlogin,和其它的网络服务。解析器能判断首先使用哪个名称服务(/etc/hosts,NIS,或者D
NS),然后使用指定的服务来将主机名翻译为IP地址。如果使用的是DNS(BIND),解析器就会从域名服务器提取信息,解析器并不是一个特别的进程,解析器只是名称服务器的一个可编程的界面,这些流程被编译进gethostbyname()和gethostbyaddr()流程中。任何执
行这些调用的程序会自动调用BIND(如果系统中配置了这个服务).否则会使用NIS或者/etc/hosts文件。在有的系统中,有一个名称服务的开关(一个文件),其作用是指定系统解析域名时使用的方式的先后顺序和组合。
3.DNS层次化的名称空间
域名空间是一种对基于树型结构的网络中的节点进行分层命名的方法,树型结构可以粗略代表一个网络边界分支。
每一个名称空间中的子空间被称为一个域,每一个域都有一个标记,这个标记由一系列的由左到右的圆点分隔的字母组成,如:在sanfran.ca.hp这个域名中节点"sanfran"属于域"ca";域"ca"属于域"hp";而域"hp"属于域"com",而域"com"属于“根域”。
最后一个圆点,域名的结尾部分,指出的是绝对域名,这和相对域名相对立,如"sanfran.ca"。
解析器会将相对域名翻译为绝对域名,转换的原则我们会在以后的章节中学到。
4.公共和私有的域名空间
公共的域名空间
如果要将本地网络和一个公众网络相连接,如internet ,就要求要有官方的IP地址和域名。你可以与InterNIC联系,或者通过rs.internic来进行域名登记。
如果你已经注册了一个域,那么在这个域中,你可以独立地管理你这个域中的计算机,例如你可以在这个域中增加主机,可以自由分配一个属于这个网络地址的主机IP地址给这个主机,而不需要向管理机构注册,同样你也可以在这个域中分配子域,也不需要向管理机构注册,只有你域中的顶级域中的授权的服务器才需要注册。
私有域名空间
在这种情况下,客户的网络和公众网是相互分离的,这样你就可以任意选择域名和IP地址。但是如果将来会有可能连接到internet,最好是去寻求一个正式的IP地址并且遵循命名的惯例。
5.名称服务器
域名服务器可以:
响应客户机的请求,然后将主机名解析为IP地址
划分名称空间
能够将域名解析的请求转发到其它的域名服务器
应该有辅域名服务器来作为备份
举例说明:
ca.hp域名服务器
sanfran.ca.hp <--->128.1.1.1
oakland.ca.hp <--->128.1.1.2
la.ca.hp <--->128.1.1.3
有许多不同类型的DNS服务器
主域名服务器
主服务器对它所包含的数据来说是最有权威的(简而言之,由上一级的域赋予它的权利)。它可以,依次,创建子域,并且分配权限。与副服务器相比较而言,主服务器上的信息是最新的信息。
副域名服务器
副域名服务器是一个备份服务器。它包含有主服务器上基本相同的信息。在一个可以设置的时间间隔,它会从主服务器上更新数据。副域名服务器可以选择是否在本地磁盘上保留原始记录。这可以在named.boot中进行配置。
缓
存服务器
缓存服务器不在本地的磁盘上存储数据。所有的数据都是放在系统的缓存中。在多用户系统中使用缓存服务器可以加速域名查询的速度。缓存服务器提供一个非正式的备份方式,与在本地存储数据的副域名服务器相比较,这种方式最大的优点是:在一个新的子域加入到一个主域名服务器中时,它不需要更新本地DNS数据库中的数据。
你的位置:首页->系统管理->网络管理->DNS域名解析(2)
DNS域名解析(2)
6.解析在本域中主机的主机名
每当在一个网络服务中指明一个目标主机的主机名的时候,就会间接启动一个解析器程序如gethostbyname()。因为网络通信使用的是IP地址而不是主机名,所以首先要将主机名解析为 IP地址。
解析器的任务:
判定本地节点首先使用的是BIND,NIS,还是/etc/hosts,这里我们假设使用的是BIND。
当目标地址是一个相对域名的时候自动构建一个可能的绝对域名的列表。
向域名服务器发出查询请求(可以为本地主机或是在/f中配置的远程主机)将域名解析为IP地址。如果没有域名服务器响应,用户程序会挂起一小段时间。如果配置的域名服务器响应但是返回的数据无效,会自动转向使用NIS或者/etc/hosts。如果我们使用的是NIS而不是BIND,解析器会从指定的NIS服务器中查询主机的NIS映射表。如果BIND,和NIS都配置了,有的UNIX会首先使用BIND如(HP-UX),而有的UNIX会首先使用NIS,如(SUN-OS)。
域名搜索列表
当想要查询的主机的域名和你的当前主机在同一域或者子域的时候,你不需要键入完整的域名,解析器
会自动为你加上后缀。例如,如果你在域ca.hp中,同时你键入命令telnet la,解析器会自动构造一个搜索列表:
la.ca.hp
在解析器的配置文件中添加更多的域的后缀会进行更广泛的搜索,例如:
hp ca.hp
解析器会向域名服务器查询搜索列表中的每个域名直到到正确的域名。
如果用户提供的是一个完全格式的主机名,发送到域名服务器的就只有一个查询请求。
nsLookup
nslookup命令可以检查主机名解析的过程:
$ nslookup
Default Name Server: sanfran.ca.hp
address: 128.1.1.1
>ctrl + d
$ nslookup la
Name Server: sanfran.ca.hp
Address: 128.1.1.1
Name: la.ca.hp
Address: 128.1.1.3
Aliases: los_angeles
$
7.解析在其它域中的主机名
当查询在其它域中的主机名的时候,DNS客户端仍旧会将查询请求发送到本地的DNS服务器。由于被查询的主机名不在本地的服务器的数据库里,DNS服务器会以一种递归的方式在其它的域中查询这个主机名。
递归查询的过程如下所示:
1.假定机器genius,cs.tsinghua.edu上的某个用
户要求arpa,att机器进行数据通信,此时本地机器将发现在本域内(.cs.tsinghua.edu)中无法实现此种转换(到此域名对应的IP地址),于是发送一个请求给根服务器。根服务器根据域名中的和它所记录的域名服务器地址向此服务器询问arpa.att的地址,服务器接到此请求后,将根据名称中的.att域名及它所记录的.att域名服务器的地址向该服务器询与arpa.att相应的IP地址。在.att域名服务器中将记录有arpa主机的internet地址,于是它将此地址返回给服务器。服务器会将此结果返回给根服务器,而最后由根服务器将之返回给genius机器。
2.本地DNS服务器会将这些所有的名称服务器的地址缓存,还有最后返回的解析结果。
3.如果本地服务器接收到另外的一个相同的主机名的解析请求时,就会直接从缓存中取出数据,并立即返回用户需要的IP地址。
你的位置:首页->系统管理->网络管理->DNS域名解析(3)
DNS域名解析(3)
配置主域名服务器
1.向internic注册你的域名。
2.在/etc/hosts文件中定义全格式的主机名(域名)。
3.创建一个目录存放DNS数据库文件。
4.创建一个hosts_to_named命令需要的配置参数文件。
5.创建一个hosts_to_named命令需要的DNS数据文件和启动文件。
6.下载一个db.cache文件,其中包含root服务器的最列表。
服务器地址7.修改/fig.d/namesvrs文件并且启动named守护进程。
8.配置DNS客户端的功能。
以上是配置一个主域名服务器的详细步骤。这里我们假定要将sanfran节点配置为一个主域名服务器,这个服务器所在的域为ca.hp。步骤如下:
1.向internic注册你的域
为了让internet中的其它的人可以检索到你的域中的主机名,internic必须要知道你的域的存在。你可以向internic申请你的域名,地址为rs.internic/rs-internic.html。如果你要在这个你的公司已经申请管理的域中创建一个子域,则应由你公司内部的IT部门来分配这个子域,不需要向internic申请。
无论在哪种情况下,你可能都需要提供你的域名和主域名服务器和辅域名服务器的名称和IP地址。
2.提供完全格式的/etc/hosts文件
HP-UX提供的hosts_to_named工具能够将/etc/hosts中的数据直接转换成主域名服务器上的DNS数据库。为了实现这个功能,hosts文件中的所有条目都需要是完全格式的主机名。而旧主机名可以作为别名存在。
如果还可以删除hosts文件中域名服务器不能解析的子域条目。(注意,这样localhost条目必须保留)。下面的例子说明了需要对sanfran主机上的hosts文件作出哪些改动:
vi /etc/hosts
127.0.0.1 localhosts
128.1.1.1 sanfran.ca.hp sanfran
128.1.1.2 oakland.ca.
hp oakland
128.1.1.3 la.ca.hp la
3.创建一个目录保存DNS数据库文件。
hosts_to_named程序会创建几个DNS数据文件。在默认情况下,这些文件会存储在/etc/named.data目录下。你也还可以使用mkdir命令手工创建这个目录:
mkdir /etc/named.data
cd /etc/named.data
4.为hosts_to_named程序创建一个param文件。
hosts_to_named是一个强大的创建DNS数据库文件的工具。hosts_to_named自动搜索一个param文件来决定对哪些域的主机提供域名解析服务。
在-d选项后面加上一个域名,指定这个域名服务器所服务的域,由于一些域名服务器同时为多个域提供
域名解析,这时就需要多个-d选项。
在-n选项后面加上这个域中的每个子域的名称,由于很多主机存在于子域中,这时就需要多个-ns选项。
-b选项决定你的DNS启动文件存储的位置。标准的位置是/etc/named.boot。
因为辅域名服务器需要从主域名服务器下载一个配置文件,其中包含主域名服务器的IP地址和这个域的其它信息。-z选项会创建辅域名服务器需要下载的配置文件。
其它的选项可以参看hosts_to_named名称的联机帮助。
sanfran域名服务器的param文件如下所示:
vi /etc/named.data/param
-d ca.hp <---这里填上你的域名
-n 128.1.1 <---这里填上你的子域的地址
-z 128.1.1.1 <---这里填上你的辅域名服务器的IP地址
-b /etc/named.boot <---指定DNS启动文件存放位置
5.创建hosts_to_named的DNS数据文件和启动文件。
hosts_to_named工具自动使用/etc/hosts文件来生成DNS数据文件,使用的是在param文件中定义的选项。
如:
# hosts_to_named -f param
Translating /etc/hosts to lower case ...
collecting network data ...
128.1
creating list of multi-homed hosts ...
creating "A" data (name to address mapping) for net 128.1 ...
creating "PTR" DATA (address to name mapping) for net 128.1 ...
creating "MX" (mail exchanger) data ...
Building file ...
Building default boot.sec.save for secondary servers ...
Building default boot.sec for secondary servers ...
Building default boot.casheonly for cashing only servers ...
done
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论