友情提示:文中实验平台vmware 10 + Centos6.6 X86_64,涉及的命令只为实现工作模型,不做为生产服务器配置依据。
内容概括:
1.DNS的工作模型
2.DNS正反解析实现
3.DNS主从同步
4.DNS子域授权和简单的安全机制
5.DNS中view的使用
一.DNS细微知识点
1.1)DNS: Domain Name Service,是个应用层协议,做域名与IP地址之间互相解析。
使用UDP53做DNS查询应答
使用TCP53做DNS服务器间区域文件传送。
1.2)域名的结构示意图:
1.3)主机做域名查找的流程:
Client-->本地host文件---->Local Cache--->(recursion递归)网络运营商DNS Server----->Server Cache ---->(iteration迭代)internet DNS domain name server
*任一环节找到后停止后面位置查找
Centos 6.6上 host文件位置:/etc/hosts
windows上host位置:%WINDOWS%/system32/drivers/etc/hosts
1.4)查找的方式:
递归查找:recursion,发起域名查找后,必会得到一个明确的答案。
迭代查找:iteration,发起域名查找后,得到的是个参考答案,还需根据参考答案,查询别的服务器。
主机和本地运营商提供的DNS服务器之间是 递归查询,一次查询请求发出,得到明确答案。
运营商DNS代替客户端去查询地址时,先搜索根区域,从全球13台根服务器中选一个最快的,进程查询,例如查找www.51cto.com, 先查找根服务器,根服务器回应让去找.com域名服务器和.com服务器的地址, 运营商DNS再去找.com域名服务器,.com服务器回应让去查找51cto.com域名服务器和51cto.com.域名服务器地址,运营商DNS再去找51cto.com域名服务器,取得www.51cto.com对应的ip地址,并返回给客户端,这就是 迭代查询。
1.5)域名服务器的合法化
假设 jx.santan.com 为santan.com域内的一台dns服务器,它若想合法化:
(1)有个本地互联网运用商提供的可路由的ip地址
(2)正常工作的提供域名查询的软件和santan.com域的资源文件。
(3)在上级域名.com服务器中有关于santan.com域的NS记录和A记录(见下面的“DNS子域授权”)。
1.6)DNS服务器的类型:
主DNS服务器:维护所负责解析的域内解析库服务器,库文件由管理员维护的。
辅助DNS服务器:从主DNS服务器或其他的从DNS服务器那里“区域传送”解析库
缓存DNS服务器:带局域网内主机做DNS查询,将结果暂存在缓存中,便于下次快速查找。
1.7)DNS服务器维护的资源记录类型:
资源记录:Resource Record, RR
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;
A:internet Address,标明:FQDN对应的IP地址。
AAAA: 标明:FQDN对应的IPV6地址
PTR: PoinTeR,反向记录,标明:IP地址对应的FQDN
NS: Name Server,标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX: Mail eXchanger,邮件交换记录,定义区域内的邮件服务器。
1.8)提供DNS服务的软件
软件:bind,
二.DNS正反解析模型的实现
* 请关闭防火墙和selinux,以下配置仅做为实现DNS工作模型,你不要想的太多。
Test01.lijun.com上配置:
2.1)安装bind软件:
建议使用yum安装,bind,bind-libs,bind-utils这三个包是必装的。bind-chroot在实验环境下建议不安装。
2.2)配置文件的设定:
DNS的配置文件分为主配置文件和区域配置文件,其中主配置文件在/etc/named.conf其中最少应该包含三段信息,分别为根、local和127.0.0.1的配置,区域配置文件存放在/var/name的路径下,每个文件用于指定一个区域,名称要同在/etc/named.conf中配置的一致。
2.3)区域配置文件的设定:
bind软件运行后的进程名为named,进程属主为named,所以请注意建立的区域文件的权限和所有组的设定。
[root@Test01 named]# vim lijun.com.zone 该文件是lijun.com域的正向解析文件
[root@Test01 named]# vim 192.168.100.zone 该文件是lijun.com域的反向解析文件
反向解析文件中存在SOA,NS和PTR记录
2.4)启动服务
启动服务前,请使用自带的named-checkzone检查区域文件,使用named-checkconf检查bind的配置文件。
2.5)验证配置
三.DNS主从同步模型的实现
注意: 每个域之能有一台主DNS服务器,从DNS服务器可有多台。
主DNS服务器的区域文件由管理员手工维护,从DNS服务器的区域文件从主DNS服务器上通过区域传送过来。当然也可从DNS服务器通过区域传送同步给从DNS服务器。
从DNS服务器bind的配置文件中指定的区域文件的名称一定要同主DNS服务器上设定的区域文件的名称一致。
* 请关闭防火墙和selinux,以下配置仅做为实现DNS工作模型,你不要想的太多。
3.1)主DNS服务器上添加关于辅助dns服务器的NS和A记录
[root@Test01 named]# vim /var/named/lijun.com.zone
[root@Test01 named]# vim /var/named/192.168.100.zone
3.2)辅助DNS的设定
安装bind程序包:
[root@Test02 ~]# yum install bind -y
编写bind主配置文件:
3.3)测试下辅助DNS的解析
3.5)修改主DNS服务器中设定,观察主辅DNS服务器间传送
四.DNS子域授权和简单的安全机制
在DNS管理方面,通过子域授权,分离父域的工作负担,将子域的工作交给子域DNS服务器去维护,这样可减轻父DNS的压力,同时实现分布式部署DNS,避免因父域DNS服务器或网络故障导致整个域名下DNS的解析故障。
这里实现的是DNS正向解析的子区授权,反向解析的子域授权没做成功。
实现步骤:
1)在父域的主DNS服务器上添加关于子域的NS记录和A记录。
2)在子域DNS服务器上做好本区域的区域解析
默认情况下:父域知道子域DNS服务器位置,而子域DNS服务器不知道父域DNS服务器。可以在子域DNS服务器上指定转发的方式,解决这种默认动作。
3)子域DNS服务器上配置关于父域的指定转发。
格式:
zone "ZONE_NAME" IN {
type forward;
forward only | first ;
//在only 和 first中选一个,only表示为只发给下面的forwarders 后的地址,不管它理不理
//first表示先发给下面forwarders 后的地址,它不理我,在去找根迭代解析
forwarders { father-zone-name-ns-ip; };
// 这是指明父域ns的IP地址
};
4)本次实验中添加DNS简单的安全机制
allow-query {}; //指明解释查询的地址范围,这是个白名单
allow-transfer {}:允许区域传送的主机,也就是填写从DNS地址的;白名单;
allow-recursion {}: 允许递归的主机,DNS服务器应对所属区域下的主机做递归查询,其它的不做递归询;
allow-update {}: 允许更新区域数据库中的内容,这个不应允许任何的主机做该操作;
5)DNS中做地址范围匹配,定义好后在配置文件中可被多次调用:
注意:只能先定义后使用,一般在配置文件最开始的地方,一般放置在option中。
格式:
acl acl_name {
ip;
ip;
net/prelen;
};
例如:
acl dg {
192.168.100.0/24;
127.0.0.0/8;
};
bind有四个内置的acl:
none: 没有一个主机;
any: 任意主机;
local: 本机;
localnet: 本机的IP同掩码运算后得到的网络地址;
实验场景:L公司的lijun.com.域下,建立zhuzao.lijun.com.子域名给下属分公司使用,要求:父域服务器可对子域内主机域名的解析,子域DNS服务器可解析父域内主机域名的解析。
* 请关闭防火墙和selinux,以下配置仅做为实现DNS工作模型,你不要想的太多。
父域主DNS服务器Test01上:
1)yum安装bind程序包,见上,再次不重复。
2)设定配置文件和区域解析文件
[root@Test01 named]# vim lijun.com.zone
子域主DNS服务器Test02上:
1)yum 安装bind略
2)配置主配置文件/etc/named.conf
3)建立区域解析文件:
在父区域上测试对子区域的解析:
五:DNS中view的使用:
大家都知道在我们天朝,网络运营商是各自为营的,虽有中间的互通网络,但是面对汹涌的用户数据流,那点中间网络带宽瞬时会被占满,带来就是用户体验的不好,尤其是游戏运营,电商特注意用户体验。
解决方式:1)在不同省份不同的运营商机房中分别配置服务器。2)将服务器放置于双线机房。使用智能DNS,根据用户来源网络运营商地址的不同,对相同域名的解析给出各自运营商网络主机的地址。 借用下面的图:都是对WWW.XBAO.COM这个域名的请求,因客户来源不同的运营商,那么中间的DNS主机,会智能进行判断,X信的用户给予的解析地址为10.100.100.1,而X通的用户得到的解析地址为192.168.1.100,虽然客户请求解析的地址都是www.xbao.com。
当然要保证各个运营商服务器上网站内容一致性还需使用CDN技术,这就超出本文的内容范围。
中间DNS服务器要达到上述的效果可以使用bind的view技术来实现,下面就是实验过程。
view要点:
1)一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
2)每个view用acl定义的地址来匹配一组客户端;
3)多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;
4) 一旦启用了view,所有的zone都只能定义在view中;
5)只在匹配允许递归请求的客户所在view中定义根区域;
6)客户端请求到达时,是自上而下检查每个view所服务的客户端列表;先匹配的先处理,后续的就停止不再做匹配动作。
view格式:
view VIEW_NAME {
match-clients { ACL-NAME };
zone "zone-name" IN {
....
};
....
};
* 请关闭防火墙和selinux,以下配置仅做为实现DNS工作模型,你不要想的太多。
1)中间DNS服务器配置网络和安装BIND软件:
2)安装bind并配置文件:
主配置文件:/etc/named.conf
局部配置文件:/etc/named.rfc1912.zones
3)定义区域解析文件:
4)测试机测试:
另一台测试机地址
终于写完了!!