×

DNS完全转发和部分转发

hqy hqy 发表于2019-01-21 14:00:33 浏览2052 评论0

抢沙发发表评论


一、DNS介绍及安装: 

1、DNS系统的作用

   1). 正向解析:根据主机名称(域名)查找对应的IP地址
   2). 反向解析:根据IP地址查找对应的主机域名
2、 DNS的解析方式
   1). 递归解析
       – 大多数客户机向DNS服务器解析域名的方式
   2). 迭代解析
       – 大多数DNS服务器向其他DNS服务器解析域名的方式
3、 DNS服务器的类型(角色)
   1). 缓存域名服务器
       – 也称为 唯高速缓存服务器
       – 通过向其他域名服务器查询获得域名->IP地址记录
       – 将域名查询结果缓存到本地,提高重复查询时的速度
   2). 主域名服务器
       – 特定DNS区域的官方服务器,具有唯一性
       – 负责维护该区域内所有域名->IP地址的映射记录
   3). 从域名服务器
       – 也称为 辅助域名服务器
       – 其维护的域名->IP地址记录 来源于主域名服务器
4、 DNS的域名空间
    整个DNS的域名空间是一个树形结构,最顶端是根域,根域下面是顶级域,顶级域有三种分类,即通用域、国家域和反向域,再下是二级域。
5、 DNS服务器基础
    1)、  DNS相关的安装包
       –   bind-chroot-9.3.4-10.P1.el5
       –   ypbind-1.19-11.el5
       –   bind-libs-9.3.4-10.P1.el5
       –   bind-utils-9.3.4-10.P1.el5
       –   bind-9.3.4-10.P1.el5
       –   caching-nameserver-9.3.4-10.P1.el5
    2)、  BIND服务器端程序
       –   主要执行程序:/usr/sbin/named
       –   服务脚本:/etc/init.d/named
       –   默认监听端口:53
    3)、  主配置文件:
       –    /var/named/chroot/etc/named.conf
    4)、  保存DNS解析记录的数据文件位于:
       –    /var/named/chroot/var/named/
6、 DNS服务器的安装及配置
a)       安装DNS软件包
rpm –ivh bind-9.3.4-10.P1.el5
rpm –ivh bind-chroot-9.3.4-10.P1.el5        //不允许更改其主目录
rpm –ivh caching-nameserver-9.3.4-10.P1.el5 //将DNS配置文件放到/var/named目录

b)       编辑配置文件
1、  创建域名vi /var/named/chroot/etc/named.conf      //named.conf为手动添加
options {
     directory "/var/named";            //指定根目录
};

zone "." IN {
       type hint;                      //根域类型
       file "named.ca";                //存放根域地址的文件名
};

zone "zx.com" IN {                      //创建的域名
     type master;                      //域类型
     file "zx.com.zx";                 //域的解析配置文件
};

