Centos 6.5  DNS详解


 

      为什么会出现DNS?为了让你上网浏览网页时不必直接输入IP地址而是输入更易记忆和理解的主机名字


 

   主机间通信依靠IP地址。计算机诞生之初是没有DNS概念的,当时的主机数量寥寥无几,主机通信依靠的是写在host文件中的主机名到IP地址的对应关系来查询IP地址,然后使用IP进行通信。但是随着时间的推移,主机数量急剧增长,host文件的弊端显露无疑。此时急需一种高效方便的解决方案。DNS应时而生。是的DNS就是用于主机名到IP的解析的。


    下面结合下图分析dns解析过程:


wKiom1Ph9dfi7Qi9AAI-qcle2t8211.jpg

 当你打浏览器输入网址例如:www.google.cn然后就打开了谷歌的页面。可能你没有意识到计算机在你看不见的地方做了一系列的工作。
     浏览器会发起DNS库文件调用,用于查询google的IP地址。首先查询本地的DNS缓存,如果找到就直接返回IP地址,没有就继续查找host文件如果还没找到就会去到/etc/resolv.conf 文件中你设置的DNS服务器去请求查询的IP。服务器收到请求后首先查询自己的缓存记录,如果查到就返回IP地址,否则服务器将去查询.(根)DNS服务器,根服务器说你要查询的域不是我负责的区域(也会首先查关于.cn的缓存,以后不再赘述),但是我知道.cn负责你去找它去查询。于是返回.cn的IP地址。服务器收到.cn的地址,然后到.cn去查询。.cn 看到请求说我这里没有但是我知道google.cn知道你去找它,于是返回google.cn的IP地址,服务器收到返回的IP地址后又去找google.cn,googl.cn一看此主机正是自己所负责解析的,于是返回www.google.cn的IP地址给服务器,服务器收到后将IP交给浏览器,于是就可以通过网络访问www.google.cn的主机。整个过程大致是这样的。
   


DNS服务器的分类:
   主DNS服务器  :负责区域的解析。
   辅助DNS服务器:容错设计当主DNS服务器无法解析时在一定时间内代替主DNS。
   缓存DNS服务器:用于缓存DNS查询的记录。
   转发DNS服务器:自身不响应DNS查询请求,只是将请求转发至其他DNS服务器。
下面将以源代码编译安装的方式介绍四种服务器的配置。下列过程完全手动进行。最后介绍DNS的视图功能实现智能DNS的应用。

下载bind源代码包:
wget http://www.isc.org/downloads/file/bind-9-9-6b1/?version=tar.gz
确保编译环境;
yum groupinstall “Server Platform Development” -y
yum groupinstall “Server Platform” -y
Yum install gcc -y
编译安装:
增加系统用户:useradd -r -u 53 named
tar xf  bind-9.9.6b1.tar.gz
cd bind-9.9.6b1.tar.gz
./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads
配置完成后编译安装
Make && make install
手动创建缓存服务器
vim /etc/named.conf
acl mynetwork {
 
              172.16.101.34;
                  127.0.0.1
                  172.16.34.1
 
              };
options {
 
      direcotry “/var/named”;
      allow-recursion { mynetwork; };
      Allow-query { mynetwork; }:
 
      };
 
 
      
Zone “.” IN {
 
           Type hint;
           File “named.ca”;
 
};
 
 
Zone “localhost” IN {
 
   				  Type  master;
                  File “localhost.zone”;
                  };
Zone “0.0.127.in-addr.arpa” {
                  Tppe master;
                  File “0.0.127.zone”
                  };
 
 
编写解析库文件:
生成named.ca
Dig -t NS . @a.root-servers.net > /var/named/named.ca
 
Vim /var/named/localhost.zone
$TTL 86400
$ORIGIN localhost.
@		IN		SOA	@		root.local.com ( 2014080501 1W 10M 2W 1D )
        IN 		NS 		@
IN		A		127.0.0.1
 
  Vim /var/named/0.0.127.zone
$TTL 86400
$ORIGIN 0.0.127.in-addr.arpa.
@       IN      SOA     @       admin.localhost. ( 2014080501 30M 10M 7D 1D )
        IN      NS      @
        IN      A       127.0.0.1
