DNS转发功能

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

forwarders

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

forward

forward first | only;
forward指令用于设置DNS转发的工作方式:
forward first设置优先使用forwarders DNS服务器做域名解析,如果查询不到再使用本地DNS服务器做域名解析。
forward only设置只使用forwarders DNS服务器做域名解析,如果查询不到则返回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服务器的安装及配置

1、 基本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.

4、 重启服务、关闭防火墙等

service named start //起用DNS服务

service iptables stop //关闭防火墙

setenforce 0 //关闭SELinux

2、 主从DNS功能服务

vi /var/named/chroot/etc/named.conf

options {

directory "/var/named";

};

zone "." IN {

type hint;

file "named.ca";

};

zone "zx.com" IN {

type master;

also-notify { 192.168.2.101; }; ;表示主动提醒从域名服务器更新记录

allow-transfer { 192.168.2.101; }; ;表示允许192.168.2.101从自己这里下载解析记录

file "zx.com.zx";

};

zone "2.168.192.in-addr.arpa" IN {

type master;

also-notify { 192.168.2.101; };

allow-transfer { 192.168.2.101; };

file "zx.com.fx";

};

3)编辑解析记录文件

正向解析记录:

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.

IN MX 10 mail

ns1 IN A 192.168.2.100

ns2 IN A 192.168.2.101

www IN A 192.168.2.101

ftp IN A 192.168.2.100

mail IN A 192.168.2.100

反向解析记录:

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.

IN MX 10 mail

100 IN PTR ns1.zx.com.

101 IN PTR ns2.zx.com.

101 IN PTR www.zx.com.

100 IN PTR ftp.zx.com.

100 IN PTR mail.zx.com.

2、从域名服务器

1、 配置文件:

vi /var/named/chroot/etc/named.conf

options {

directory "/var/named";

};

zone "." IN {

type hint;

file "named.ca";

};

zone "zx.com" IN {

type slave; ;表示从

masters { 192.168.2.100; }; ;指出主域名服务器是谁

file "slaves/zx.com.zx"; ;记录保存的位置

};

zone "2.168.192.in-addr.arpa" IN {

type slave;

masters { 192.168.2.100; };

file "slaves/zx.com.fx";

};

2、 正向解析地址配置文件

vi /var/named/chroot/var/named/slaves/zx.com.zx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.zx.com.

3、 反向解析地址配置文件

vi /var/named/chroot/var/named/zx.com.fx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.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

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

forward

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

7、 检测配置文件命令

1、 named-checkconf工具

格式:named-checkconf [主配置文件]

[root@localhost etc]# named-checkconf named.conf

named-checkzone zx.com zx.com.zone

zone zx.com/IN: loaded serial 2009

OK

2、 客户端对DNS解析

Nslookup


 


 

DNS:domain name system
递归查询:进行一次查询就能得到最终结果
迭代查询:需要进行多次查询,才能得到最终结果

互联网上的应用方式一般是:本地递归,互联网部分迭代。
所有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的版本信息搞破坏
完全转发:当DNS服务器收到查询请求的时候会先看看是不是查询本域的信息,本地缓存是否有数据,如果不能使用本地数据解析DNS会将查询请求发送给转发器,
此时是以递归查询的方式发送给转发器的,而在标准的DNS解析中,DNS服务器将以迭代查询的形式发送给另一个DNS服务器。
options {
forward only|first;
forwardsers {IP;};

only:仅仅依靠转发器来递归解析,如果转发器出现问题,就不解析了
first:先请求转发器,让其代为转发(请转发器做递归),如果转发器无响应就自己找根,此时开始标准的DNS解析也就是迭代查询。
部分转发(只转发解析某个域的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;};
}

子域授权:
在父域的区域配置文件中以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; };
};
做完之后进行语法检查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服务器来解析


 


 

---------------------------------------------------------

转发服务器:

转发服务器接受查询请求,但并不直接提供DNS解析,而是将所有查询请求发送至另外的DNS服务器,查询结果返回后保存至缓存。

转发服务器可以分为一下两种类型:

1.完全转发服务器:

DNS服务器配置为完全转发,会将所有区域的DNS查询请求发送至其他DNS服务器。修改named.conf文件的options字段实现其功能。

options {
directory "/var/named";
recursion yes; #允许递归查询

forwarders { 10.0.0.1; }; #指定转发查询请求的DNS服务器列表

forward only; #仅执行转发操作
};

仅仅是本机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查询请求,修改named.conf文件,添加转发区域的设置实现其功能。

zone "test.com" {                      
type forward;          #指定该区域为条件转发类型
forwarders { 10.0.0.1;10.0.0.2;};  #设置转发服务器列表

};

注意:

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"; #根区域文件,保证存储正确的根服务器记录

};

参考自《linux服务攻略》