zone "2.168.192.in-addr.arpa" IN {
       type master;
       file "zx.com.fx";
};
2、  编辑正向解析记录配置文件
vi /var/named/chroot/var/named/zx.com.zx$TTL    86400  @       IN      SOA     ns1.zx.com. root.localhost.  (
                                     1997022700 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
       IN      NS      ns1.zx.com.
ns1     IN      A       192.168.2.100
www     IN      A       192.168.2.101

3、  编辑反向解析记录配置文件
vi /var/named/chroot/var/named/zx.com.fx
$TTL    86400  @       IN      SOA     ns1.zx.com. root.localhost.  (
                                     1997022700 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     3600000    ; Expire
                                     86400 )    ; Minimum
       IN      NS      ns1.zx.com.
100     IN      PTR     ns1.zx.com.
101     IN      PTR     www.zx.com.


二、分离解析域名服务器

针对来自局域网客户机的区域数据文件
view “视图1” {
   match-clients { 客户机地址1; }
   zone “zx.com” IN {
       ……
   };
};

针对来自其他任意地址客户机的区域数据文件
view “视图2” {
   match-clients { 客户机地址2; }
   zone “zx.com” IN {
       ……
   };
};

配置实例:

view "LAN" {
   match-clients { 192.168.1.0/24; };
   zone "zx.com" IN {
       type master;
       file "zx.com.zone.lan";
   };
};

view "WAN" {
   match-clients { any; };
   zone "zx.com" IN {
       type master;
       file "zx.com.zone.wan";
   };
};

三、DNS转发功能

1.   在/etc/named.conf中可以在options段中使用forwarders和forward指令设置DNS转发:
options {
forwarders {
  192.168.1.110;
  192.168.1.112;
  };
 forward first;
};

forwarders {
   DNS_IP_1;
   DNS_IP_2;
   };
forwarders指令用于设置将DNS请求转发到哪个服务器,可以指定多个服务器的IP地址。

forward first | only;
forward指令用于设置DNS转发的工作方式:
forward first设置优先使用forwarders DNS服务器做域名解析,如果查询不到再使用本地DNS服务器做域名解析。
forward only设置只使用forwarders DNS服务器做域名解析,如果查询不到则返回DNS客户端查询失败。

2、  客户端对DNS解析

DNS:domain name system
递归查询:A->B->C->D->E 然后B 告诉A 地址 进行一次查询就能得到最终结果
迭代查询:A-->B A->C A->D A->E 然后A 得到地址 需要进行多次查询,才能得到最终结果
互联网上的应用方式一般是:本地递归,互联网部分迭代。

所有DNS都不知道其他DNS在哪里,但都知道根在哪里,本地主机向本地DNS递归,本地DNS出去迭代查询后向本地返回最终结果。


DNS常见的记录类型:
 A记录:  由主机名解析IP地址
 PTR记录:由IP地址解析主机名
 NS记录: 用来指定本地的域名服务器(有主,有辅)
 MX记录: 用来指定本地的邮件服务器
 CNAME:  用来指定一个主机的别名
 SOA:    起始授权记录,用来说明本域的主域名服务器

辅助域名服务器每隔一段时间要去主(或者其他辅助)域名服务器上面查询更新,以保证数据的一致性,这个过程叫做区域传送,这个过程使用TCP协议,53号端口。为了保证数据的一致性,如果主服务器有更新,也会及时告知从服务器过来同步。


区域传送有两种类型:  
增量区域传送
完全区域传送
DNS服务器类型:1.主<-->从 2.缓存服务器 3.转发器

关于查询优先级:查找本地hosts文件->本地DNS缓存->本地DNS缓存->本地DNS区域文件->.....、


$TTL 86400
@       IN      SOA     localhost. root.localhost.  (在DNS配置文件中@代表本域有特殊意义,所以这里管理员邮箱以“.”代替并且后面跟一个“.”,固定格式。
               1997022700 ; Serial   每次更新后服务器都将此号码更改,从服务器若查询到该号码改变就想服务器请求更新。
               28800      ; Refresh 从服务器的更新时间
               14400      ; Retry  从服务器若更新失败后的重试时间
               3600000    ; Expire  重试多久后就宣告失败不再更新 

               86400 )    ; Minimum 若主服务器找不到对应的请求,允许客户端再次查询的时间



DNS转发:默认DNS服务器会为1000个client端做递归解析。

在配置文件中声明 recursion no完全关闭递归转发功能
声明为某个网段或者某个IP做递归 allow-recursion {IP/Net;}

在主配置文件中声明版本号 vsersion " ",防止别人通过dig命令来获取bind的版本信息搞破坏



1、完全转发:当DNS服务器收到查询请求的时候会先看看是不是查询本域的信息,本地缓存是否有数据,如果不能使用本地数据解析DNS会将查询请求发送给转发器,此时是以递归查询的方式发送给转发器的,而在标准的DNS解析中,DNS服务器将以迭代查询的形式发送给另一个DNS服务器。

    所谓的 forwarder,就是当某一台 NS 主机遇到非本机负责的 zone ( slave zone 也属于本机负责的范围) 查询请求的时候,将不直接向 "." zone 查询,而把请求转交给指定的 forwarder (一台或多台) 主机代为查询。我们知道,当DNS服务器接到客户端主机的查询请求时,首先会检查这个查询是否属于本机管辖,否则将转向 "." zone 再逐级的查询下去,最后再把查询结果告诉客户端。在这个过程之中,DNS服务器还会将查询到的结果存放到缓存中。只要缓存中的 TTL 没过期,在下次遇到同样查询的时候,就可以直接将结果响应给客户端,而无需再重复上次的查询流程。如果DNS服务器上指定了forwarder,那这个DNS发现缓存中没有记录时,将不向 "." 查询,而是向 forwarder 送出同样的请求(转发),然后等待查询结果,即把逐级往下查询这个耗费精力的动作,交给 forwarder 负责。但无论这个结果是自己直接查询得来的,还是 forwarder 送回来的,DNS服务器都会保存一份数据在缓存中。这样,以后的相同查询就快多了,这对于DNS所服务的客户端而言查询效率会提高很多。
   当forwarder没有返回答案时,奔DNS会自己去远端请求。但是如果配置了forward only;   则他仅仅处理转发,而不自己查询。


2、部分转发(只转发解析某个域的DNS):假设有两个域,a.com和b.com,a.com这个域是经过授权(向上级注册,也就是.com知道他的存在)的,而b.com这个域没有经过授权,此时如果a.com中的一台主机要访问www.b.com就会出现访问不了,但是如果a.com知道b.com这个域的DNS主机是谁,即便b.com没有经过授权,这时a.com的DNS可以设一个部分转发,将本域所有要求解析b.com域的请求全部都发给b.com这个域的DNS主机就可以了。
部分转发一般用于访问未经授权的DNS域。配置格式
zone “b.com” IN {
 type forward;
 forwarders {IP;};

 }


注意:
1.转发服务器的查询模式必须允许递归查询,否则无法正确完成转发
2.转发服务器列表如果是多个DNS服务器,则会依次尝试,直到获得查询信息为止
3.配置区域委派时,如果使用转发服务器,有可能会产生区域引用的错误
#作为转发服务器,千万不要出现转发循环。
配置转发服务器技巧:
1).转发列表配置精简
对于配置有转发器的DNS服务器,可将查询发送至多个不同的位置,如果配置转发服务器配置过多,则会增加查询的时间,应根据需要使用转发器,例如:将本地无法解析的DNS信息转发至其他域名服务器。

