轻松了解dns劫持_了解DNS

关于本系列

典型的UNIX管理员通常会使用一系列关键实用程序,技巧和系统来协助管理过程。 有一些关键实用程序,命令行链和脚本可用于简化不同的过程。 这些工具中的一部分随操作系统一起提供,但是大多数技巧来自多年的经验以及减轻系统管理员生活的渴望。 本系列的重点是从各种不同UNIX环境中的可用工具中获取最大收益,包括简化异构环境中管理的方法。

DNS基础

一般而言,人类并不特别擅长记忆数字。 不幸的是,IP寻址系统使用数字来标识单个主机。 记住要在网络内部和外部使用的所有计算机的编号显然是不切实际的。 取而代之的是,将服务器的名称记为“ bear”或将互联网上的网站地址记为www.mcslp.com更为容易。

从历史上看,UNIX在这种信息中使用了三个主要位置。 内置的/ etc / hosts文件是主要来源,也是有用的备份,但是要在多台计算机上保持最新状态,则需要大量复制数据。 更好的方法是使用分布式系统,其中的各个机器和服务可以与一个中心点联系,并且开发了两个系统,即网络信息系统(NIS)和DNS,并着眼于不同的目标。

NIS是一种通用的数据库共享服务,可用于共享主机,密码和其他通常基于文本的数据库。 不幸的是,NIS在整个系统中都没有那么有效,当然在Internet的分布式格式中也没有。

域名系统(DNS)通过提供一种机制来解决此问题,以便可以将名称解析为适当的IP地址。 域名系统中的地址以树结构组织。 尽管您可以以所需的格式组织任何专用DNS,但通过查看Internet上使用的结构,最容易理解DNS系统。

查看典型的DNS地址www.mcslp.com,可以通过以句点将内容分隔开来对名称进行划分,从最右边的片段( com )开始。

在我们的示例www.mcslp.com中,“ com”是顶级域名(TLD)名称的示例,该顶级域名按组织或区域结构进行组织。 例如,有效的TLD包括com(商业),edu(教育)和net(与网络相关)。 在Internet上,地区组织提供针对特定国家/地区的TLD,例如英国(英国)或法国(法国)。

TLD左侧的每个片段都是原始域的一个细分。 例如,mcslp.com是com TLD的细分。 可以进一步细分,最多127个级别。 每个细分称为一个子域。 从该示例中,mcslp.com是com TLD的子域,而www.mcslp.com是mcslp.com子域的子域。

子域的使用有两个主要目的: 一种是为了易于识别,另一种是为了授权。 从标识的角度来看,更容易理解和标识www.mcslp.com和bear.mcslp.com都是mcslp.com域中的主机。 同样,很容易确定www.google.com和mail.google.com都是google.com域中的主机。

委托涉及管理员(和计算机)负责各个域的配置和内容的方式。 mclsp.com域是com TLD的子域。 com TLD的管理员已授予mcslp.com域的域和子域的权限,由另一位管理员负责。

这种委派使Internet上的服务管理员可以“拥有”一个域,进而分配自己的IP地址,配置自己的名称以及组织自己的结构,以帮助他们识别网络中的计算机。

在内部,域名系统还可以用作在网络上标识和定位计算机的方法,并且可以使用DNS的组织和委派功能来帮助组织网络。

例如,mcslp.com是公司的公共域,而mcslp.pri是内部用于标识网络中计算机的私有域。 地址www.mcslp.pri与内部Web服务器有关,而mail.mcslp.pri与内部邮件服务器有关。 此外,子域vm.mcslp.pri用于提供主机(在本例中为虚拟机)的逻辑分组。

域名解析的工作原理

域名解析通过客户端与服务器联系并请求将特定地址解析为相应部分(即,将名称解析为IP地址,或将IP地址解析为名称)来工作。 因为名称服务器可以保存不同类型的信息,所以确切的响应和过程取决于查询,但是对于示例,我们将假定一个简单的名称查找,该名称查找将响应IP地址。

通常,客户端要求服务器解析地址,然后从服务器接收解析后的地址。 查询可以有两种类型:递归和非递归。 在递归查询中,客户端希望服务器响应完整答案(即,将名称解析为IP地址)。 非递归查询允许服务器返回部分响应,例如返回可能知道答案(或可能具有更多信息)的服务器名称或地址。

