您的位置:首页 > 其它

DNS基本工作原理,及正反解析,主从同步,子域授权和视图

2015-09-26 13:38 567 查看
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别IP地址,而不能认识域名。我们无法记住多个IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。
什么是DNS? DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”。 DNS域名称
域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成了一个分层树状结构称为域名空间。域名包含单个标签分割点,例如:www.baidu.com. 完全限定的域名(FQDN)唯一地标识在DNS分层树中的主机的位置,通过指定的路径中点分隔从根引用的主机的名称列表。下面显示主机称为www内mageedu.com DNS树的示例。主机的FQDN是www.magedu.com. DNS域的名称层次结构

DNS域名称空间的组织方式:

按其功能命名空间中用来描述DNS域名称的五个类别的介绍如下:



DNS和Internet 域
互联网域名系统由名称注册机构负责维护分配由组织和国家/地区的顶级域在 Internet 上进行管理。 这些域名按照国际标准 3166。 一些很多现有缩写,保留以供组织中,以及两个字母和三个字母的国家/地区使用的缩写使用下表所示。一些常见的DNS域名称有:
com:商业公司 edu:教育机构 net:网络公司 gov:非军事政府机构 Mil:军事政府机构 xx:国家/地区代码(cn代表中国)
资源记录
DNS数据库中包含的资源记录RR,每个RR标识数据库中的特定资源。我们在建立DNS服务器时,经常会用到SOA,NS,A之类的记录,在维护DNS服务器是,会用到MX,CNAME记录。常见的RR如下所示



Dns服务的工作过程
当 DNS 客户机需要查询程序中使用的名称时,它会查询本地DNS 服务器来解析该名称。客户机发送的每条查询消息都包括3条信息,以指定服务器应回答的问题。
● 指定的 DNS 域名,表示为完全合格的域名 (FQDN) 。
● 指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。
● DNS域名的指定类别。
对于DNS 服务器,它始终应指定为 Internet 类别。例如,指定的名称可以是计算机的完全合格的域名,如im.qq.com,并且指定的查询类型用于通过该名称搜索地址资源记录。
DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。
另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。
DNS 查询的过程如下图所示。