2).避免链接转发器
如果配置了DNS服务器server1将查询请求转发给DNS服务器server2,则不要在为server2配置其他转发服务器。如果其他转发服务器进行了错误的配置,将查询转发给server1,那么可能导致错误。

3).减少转发器负荷
如果大量的DNS服务器使用这些转发器进行域名信息查询,则会增加转发器的工作量,降低解析的效率,所以建议使用一个以上的转发器实现负载。

4).避免转发器配置错误
DNS服务器会按照转发器配置文件设置的顺序来转发域名,如果国内的域名服务器,错误的将第一个转发器配置为美国的DNS服务器地址,则所有本地无法解析的查询均会发送至指定美国的DNS服务器,这会降低网络上名称解析的效率



缓存服务器:
缓存服务器本地并不设置DNS信息,仅执行查询和缓存操作。客户端发送查询请求,缓存服务器如果有该查询的信息,则直接返回结果。如果没有,则发送至根服务器,通过迭代查询获得相应的DNS信息,然后将结果保存至缓存,保存信息TTL值过期后将会清空。
缓存服务器不需要建立独立的区域,可以直接对named.conf文件进行设置:
options {
       directory "/var/named";         
       dataesize   80M;                  #DNS缓存设置为80M
       recursion  yes;                  #允许递归查询
};

或:
options {
directory “/var/named”;
forward only;
forwarders {
192.168.1.1;
192.168.1.2;
};
};