原因是DNS系统在类似于中国低语的系统上工作。 如果服务器本身不知道答案(因为它不负责域),则它将找出哪个服务器负责域,并询问该服务器。 在递归查询中,服务器执行询问并返回最终结果。 服务器通常在彼此通信以代表客户端解析查询时使用非递归查询。

通过查看图1,您可以更清楚地看到这一点。图中的数字与下面列表中的相同步骤相关。

  1. 客户端检查自己的缓存,以查看其最近是否解析了该名称,但未找到任何内容。
  2. 客户端将递归查询发送到其主域名服务器。
  3. 名称服务器检查其数据库和缓存,未找到任何内容,并将迭代请求发送到.com顶级域的根服务器。
    图1.递归和非递归查询
    递归和非递归查询
  4. 根服务器使用对mcslp.com域具有权威性的DNS服务器的IP地址响应DNS服务器。
  5. DNS服务器向mcslp.com域的DNS服务器发送迭代请求,以解析地址www.mcslp.com。
  6. 它使用迭代请求,因为它已经知道mcslp.com DNS服务器对该域具有权威性。
  7. mcslp.com DNS服务器将IP地址返回到DNS服务器。
  8. DNS服务器将IP地址返回给客户端。

设置DNS服务器

在本文的前面,我讨论了域和子域的委派和细分的作用,以允许单个管理员负责自己的域以及该域中定义的信息和主机。 如果您要托管Internet上可用的公共DNS域,并且要配置自己的DNS信息来解析专用网络中的地址和其他信息,则设置自己的域服务器将很有用。

要在UNIX服务器或客户端中设置DNS服务器,您需要一个DNS守护程序,该守护程序回答有关一个或多个域的查询。 最常见的守护程序是BIND,DNS服务器的大多数实现都使用BIND或BIND代码的派生作为其DNS服务的基础。 BIND服务的核心是一个名为named (或in.named )的守护程序,该守护程序处理所有查询。

典型的BIND环境的配置涉及主要的命名配置文件,通常是/etc/named.conf(或/etc/bind/named.conf)和许多“区域”文件,其中包含有关每个DNS域的单独信息。由服务器负责。

主配置文件设置用于区域文件的目录,安全信息,以及DNS服务器无法解析地址本身时应查询的其他服务器。 如果您希望服务器解析网络外部(例如,Internet上)的地址,以及网络内部已配置区域的地址,则需要此设置。

您可以在清单1中看到一个简单配置文件的标头部分。

清单1.简单的配置文件
options {
     directory "/var/bind";

     forwarders {
      212.23.3.100;
      212.23.6.100;
     };

     listen-on-v6 { none; };
     listen-on { 127.0.0.1; };

     allow-query {
          192.168.0.*;
          192.168.1.*;
          192.168.2.*;
     };

     pid-file "/var/run/named/named.pid";
};

请注意,在配置文件中,您需要使用双斜杠(//)引入注释。 您还应该知道,分号用于拆分文件的各个配置选项,并且花括号用于将配置选项分组在一起。 当缺少分号或大括号时,会引入配置文件内容的大多数问题。

此示例中显示的各个可配置选项如下:

  • 目录-设置可在其中找到区域文件的基本目录。
  • 转发器-设置将递归查询发送到服务器无法应答的DNS服务器时将查询的DNS主机列表。 通常,您应该将此设置为层次结构中的第二个最高DNS服务器。 例如,如果为子域servers.mcslp.pri配置了服务器,则可以将转发设置为指向mcslp.pri的DNS服务器以进行解析。 在大多数情况下,应将转发地址设置为ISP的转发地址,以允许解析Internet地址。
  • listen-on-v6-设置服务器是否应在IPv6地址上侦听。 “无”设置禁用IPv6支持。
  • 监听-设置服务器应在其上监听解析请求的IP地址。 在该示例中,服务器将仅侦听来自本地主机的请求(即计算机本身)。 如果省略此配置行,则服务器将侦听所有已配置的IP接口。 如果您将服务器用作仅希望某些接口支持DNS的路由器,则可以使用它来限制某些接口上的请求。
  • allow-query -配置允许请求DNS解析的主机。 在可能跨越多个IP子网的网络中,您可能希望限制哪些服务器负责处理对特定子网的查询,以允许将负载分散在多个服务器之间。
  • pid-file-设置文件的位置,以保存正在运行的命名守护程序的进程ID。 如果您希望能够杀死或重新加载区域信息,这将很有用,因为您可以使用此文件找到服务器的PID。

配置文件的其余部分包含区域文件数据,服务器将使用它们来共享DNS信息。

设置DNS数据

DNS信息存储在一系列“区域”文件中。 通常,您托管的每个域都有一个区域文件。

  • 转发区域-这些区域主要将域名映射到IP地址。 此外,其他域级别的信息(例如有效的名称服务器,该域的邮件服务器优先级等)存储在这些文件中。 通常,您将对转发域使用一个区域文件。 例如,mcslp.com或内部mcslp.pri区域。
  • 反向区域-这些区域将IP地址映射回名称。 出于安全原因,可以将许多服务(包括NFS,OpenSSH和Web服务器)配置为检查请求的IP地址是否解析回名称,以及在相关的情况下,请求主机和IP /地址是否与转发和匹配。向后。 对于反向区域,您仅创建记录记录IP地址和主机之间关系的记录。
  • 根区域-根区域提供了“根”服务器的列表,其中包含有关Internet上的子域及其委派记录的信息。 通过提供根区域文件,您可以让DNS服务器查询根Internet服务器以获取有关Internet上其他主机的信息。

配置中所有已配置的区域都被指定为主区域或辅助区域。 主区域是服务器作为主主机的区域(即,域的委派服务器)。 域只能是一台主服务器; 可以对域进行授权的其他服务器(即它们提供合格的响应)被分类为“辅助”或“从属”服务器。 您可以使用从属服务器来帮助分散负载并在发生故障时提供弹性。 我们将在本文后面再次讨论此问题。

对于您托管的每个区域文件,必须将一个区域部分添加到named.conf文件中(参见清单2)。

清单2.将区域部分添加到named.conf文件
zone "mcslp.pri" in {
        file "pri/mcslp.pri.zone";
        type master;
};

这将配置区域mcslp.pri(仅用于识别本地网络上的计算机的内部子域),区域数据所在的文件(相对于目录选项)以及文件的类型。

在这种情况下,实际文件将位于/var/bind/pri/mcslp.pri.zone中。

清单3显示了文件内容的一个示例,在本例中为“转发”区域,主要是将名称映射到IP地址。

清单3.区域文件
$TTL 86400
mcslp.pri.     IN     SOA     bear.mcslp.pri.
admin.mcslp.pri.     (
               2008021401;
serial
               3h     ;                         refresh
               1h     ;                         retry
               1w     ;                         expiry
               1h      ) ;                      minimum
mcslp.pri.          IN     NS     bear.mcslp.pri.     
mcslp.pri.          IN     A     192.168.0.2
bear.mcslp.pri.     IN     A     192.168.0.2
airong.wireless     IN     A     192.168.0.210     
...
mail                IN     CNAME         bear
www                 IN     CNAME         bear
mcslp.pri.          IN     MX     10     bear

区域文件的标题块指定有关域的信息。 在这种情况下,我们指定域名和SOA(授权开始)信息。 SOA配置有关该域的数据,以定义哪些服务器被归类为权威服务器(即,然后对该域的查询给​​出合格的响应)。 SOA记录的其余部分配置序列号(供其他DNS服务器用来确定其域数据副本是否是最新的),以及用于更新信息的刷新和重试间隔(以秒为单位)。

在我们的示例中,只有一台服务器可以对域中的主机和其他数据做出响应,即bear.mcslp.pri。 提供主机名而不是IP地址,以便您可以更改主机IP地址,而不必更新DNS SOA记录。

然后,区域文件中的其余信息将配置特定的DNS记录。 DNS能够保存比简单的名称更多的信息来寻址数据,因此DNS记录分为不同的类型。

主要类型的列表包括:

  • A(地址)-指定给定名称的IP地址。
  • NS(名称服务器)-指定给定域的名称服务器。
  • CNAME(规范名称)-现有主机的别名。
  • MX(邮件交换器)-负责处理域电子邮件的服务器的主机名。

对于域中的名称,您只需指定名称即可指定隐含在域中的名称,例如: bear IN A 192.168.0.2

因为DNS知道此文件包含mcslp.pri域的信息,所以完整主机名将扩展为bear.mcslp.pri。

您还可以通过设置完整的主机名并在名称末尾添加句点来指定完全限定的域名(FQDN): amazon IN CNAME www.amazon.com

上面将配置amazon.mcslp.pri主机名以充当www.amazon.com的别名。

返回原始主机列表,按清单4所示配置主机。

清单4.配置主机
bear.mcslp.pri.     IN     A     192.168.0.2

Defines the IP address of bear.mcslp.pri as 192.168.0.2

airong.wireless     IN     A     192.168.0.210     

Defines the IP address of airong.wireless.mcslp.pri to 192.168.0.210. 
This is an example of setting up a subdomain within our original mcslp.pri 
domain for organizational purposes. In this case, the wireless.mcslp.pri 
is used to hold the details of wireless devices. 

mail                    IN     CNAME     bear
www                    IN     CNAME     bear

Creates aliases to bear.mcslp.pri. These are examples of utility aliases 
that can be used to identify different services. By using an alias, you 
can change the host ultimately responsible for these services without having 
to reconfigure clients with the updated host. 

mcslp.pri.          IN     MX     10     bear

查找发送电子邮件的位置时,sendmail和postfix等邮件传输代理会使用邮件交换器记录。 在上面的示例中,bear.mcslp.pri配置为接受电子邮件地址中的域为mcslp.pri的任何电子邮件。

对于“反向”查找,即,当您要将IP地址解析为名称时,应设置一个附加区域。 反向区域具有特定的域名,该域名将其标识为反向区域。 您可以在清单5中看到一个示例。

清单5.反向区域
$TTL 86400
0.168.192.in-addr.arpa.        IN      SOA     bear.mcslp.pri.
admin.mcslp.pri.      
           (       2007111900      ; serial
                   3h              ; refresh
                   1h              ; retry
                   1w              ; expiry
                   1h       )      ; minimum
0.168.192.in-addr.arpa.     IN      NS      bear.mcslp.pri.
2.0.168.192.in-addr.arpa.   IN      PTR     bear.mcslp.pri.

域是IP地址类的一部分,以相反的顺序排列,然后放入in-addr.arpa域中。 例如,在0.168.192.in-addr.arpa域中定义了C类地址192.168.0.x中的IP地址,如清单4所示。

标头和NS(名称服务器)记录与以前一样。 IP地址到主机名的映射是使用PTR(指针)记录定义的。 对于域中每个与IP地址相对应的名称,您应该具有以下记录之一。

要将反向域映射添加到命名配置,请在named.conf文件中以相同的方式指定域和域文件(请参见清单6)。

清单6.添加反向域映射
zone "0.168.192.in-addr.arpa" IN {
        file "pri/db.192.168.0";
        type master;
};

您还应该配置“提示”区域,该区域引用根服务器以及本地主机的正向和反向域,以便本地主机和127.0.0.1(本地主机IP地址)的解析正常运行。 您可以在绑定源中找到这些示例,并且绑定安装中通常也提供了这些示例。 清单7显示了named.conf区域条目。

清单7. named.conf区域条目
zone "." IN {
        type hint;
        file "named.ca";
};

zone "localhost" IN {
        type master;
        file "pri/localhost.zone";
        allow-update { none; };
        notify no;
};

zone "127.in-addr.arpa" IN {
        type master;
        file "pri/127.zone";
        allow-update { none; };
        notify no;
};

一旦配置了区域并添加了区域文件,就可以启动命名守护程序。 对于大多数UNIX / Linux变体,您可以使用/etc/init.d中的脚本执行此操作: # /etc/init.d/named start init.d/ # /etc/init.d/named start

对于Solaris 10,请使用svcadm: # svcadm enable bind

一旦指定的守护程序运行,请确保编辑/etc/resolv.conf文件(请参见清单8)以配置提供响应的域和DNS服务器:

清单8.编辑/etc/resolv.conf文件以配置域和DNS服务器
domain mcslp.pri
nameserver 192.168.0.2

您可能还需要编辑/etc/nsswitch.conf文件,以便将主机名查找重定向到DNS服务。 例如,要先使用本地文件,然后使用DNS: hosts: files dns

现在,您应该能够使用dig(查询DNS服务器以获取信息的工具)从DNS查找主机。 清单9显示了查找bear.mcslp.pri的结果。

清单9.查找bear.mcslop.pri的结果
# dig bear.mcslp.pri

; <<>> DiG 9.3.4-P1 <<>> bear.mcslp.pri
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 858
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;bear.mcslp.pri.                        IN      A

;; ANSWER SECTION:
bear.mcslp.pri.         86400   IN      A       192.168.0.2

;; AUTHORITY SECTION:
mcslp.pri.              86400   IN      NS      bear.mcslp.pri.

;; Query time: 1 msec
;; SERVER: 192.168.0.2#53(192.168.0.2)
;; WHEN: Wed Feb 20 18:08:34 2008
;; MSG SIZE  rcvd: 62

输出显示查询的服务器,并返回完整的DNS记录。

分散负荷

DNS是一种分布式服务,因为一个以上的服务器能够响应给定的查询,只要它知道向谁询问信息即可。 除了转发DNS请求和递归性质外,您还可以将多个服务器配置为对特定域具有“权威性”。 通过域NS记录将辅助或从属服务器委派为有资格提供响应。

辅助DNS服务器直接从主DNS服务器传输其区域信息,并在本地保留副本。 然后可以将客户端配置为使用一个或多个负责域的DNS服务器。 这可以帮助减少请求的负担,还可以确保在进行查询时如果主服务器(或另一个从属服务器)关闭,则另一台服务器可以为客户端解析查询提供答案。

要将更多DNS服务器添加到您的配置中,请首先编辑区域文件,并为也将托管域的每个从属服务器添加NS记录。 这样可以确保您的奴隶返回对该域查询的权威答案。

然后,将一个条目添加到您的named.conf文件中,该条目指定类型为“从属”的域名,然后提供可以将域的副本传输到从属的合格“主”列表。 例如,为mcslp.pri域设置一个从属(参见清单10)。

清单10.为mcslp.pri域设置一个从属
zone "mcslp.pri" IN {
     type slave;
     file "sec/mcslp.pri";
     masters { 192.168.0.2; };
};

现在,在您的从属服务器上重新加载或启动命名服务,并检查日志。 您应该看到报告将域成功转移到从属的条目(请参见清单11)。

清单11.在您的从属服务器上重新加载命名服务
Feb 20 18:17:41 tweedledum named[27142]: running
Feb 20 18:17:41 tweedledum named[27142]: zone mcslp.pri/IN: Transfer started.
Feb 20 18:17:41 tweedledum named[27142]: transfer of 'mcslp.pri/IN' 
                    from 192.168.0.2#53: connected using 192.168.0.6#53905
Feb 20 18:17:41 tweedledum named[27142]: zone mcslp.pri/IN: 
                   transferred serial 2008022000
Feb 20 18:17:41 tweedledum named[27142]: transfer of 'mcslp.pri/IN' 
                   from 192.168.0.2#53: end of transfer

现在,您可以将新的从属服务器的IP地址添加到要查询的有效IP地址列表中。

摘要

DNS系统的核心是将我们在Internet上以及在本地网络上我们都熟悉的名称解析为IP地址。 尽管我们认为该系统是理所当然的,但实际上它是一项经过精心设计的服务,可以在Internet上分发和委派查询和区域,并使您能够在自己的网络中创建自定义区域。

在本文中,我们已经了解了DNS服务的基本原理是如何工作的,以及它不仅与解析本地地址的内部过程有关,而且还与Internet上的地址有关。 我们还研究了如何创建用于您的本地网络的简单DNS设置,以及如何与Internet名称解析集成。


翻译自: https://www.ibm.com/developerworks/aix/library/au-satdns/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值