DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。
在IPV4中IP是由32位二进制数组成的,将这32位二进制数分成4组每组8个二进制数,将这8个二进制数转化成十进制数,就是我们看到的IP地址,其范围是在0~255之间。因为,8个二进制数转化为十进制数的最大范围就是0~255。现在已开始试运行、将来必将代替IPv4的IPV6中,将以128位二进制数表示一个IP地址。
大家都知道,当我们在上网的时候,通常输入的是如网址,其实这就是一个域名,而我们计算机网络上的计算机彼此之间只能用IP地址才能相互识别。再如,我们去一WEB服务器中请求一WEB页面,我们可以在浏览器中输入网址或者是相应的IP地址,例如我们要上新浪网,我们可以在IE的地址栏中输入网址,也可输入IP地址,但是这样子的IP地址我们记不住或说是很难记住,所以有了域名的说法,这样的域名会让我们容易的记住。
DNS:Domain Name System 域名管理系统域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,这一命名的方法或这样管理域名的系统叫做域名管理系统。
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功能服务
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目录
编辑配置文件
1、 创建域名
vi /var/named.conf //named.conf为手动添加
options {
directory"/var/named"; //指定根目录
};
zone "." IN {
typehint; //根域类型
file"named.ca"; //存放根域地址的文件名
};
zone "hanjinshuai.com" IN{ //创建的域名
typemaster; //域类型
file "hanjinshuai.com.zone"; //域的解析配置文件
};
zone "249.16.172.in-addr.arpa" IN {
type master;
file "172.16.249.zone";
};
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.hanjinshuai.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.hanjinshuai.com.
100 IN PTR ns1.hanjinshuai.com.
101 IN PTR www.zx.com.
4、 重启服务、关闭防火墙等
service namedstart //起用DNS服务
service iptablesstop //关闭防火墙
setenforce0 //关闭SELinux
2、 主从DNS功能服务
vi /var/named.conf
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "hanjinshuai.com" IN {
type master;
also-notify { 192.168.2.101;}; ;表示主动提醒从域名服务器更新记录
allow-transfer { 192.168.2.101;}; ;表示允许192.168.2.101从自己这里下载解析记录
file "hanjinshuai.com.zone";
};
zone "2.168.192.in-addr.arpa" IN {
type master;
also-notify { 192.168.2.101; };
allow-transfer { 192.168.2.101; };
file "172.16.249.zone";
};
3)编辑解析记录文件
正向解析记录:
vi /var/named/ hanjinshuai.zone
$TTL 86400
@ IN SOA ns1.hanjinshuai.com. admin.hanjinshuai.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400) ; Minimum
IN NS ns1.hanjinshuai.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/172.16.249.zone
$TTL 86400
@ IN SOA ns1.hanjinshuai.conadmin.hanjinshuai.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns1.hanjinshuai.com.
IN MX 10 mail
100 IN PTR ns1.hanjinshuai.com.
101 IN PTR ns2. hanjinshuai.com.
101 IN PTR www. hanjinshuai.com.
100 IN PTR ftp. hanjinshuai com.
100 IN PTR mail. hanjinshuai.com.
2、从域名服务器
1、 配置文件:
vi /var/named /named.conf
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "hanjinshuai.com" IN {
typeslave; ;表示从
masters { 192.168.2.100;}; ;指出主域名服务器是谁
file "slaves/hanjinshua.com.zone; ;记录保存的位置
};
zone "2.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.2.100; };
file "slaves/192168.2.com.zone";
};
2、 正向解析地址配置文件
vi /var/named/hanjinshua.com.zone
$TTL 86400
@ IN SOA ns1. hanjinshua.comadmin.hanjinshuai.com (
1 ; Serial(十位数字)
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns1. hanjinshuai.com.
3、 反向解析地址配置文件
vi /var/named/192.168.2.com.zone
$TTL 86400
@ IN SOA 1.hanjinshuai.com. admin.Hanjinshuai.com . (
; Serial(十位数字)
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns1. hanjinshuai.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;
};
forwardfirst;
};
forwarders
forwarders {
DNS_IP_1;
DNS_IP_2;
};
forwarders指令用于设置将DNS请求转发到哪个服务器,可以指定多个服务器的IP地址。
forward
forward first | only;
forward指令用于设置DNS转发的工作方式:
forward first设置优先使用forwardersDNS服务器做域名解析,如果查询不到再使用本地DNS服务器做域名解析。
forward only设置只使用forwardersDNS服务器做域名解析,如果查询不到则返回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是网通的还是电信的,网通就访问网通的服务器电信就访问电信的服务器。
首先定义访问控制
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服务器来解析