解释:datasize(默认不需要设置)
服务器可以使用的最大数据内存量。默认值为default。这是一个在服务器系统内存中已经设置了的参数。如果服务器要超过这个限制的内存量,则会失败,这将使服务器不能提供DNS服务。所以,这个选项作为一种限***务器所使用的内存量的方式就不太有效,但是它能够将操作系统设置的太小的缺省数据尺寸增大。如果要限***务器使用的内存量,可以使用max-cache-size和recursive-clients选项
max-cache-size number;
限***务器可以用于缓存查询答案的内存量。如果缓存增长的太大,就要在记录的TTL到期之前将他们从缓存中删除,从而确保内存的用量保持在稳定的限度内。
recursive-clients number;
限***务器处理的并发递归查询的数量,内存有限的服务器需要把这个限制降到比默认值还低。如果设置了不运行递归查询(recursion no;),就不需要设置这个了。
zone "." {                     
       type hint;             
       file "named.ca";                 #根区域文件,保证存储正确的根服务器记录
};    


子域授权:
在父域的区域配置文件中以NS记录声明子域以及管理这个子域的DNS服务器(主和辅都声明了)
这里假设a.com这个域下面有一个子域net.a.com
配置很简单只需要在父域的区域配置文件中添加一条
net.a.com IN NS ns1.net.a.com
ns1.net.a.com IN A 1.1.1.1


设置允许进行DNS查询的主机
1、直接定义
在主配置文件中allow-query     { 192.168.1.0/24; }; 定义允许192.168.1.0这个网段的主机进行DNS查询
2、使用acl
在options上面定义一个acl 
acl clients {172.16.0.0/16;192.168.1.0/24;};
allow-query     { clients; }; 这样就可以了同时允许这两个网段进行查询
智能DNS(DNS View):
我们知道网通和电信之间进行访问速度比较慢,现在架设服务器一般都是双线的,我们经过DNS的设置,让DNS自
动识别客户端IP是网通的还是电信的,网通就访问网通的服务器电信就访问电信的服务器。
这里我们假设网通属于192.168.1.0/24这个网段,电信属于172.16.0.0/16这个网段的
首先定义访问控制
acl telecom    { 172.16.0.0/24; };
acl unicom    { 192.168.0.0/24; };
接下来针对两种不同的客户IP范围定义两个DNS视图
view TELNET {
       match-clients      { telecom; };
       match-destinations { any; };
       recursion no;
       include "/etc/named.telecom.zones";
};
view UNINET {
       match-clients      { unicom; };
       match-destinations { any; };
       recursion no;
       include "/etc/named.unicom.zones";
};
这里假设我的DNS域为test.com,以下配置文件分别为:
vi named.telecom.zones(此文件由named.rfc1912.zones复制而来,以下是在原文件基础之上添加,)
zone "test.com" IN {
       type master;
       file "test.com.zone.tele";
       allow-update { none; };
};
zone "0.16.172.in-addr.arpa" IN {
       type master;
       file "172.16.0.rev";
       allow-update { none; };
};
vi named.unicom.zones(此文件同上,如果手动新建务必保证文件中有根域以及localhost域)
zone "test.com" IN {
       type master;
       file "test.com.zone.uni";
       allow-update { none; };
};
zone "0.168.192.in-addr.arpa" IN {
       type master;
       file "192.168.0.rev";
       allow-update { none; };
};
具体正反解文件内容不再列出,参考我博客里面之前介绍的DNS建立的过程建立,两个正反解文件除了IP之外保持完全一致
做完之后进行语法检查named-checkconf,named-checkzone
重启测试(我本机配置两个IP 192.168.0.162和172.16.0.162)
dig -t A www.test.com @172.16.0.162使用172.16.0.162作为DNS服务器来解析
dig -t A www.test.com @192.168.0.162使用192.168.0.162作为DNS服务器来解析


打赏

本文链接:https://www.kinber.cn/post/196.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客