1、在浏览器中输入www.magedu.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。 2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(magedu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找magedu.com域服务器,重复上面的动作,进行查询,直至找到www.magedu.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

DNS服务器的类型

主DNS服务器:维护所负责解析的域内的解析库的服务器,解析库由管理员维护;
辅助DNS服务器:从主DNS服务器或者其他的从DNS服务器那里“复制”(区域传递)一分解析库
缓存名称服务器
转发器
主DNS服务器
从DNS服务器
序列号:解析库的版本号:前提:主服务器解析库内容发生变化,其序列递增:
区域传送:
辅助DNS服务器从主DNS服务器或其他的辅助DNS服务器请求数据传输过程

完全区域传送:传送区域的所有数据,AXFR
增量区域传送:传送区域中改变的数据部分,IXFR

刷新时间:从服务器从主服务器请求同步解析库的时间间隔:
重试时间:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔
过期时长:从服务器始终联系不到主服务器时候,多久放弃从服务器角色,停止服务。
DNS的数据库文件(区域数据文件,区域自身有名字):文本文件,只能包含资源记录或宏定义,每行一个

资源记录的格式:
name [ttl(缓存时间)] IN 资源记录类型(RRtype) Value
注意:(1)TTL可从全局继承
(2)@可用于引用当前区域的名字
(3)同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应:
(4)同一个值可以有多个不同的定义名字:通过多个不同的名字指向同一个值定义:
例子:
www 600 IN A 1.2.3.4
www.magedu.com. 600 IN A 1.2.3.4

SOA:
name:只能是区域名称,通常可以简写为@,例如:magedu.com.
value:有n个数值,最主要的是主DNS服务器的FQDN,点不可省略
注意:SOA必须是区域数据库文件第一条记录
value:有多部分组成
(1)当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字:
(2)当前区域的管理员的邮箱地址:但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com;
(3)(主从服务协调属性的定义以及否定的答案的统一的TTL)
例如:
magedu.com. 86400 IN SOA ns.mageedu.com. nsadmin.mageedu.com.(20150914002 ;序列号
2H ;刷新时间
10M ;重试时间
1w ;过期时间
1D ;否定答案的TTL值

例子:
@ 600 IN SOA na.magedu.com. 管理员邮箱(dnsadmin.magedu.com.)(
序列号(serial number) ;注释内容,十进制数据,不能超过10位,通常使用日期,例如2014031001
刷新时间(refresh time) ;即每隔多久到主服务器检查一次
重试时间(retry time) ;应该小于refresh time
过期时间(expire time)
netgative answer ttl ;否定答案的ttl


NS:可以有多条
name:区域名称,通常可以简写为@
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.:
一个区域可以有多个NS记录:
例如:
magedu.com. IN NS ns1.magedu.com.
IN NS ns2.magedu.com.
注意:(1)相邻的两个资源记录的name相同时,后续的可省略;
(2)对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录:

A:只能定义在正向区域数据文件中
name:某主机的FQDN,例如:www.magedu.com
value:IP
例如;
www.magedu.com. IN A 1.1.1.1
IN A 1.1.1.2
mx1.magedu.com. IN A 1.1.1.3
mx2.magedu.com. IN A 1.1.1.3注意:
*.magedu.com. IN A 1.1.1.4
magedu.com. IN A 1.1.1.4
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址:
例子:
www 600(单位s) IN A 1.2.3.4
www 600(单位s) IN A 1.2.3.5
可做轮询

www 600(单位s) IN A 1.2.3.4
ftp 600(单位s) IN A 1.2.3.4
但凡以FQDN做为其值的记录,应该给这个值做一条A记录

MX:可以有多个
name:区域名称,用于标识smtp服务器
value:当前区域的某邮件服务器(SMTP)的主机名:
一个区域内,MX记录可以有多个:但每个记录的value之前应该有一个数字
(0-99)表示此服务器的优先级,数字越小,级别越高,
例如:
magedu.com. IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
注意(1)对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录:

CNAME:
name :别名的FQDN
value :正式的FQDN
例子:
web.magedu.com. IN CNAME www.magedu.com.

PTR:IP --> FQDN,只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in-addr.arpa.后缀组成
name:IP,逆向的主机地址,例如172.16.100.7的name为7.100,完全格式为7.100.16.172.in-addr-arpa.
value:FQDN
例子:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com
简写成: 4 IN PTR www.magedu.com.
注意:网络地址及后缀可省略:主机地址依然需要反着写:

子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权:
类似根域授权tld:
.com IN NS ns1.com.
.com IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
magedu.com.在.com的名称服务器上,解析库中添加资源记录:
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
magedu.com. IN NS ns3.magedu.com.
ns1.magedu.com. IN A 3.3.3.1
ns2.magedu.com. IN A 3.3.3.2
ns3.magedu.com. IN A 3.3.3.3

bind:服务脚本:/etc/rc.d/init.d/named
主配置文件:定义区域 /etc/named.conf, /etc/named.rfc1912.zones,/etc/rndc.key
解析库文件:/var/namedZONE_NAME.ZONE
注意:(1)一台物理服务器可同时为多个区域提供解析;
(2)必须要有根区域文件:named.ca
(3)应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库:
rndc:remote name domain controller:远程名称控制器
默认于blind安装在同一主机,且只能通过127.0.0.1来连接named进程:提供辅助性的管理功能: 953/tcp

主配置文件:
options{
//全局选项
}
zone "zone name" {
//定于区域
}
logging{
//日志文件
}
include:加载别的文件

自定义
optins{
directory "/var/named";
};
zone "." IN{
type{hint(根)|master(主)|slave(从)|forward(转发)}
file "named.ca"
}
注意:任何服务程序如果期望其能够通过网络被其他主机访问,至少应该监听在一个能与外部主机通信的IP地址上
缓存名称服务器的配置:监听外部地址即可:
dnssec:关闭dnssec
主DNS名称服务器:
(1)在主配置文件配置区域
这个文件的配置在/etc/named.rfc1912.zones
zone "." IN{
type{hint(根)|master(主)|slave(从)|forward(转发)}
file "你要配置的区域文件的名称,这个名称一般指向/var/named"
}
(2)然后在/var/named文件中定义区域解析文件
定义区域解析库文件
出现的内容:
宏定义;
资源记录;
定义区域解析文件中会用到几个命令
named-checkzone "magedu.com" /var/named/magedu.com.zone 检查区域文件是否有错误
named-checkconf:检查主配置文件
service named restart:重启服务
service named reload:重读服务
rndc reload:重读服务
例子:$TTL 600
$ORIGIN magedu.com.
@ IN SOA ns.magedu.com. lirui.magedu.com. (
20150915 ; serial
1D ; refresh
1H ; retry
1W ; expire
1D
)
IN NS ns1.magedu.com.
IN NS ns2.magedu.com.
IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
ns1.magedu.com. IN A 192.168.1.1
ns2.magedu.com. IN A 192.168.1.3
mx1.magedu.com. IN A 192.168.1.4
mx2.magedu.com. IN A 192.168.1.5
www.magedu.com. IN A 192.168.1.111
www.magedu.com. IN A 192.168.1.112
ftp.magedu.com. IN CNAME www.magedu.com.

测试命令:dig的使用
dig [-t type] name [@SERVER] [query options]
dig用于测试dns系统,因此,不会查询hosts文件进行解析;
查询选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP @SERVER
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
例如:dig -t axfr magedu.com @172.16.100.11
host命令
host [-t type] name [server]
例如:host -t A www.magedu.com @192.168.1.111
nslookup命令:
nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP:指明使用哪个DNS server进行查询;
set q=RR_TYPE 指明查询的资源记录类型;
NAME:要查询的名称:
反向区域:
区域名称:网络地址反写 .in-addr.arpa.
172.16.100. --> 100.16.172.in-addr.arpa.
(1)定义区域
zone “ZONE_NAME” IN {
type {master| slave |forward}
file "网络地址.zone"
};
(2)区域解析库文件
注意:不需要MX和A,以及AAAA,以PTR为主
示例:$TTL 600
$ORIGIN 1.168.192.in-addr.arpa.
@ IN SOA ns.magedu.com. lirui.magedu.com. (
20150915 ; serial
1D ; refresh
1H ; retry
1W ; expire
1D
)
IN NS ns1.magedu.com.
IN NS ns2.magedu.com.
3 IN PTR mx1.magedu.com.
4 IN PTR mx2.magedu.com.
111 IN PTR www.magedu.com.
112 IN PTR www.magedu.com.

主从复制;
1.应该为一台独立的名称服务器;
2,主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3.从服务器只需要定义区域,而无需提供解析库文件;解析库文件放置于/var/named/slaves/目录中;
4.主服务器的允许从服务器区域传送;
5.主从服务器时间应该同步,可通过ntp进行;
6.bind程序的版本应该保持一致;否则,应该从高,主低
定义从区域的方法:
zone“ZONE_NAME" IN {
type slave;
masters {master ip;}
file "slaves/ZONE_NAME.zone"'
};
rndc:
rndc -->rndc (953/tcp)
rndc COMMAND:
reload:重新配置主文件和区域解析库文件
reload zone:重载区域解析文件
retransfer zone:手动启动区域传送过程,而不管序列号是否增加
notify zone:重新对区域传送发通知
reconfig:重载主配置文件
querylog:开启或关闭查询日志
trace:递增debug级别
trace LEVEL:指定使用的级别
status:

子域授权:分布式数据库
正向解析区域子域的方法;
定义一个子区域:
ops.magedu.com. IN NS ns1.ops.magedu.com.
ops.magedu.com. IN NS ns2.ops.magedu.com.
ns1.ops.magedu.com. IN A 1.1.1.1
ns2.ops.magedu.com. IN A 1.1.1.2

fin.magedu.com. IN NS ns1.fin.magedu.com.
fin.magedu.com. IN NS ns2.fin.magedu.com.
ns1.fin.magedu.com. IN A 3.1.1.1
ns2.fin.magedu.com. IN A 3.1.1.2
定义转发服务器:
注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行;
(1)全部转发:凡是对非本地所负责解析的区域的请求,统统转发给指定的服务器;
options {
forward{first |only }
forwarders

(2)区域转发:仅转发对特定的区域的请求只某服务器
zone ”ZONE_NAME" IN {
type forward;
foreard { first| only }
forwards
}
注意:关闭dnssec功能;
dnssec-enable no;
dnssec-validation no;

接下来我给大家演示一下,主从服务器的配置过程:
第一步先配置主服务器:
首先在主配置文件中及/etc/named.conf中做如下操作






然后在主配置文件:定义区域/etc/named.rfc1912.zones
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
};
接下来在/var/named中定义解析库文件



这样主服务器就配置好了。

这样,我们就可以配置从服务器了,从服务器的配置在192.168.1.108这台主机中配置
监听端口的设置和主服务器的都相同,只不过从服务器,只需要配置区域文件,不需要配置解析库文件而已,因为它的解析库文件是从主服务器上面同步而来的。
区域配置如下
zone "magedu.com" IN {
type slave;
masters {192.168.1.110;};
file "slaves/magedu.com.zone";
};
这样主从服务器就配置好了,我这个是之前配置好的,我在主服务器的配置文件中增加一条信息,然后给序列号加1。



接下来我们来看看从服务器的解析库文件



这样一个主从服务器就配置好了,这是主从服务器的正向解析配置,接下来我们来配置一下主从服务器的反向解析配置
我们先来配置主服务器的区域配置
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone";
};
然后来配置解析库文件:


