一、DNS简介及域名空间
1.1、DNS简介
DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务。
1.2、域名空间
DNS是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的树,这个逻辑的树形结构称为域名空间。
DNS树的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构。Internet域名空间的最顶层是根域(root),其记录着Internet的重要DNS信息,由Internet域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到Internet的各个组织。
DNS根域下面是顶级域(Top Level Domain),也由Internet域名注册授权机构管理。共有3种类型的顶级域。
组织域:采用3个字符的代号,比如com为商业机构组织,edu为教育机构组织,gov为政府机构组织,mil为军事机构组织,net为网络机构组织,org为非营利机构组织,int为国际机构组织。
地址域:采用两个字符的国家或地区代号。如cn为中国,kr为韩国,us为美国。
反向域:这是个特殊域,名字为in-addr.arpa,用于将IP地址映射到名字(反向查询)。
二、DNS服务器的类型
2.1、主DNS服务器 维护所负责解析的域内解析库服务器;“通知”机制:主服务器发生改变,会通知从服务器来同步数据,避免从服务器落后主服务器。 |
2.2、辅助DNS服务 从主DNS服务器或其他的辅助DNS服务器那里"复制"(区域传递)一份解析库;具有容错的能力。 区域传送分类: 全量传送(完全传送):传送整个解析库 增量传送---只传送解析库变化的那部分内容 |
2.3、缓存DNS服务器 不负责解析任何域,不用注册任何域名,但可以帮助本地用户来解析互联网上对某些域名的请求结果;缓存有多级的概念,客户端缓存和服务器缓存。 |
2.4、转发服务器 转发服务器(forwarding server)接收查询请求,但不直接提供DNS解析,而是将所有查询请求发送到另外的DNS服务器,查询结果返回后保存到缓存。如果没有指定转发服务器,则DNS服务器会使用根区域记录,向根服务器发送查询,这样许多非常重要的DNS信息会暴露在Internet上。除了该安全和隐私问题,直接解析会导致大量外部通信,对于慢速接入Internet的网络或Internet服务成本很高的公司,提高通信效率来说非常不利,而转发服务器可以存储DNS缓存,内部的客户端能够直接从缓存中获取信息,不必向外部DNS服务器发送请求。这样可以减少网络流量并加速查询速度。 注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行 (1) 全部转发: 凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器; Options { forward {first|only}; forwarders{指向的dns服务器地址; }; } (2) 区域转发:仅转发对特定的区域的请求至某服务器; zone "ZONE_NAME" IN { type forward; forward {first|only}; #定义转发模式 forwarders {指向的dns服务器地址;}; } 注意:关闭dnssec功能:rpm包安装的,默认是启动的! dnssec-enable no; dnssec-validation no; |
三、DNS查询原理及流程
1)DNS相关概念
(1)DNS缓存
DNS服务器在解析客户机请求时,如果本地没有该DNS信息,则可以会询问其他DNS服务器,当其他域名服务器返回查询结果时,该DNS服务器会将结果记录在本地的缓存中,成为DNS缓存。当下一次客户机提交相同请求时,DNS服务器能够直接使用缓存中的DNS信息进行解析。
(2)资源记录
DNS服务器的信息数据,按照分类进行存储,能够解析客户端的DNS请求。
(3)区域文件
包含区资源记录的文件,选择DNS服务器为授权服务器,管理该区域。在大部分DNS实现中,用文本文件实现区。
2)递归查询和迭代查询
(1)递归查询
递归查询是一种DNS服务器的查询模式,在该模式下DNS服务器接收到客户端请求,必须使用一个准确的查询结果回复客户端。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户端。
(2)迭代查询
迭代查询是另一种DNS服务器的查询模式,在该模式下DNS服务器接收到客户端请求,并不直接回复客户端的查询结果,而是提供其他能够解析查询该请求的另一台DNS服务器地址,客户端再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。
3)DNS查询流程
本地域名服务器给所管理的客户端提供DNS域名解析的递归查询
<1>客户端提交域名解析请求,并将该请求发送给本地域名服务器
<2>本地域名服务器收到请求后,会先查询本地的缓存,如果有查询的DNS信息记录,则直接将查询结果返回给客户端;如果没有该记录,那么本地域名服务器就会将该请求发送给根域名服务器
<3>根域名服务器会返回给本地域名服务器一个所查询域的顶级域名服务器地址
<4>本地域名服务器再向返回的这个顶级域名服务器地址发送客户端的请求
<5>接收到该查询请求的域名服务器查询其缓存和记录,如果有相关的信息则会返回本地域名服务器的查询结果(即可返回给客户端),否则会通知本地域名服务器下一级的域名服务器地址
<6>本地域名服务器将查询请求发送给返回的下一级DNS服务器地址
<7>域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)
<8>本地域名服务器将最终的结果保存到缓存,并将此结果返回给客户端
四、正向解析和反向解析
1)正向解析
正向解析是指域名到ip地址的解析过程
2)反向解析
反向解析是指ip地址到域名的解析过程,反向解析的作用为服务器的身份验证
五、资源记录(RR-Resource Record)
某些资源记录不仅包括DNS域中服务器的信息,还可以用于定义域,即指定每台服务器授权了哪些域,这些资源记录就是SOA和NS资源记录。
1)SOA资源记录
每个区在区的开始处都包含了一个起始授权记录(Start of Authority Record),简称SOA记录。SOA定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA记录。
name:当前区域的名字 value: (1)当前区域的主dns服务器的FQDN,也可以使用当前的区域名字 (2)当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用.替换 (3) (主从服务器协调属性的定义以及否定答案统一的TTL值) |
2)NS资源记录
名称服务器(NS)资源记录表示该区的授权服务器,它们表示SOA资源记录中指定的该区的主和辅助服务器,也表示了任何授权区的服务器。每个区在区根处至少包含一个NS记录,每个NS在后续都应该有一个A记录
name : 当前区域的名字 value:当前区域的某dns服务器的名字,一个区域可以有多个ns记录(dns服务器不止1个) |
3)A或AAAA资源记录
地址(A)资源记录把FQDN映射到IP地址,因而解析器能查询FQDN对应的IP地址。
AAAA资源记录是IPV6
name:某主机的FQDN value:主机名对应主机的ip地址 避免用户写错名称时给错误答案,可以使用泛域名*来解析至特定地址 |
4)PTR资源记录
相对于A资源记录,指针(PTR)记录把IP地址映射到FQDN。
name:ip,有特定格式,把ip地址反过来写,有特定后缀:in-addr.arpa value:FQDN |
5)CNAME资源记录
规范名字(CNAME)资源记录创建特定FQDN的别名。用户可以使用CNAME记录来隐藏用户网络的实现细节,使连接的客户端无法知道。
name: 别名的FQDN value:正式名字的FQDN web.bengbengtu.com IN CANME www.bengbengtu.com |
6)MX资源记录
邮件交换(MX)资源记录为DNS域名指定邮件交换服务器。邮件交换服务器是为DNS域名处理或转发邮件的主机,多个MX服务器之间有优先级之分。
name:当前区域的名字 value:当前区域的某邮件服务器(smtp服务器)的主机名 一个区域内,MX记录可以有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高 |
六、DNS服务器安装
6.1、bind
BIND全称为Berkeley Internet Name Domain(伯克利因特网名称域系统)。BIND8融合了许多提高效率、稳定性和安全性的技术,而BIND9增加了一些超前的理念:IPv6支持、公开密钥加密、多处理器支持、线程安全操作、增量区传送等等。
6.2、bind安装包
bind-9.8.2-0.30.rc1.el6.x86_64
bind-utils-9.8.2-0.30.rc1.el6.x86_64
6.3、安装--主从DNS搭建过程
测试环境:
主DNS服务器:ip-192.168.1.20,CentOS 6
从DNS服务器:ip-192.168.1.21,CentOS 6
主DNS服务器相关配置
#vim /etc/named.conf
/etc/named.conf options { listen-on port 53 { 192.168.1.20; }; directory "/var/named"; allow-query {192.168.1.0/24;10.0.0.0/24;}; recursion yes;} logging { channel default_debug { file "data/named.log"; severity dynamic; }; }; zone "bengbengtu.com" IN { type master; file "bengbengtu.zone"; allow-transfer {192.168.1.21;}; }; zone "1.168.192.in-addr.arpa" IN { type master; file "1.168.192.apra"; allow-transfer {192.168.1.21;}; };
需要将正解和反解文件的权限定义为640;属主和 属组为root:named
bengbengtu.zone ===正解区域文件
$TTL 1D @ IN SOA bengbengtu.com. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. IN NS ns2.bengbengtu.com. IN MX 10 mail.bengbengtu.com. ns1 IN A 192.168.1.20 ns2 IN A 192.168.1.21 mail IN A 192.168.1.20 www IN A 192.168.1.20 web IN CNAME www ftp IN A 192.168.1.30
1.168.192.arpa === 反解区域文件
$TTL 1D @ IN SOA 1.168.192.in-addr.arpa. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. 20 IN PTR ns1.bengbengtu.com. 20 IN PTR www.bengbengtu.com. 20 IN PTR mail.bengbengtu.com.
测试:
dig -t a www.bengbengtu.com @192.168.1.20
dig -x 192.168.1.20 @192.168.1.20
dig axfr bengbengtu.com @192.168.1.20
从DNS服务器相关配置
#vim /etc/named.conf
listen-on port 53 { 192.168.1.21; }; directory "/var/named"; allow-query { 192.168.1.0/24; }; recursion yes; zone "bengbengtu.com." IN { type slave; file "slaves/bengbengtu.zone"; masters {192.168.1.20;}; }; zone "1.168.192.in-addr.arpa" IN { type slave; file "slaves/1.168.192.arpa"; masters {192.168.1.20;}; };
至此主从DNS服务器配置完成!!
七、DNS的view视图
分离解析(Split DNS)域名服务器:来自不同地址的客户端请求解析同一个域名时,为其提供不同的解析结果,使用view视图来定义!
(1)一旦启用了view,所有的zone都只能定义在view中
(2)仅有必要再匹配到允许递归请求的客户所在view中定义根区域
(3)客户端请求到达时,是自上而下检查每个view所服务器的客户端列表;所以优先被匹配的view要放在最上面
2个不同的view,分别匹配不同的客户端,分别为每一个相同的zone提供了2个不同的解析库文件,而且解析库文件中的同一个主机名解析的ip地址不一样,来自不同的客户端请求时,他们一旦被匹配到view后,view中定义的zone将会为此用户进行解析,而这些zone使用了不同的解析库文件,而不同的解析库里面同一个主机使用了不同的解析地址,所以解析的结果是不一样的
这里只测试正向解析,过程如下:
view 视图 :192.168.1.20 /etc/named.conf view "local" { match-clients {192.168.1.20;}; zone "." IN { type hint; file "named.ca"; }; zone "bengbengtu.com" IN { type master; file "bengbengtu.com.local"; }; }; view "other" { match-clients {192.168.1.21;}; zone "." IN { type hint; file "named.ca"; }; zone "bengbengtu.com" IN { type master; file "bengbengtu.com.other"; }; }; bengbengtu.com.local $TTL 1D @ IN SOA bengbengtu.com. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. IN NS ns2.bengbengtu.com. ns1 IN A 192.168.1.20 ns2 IN A 192.168.1.21 mail IN A 192.168.1.20 www IN A 200.200.200.200 #web IN CNAME www ftp IN A 192.168.1.30 root@localhost ~]# vim /var/named/bengbengtu.com.other $TTL 1D @ IN SOA bengbengtu.com. admin.bengbengtu.com. ( 2015091401 3M 2M 3D 1D) IN NS ns1.bengbengtu.com. IN NS ns2.bengbengtu.com. IN MX 10 mail.bengbengtu.com. ns1 IN A 192.168.1.20 ns2 IN A 192.168.1.21 mail IN A 192.168.1.20 www IN A 100.100.100.100 ftp IN A 192.168.1.30
测试结果如下:
至此DNS服务器的view视图介绍完毕!