1       IN      PTR     localhost.
调整文件权限:
chown -R root:named /etc/named  /var/named
Chmod 750 /etc/named /var/named
Chmod 640 /etc/named/named.conf /var/named/*
导出二进制文件
Vim /etc/profile.d/named.sh
Export PATH=/usr/local/bind9/sbin/:$PATH
导出man文档
Vim /etc/man.config
MANPATH /usr/local/bind9/share/man



创建启动脚本可以用 service servicename start 方式启动
脚本将以附件形式给出::::::::::
Cp named /etc/init.d/named
Chown root:named /etc/init.d/named
Chmod +x /etc/init.d/named 
Chkconfig --add named
查看结果:
chkconfig --list | grep named
named          	0:off	1:off	2:off	3:off	4:off	5:off	6:off
 
 
至此纯缓存服务器创建成功:
启动named
Service named start
创建主DNS服务器:只需在主配置文件中增加一个域的解析 这里假设为google.cn域

wKiom1Ph9n7QZVKyAAChizyNzHA314.jpg


编辑主配置文件增加如下内容
 Zone  “google.cn” {
                  Type master;
                  File “google.cn.zone”;
                  Allow-update { none; }
                 };
创建解析库文件
Vim /var/named/google.cn.zone
$TTL 3600
$ORIGIN google.cn.
@		IN 		SOA	ns.google.cn. 	Root.google.cn. ( 2014080501 30M 10M 7D 1D )
IN		NS		ns.goggle.cn. 
IN      MX 10  mail.google.cn
Ns		IN		A		172.16.101.34
Mail    IN      A       172.16.101.33
www    IN      A       172.16.101.34
ftp      IN      A        172.16.101.32
 
 
重启DNS服务 :service named restart
用客户端测试:

wKioL1Ph98SjVVM8AALM_Sh04A4436.jpg


wKioL1Ph99fwUl-7AAJn_rl0rMg965.jpg

创建主从DNS


拓扑图如下:


wKioL1Ph9_Tza5WpAADFGu7Kk90714.jpg




为了方便这里采用yum方式安装bind在从DNS服务器


在主DNS配置文件中添加一条控制信息allow-transfer { 172.168.101.100; } 不加的话任何主机都可以得到主dns的所有区域文件解析库。在需要传送的域解析库中 添加一条NS记录指向从DNS。


wKiom1Ph9yPhdVQIAAC-2KsrRPw780.jpg

允许从服务器查询:


wKioL1Ph-Fzywwq3AACFHXIh21Q070.jpg

允许从服务器区域传送


wKiom1Ph913DoPNkAAD3tRM1jmk136.jpg

主服务器配置完毕


 

下面设置从服务器


只需修改配置文件增加一个类型为从的区域vim /etc/named.rfc1912.zones


wKiom1Ph94vQlVP2AABuG2kl-qI525.jpg

重启从服务器的named就会传送区域文件


wKiom1Ph96jCZEA1AACdRFMPPZw855.jpg


从服务器的特性


可以帮助主服务器解析域名 这是在主服务器还存活的情况下 否则当到达设定的过期时间后从服务器拒绝提供任何解析服务。


#!/bin/bash
#
QTYPE="A"
QDOMAIN="www.google.cn"
CDNS="172.16.101.100"
read -p "please input expire time UNIT is S: " EXTIME
ssh root@172.16.101.34 'service named stop '
rndc flush
for i in $(seq 1 2 );do
    dig -t $QTYPE $QDOMAIN @$CDNS
    sleep $EXTIME
    rndc flush
Done

子域授权原理图如下:将其子域授权其他服务器解析


wKioL1Ph-QjyWUlCAABx4x4yzHk912.jpg

实验拓扑图:


wKioL1Ph-SWxtvaIAAEUR-McFkQ045.jpg


配置主DNS服务器:


内容如下:



wKiom1Ph-CngVmabAAGWl8xINas906.jpg


配置子域服务器增加tech.google.cn域的解析


wKioL1Ph-V3yTf7XAADAfAUGciE208.jpg


增加子域的解析库


wKioL1Ph-XnSM4q9AACuxU_7lSY146.jpg


使用客户端测试


wKioL1Ph-ZLyB5hhAALPPCmbnmU203.jpg


子域part.google.cn同理


 

用tech.google.cn服务器去解析其父域google.cn在局域网中无法实现,因此要用到转发服务器。


在tech.google.cn 创建转发DNS使其直接能够解析其父域主机地址


wKiom1Ph-JjTJFjmAAB6o8J17tc855.jpg


客户端测试


wKiom1Ph-LCCKJklAAMTLAXK_cM158.jpg



DNS智能服务器(视图功能)可以根据不同客户端IP地址解析不同的主机IP地址(现实中的应用电信联通双线机房)


 

实验拓扑环境:


wKiom1Ph-NbBM-5XAADMcLIeExY560.jpg



配置主DNS视图功能


wKioL1Ph-gnAuh5RAAJodROCGBg894.jpg


wKiom1Ph-QTyWjpsAAFheYEWBl4303.jpg


正确解析


wKiom1Ph-R6w_2-_AABfrBj93N0636.jpg



wKioL1Ph-k-yqB2fAAJYX6-eu18276.jpg


不同网段解析同一域名得到不同结果