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(默认不需要设置)
zone "." {
type hint;
file "named.ca"; #根区域文件,保证存储正确的根服务器记录
};
参考自《linux服务攻略》