接下来,配置在192.168.1.108上面配置从服务器
从服务器的区域配置
zone "1.168.192.in-addr.arpa" {
type slave;
masters {192.168.1.110;};
file "slaves/1.168.in-addr.arpa";
这样反向的也配置好了。
我们在主服务器上修改消息,然后查看日志



然后我们在看从服务的解析库文件中的序列号发生变化没


这样反向解析也配置好了。
接下来我们要做的是子域授权的操作,我们现在192.168.1.110这台主机中配置父域的解析库



接下来我们在192.168.1.108这太主机中配置子域。
我们先配置区域:
zone "ops.magedu.com" IN {
type master;
file "ops.magedu.com.zone";
};
zone "magedu.com" IN {
type forward;
forward only; #####仅转发特定区域的解析请求到某服务器
forwarders {192.168.1.110;};
然后配置解析库文件
$TTL 600
$ORIGIN ops.magedu.com.
@ IN SOA ns.ops.magedu.com. lirui.ops.magedu.com. (
20150915 ; serial
1D ; refresh
1H ; retry
1W ; expire
1D
)
IN NS ns1.ops.magedu.com.
IN NS ns2.ops.magedu.com.
ns1.ops.magedu.com. IN A 192.168.1.108
ns2.ops.magedu.com. IN A 192.168.1.120
www IN A 192.168.1.119
www IN A 192.168.1.110
ftp CNAME www

~
这样的我们的子域授权的部分也配置好了,我们来验证一下我们的配置是否正确和时候能解析地址


上面是在子域的主机上解析www.magedu.com,可以看到解析是成功的
接下来我们在父域的主机上解析www.ops.magedu.com看时候能解析成功



解析也是成功的

好了接下来,让我们来学习学习view视图的知识
视图:
一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
每个view用一来匹配一组客户端;
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;

view VIEW_NAME {
match-clients { };

}

注意:
(1) 一旦启用了view,所有的zone都只能定义在view中;
(2) 仅有必要在匹配到允许递归请求的客户所在view中定义根区域;
(3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表;
在/etc/named.rfc1912.zones中配置view
view "local"  {
match-clients { mylocal;};###这个mylocal 是配置的acl,是在named.conf中
recursion yes;
zone "." IN {
type hint;
file "named.ca";
};

//注,这个zone在named.conf里默认是有的,使用view语句后,
//要把它删掉(删掉后好像没影响,不过这是一个hint类型的zone,保留了),
//或放进view里,否则在重启named时会有如下报错,
//“when using 'view' statements, all zones must be in views”
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
allow-update{ none;};
};
.....####省略了和实验无关的zone
};


view other {
match-clients {other;};###这个other也是在name.conf中配置的acl
zone "magedu.com" IN {
type master;
file "magedu.com.ok";
allow-update {none;};
};
};


现在我们来看看name.conf中定义的两个访问控制
acl mylocal{192.168.1.110;};###只允许这个主机
acl other {any;};###任何主机都可以访问


然后来看看我配置的两个解析库
magedu.com.zone 这个是在第一个view中
magedu.com.ok 这个是在第二个view中






接下来我们用192.168.1.110和其他主机分别来解析www.magedu.com,看一下地址是不是一样的






从上面的截图可以看出解析的地址是不一样的,这样的我们的view实验也做完了。不足之处望指正。

本文出自 “空白格” 博客,请务必保留此出处http://lirui213.blog.51cto.com/4449582/1698409
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: