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 .

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 .

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中的一台主机要访问就会出现访问不了,但是如果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 @172.16.0.162使用172.16.0.162作为DNS服务器来解析
dig -t A @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服务攻略》