DNS     domain  name system   域名系统

[root@li ~]# vim /etc/nsswitch.conf
hosts:      files dns  --涉及到名称翻译的都会先查找/etc/hosts,再查找DNS

 


www.baidu.com   -->  公网的IP地址
TCP/IP 架构的网络都是以IP地址做为识别的,做逻辑寻址
但是因为客户不可能记得住那么多IP地址,所以使用一个域名,而DNS做的就是把域名解析为IP地址

 

DNS服务器

 特点:
 1,分布式的数据库,
 2,解决了数据不一致,避免了名字冲突
 3,有缓存机制,提高了性能和可靠性

 分层结构,最多127层

 查询方式:递归查询,迭代查询

 

DNS     全世界有13台根域服务器


.com    .org     .edu   .gov       .net      .mil 
商业     组织  教育    政府       通迅      军事

   根

 cn     hk   us     jp     tw     in
 
    .com.cn      .net.us    .edu.cn


     

深圳电信的DNS地址: 
 首选的:202.96.134.133
 备选的:202.96.128.86 ----------

 


--对应的linux主机上写DNS指向,由/etc/resolv.conf
vim /etc/resolv.conf
nameserver 10.1.1.35  --可以写三个,第一个没有记录,则找第二个

 

本地DNS         远端DNS
        

  DNS的工作原理及过程分下面几个步骤:
    第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
    第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
    第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
    第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
    第五步:重复第四步,直到找到正确的纪录。
    第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
    让我们举一个例子来详细说明解析域名的过程.假设我们的客户机如果想要访问站点:www.linejet.com , 此客户本地的域名服务器是dns.company.com , 一个根域名服务器是NS.INTER.NET , 所要访问的网站的域名服务器是dns.linejet.com,域名解析的过程如下所示:
   (1)客户机发出请求解析域名www.linejet.com的报文
   (2)本地的域名服务器收到请求后, 查询本地缓存, 假设没有该纪录, 则本地域名服务器dns.company.com则向根域名服务器NS.INTER.NET发出请求解析域名www.linejet.com
   (3)根域名服务器NS.INTER.NET收到请求后查询本地记录得到如下结果:linejet.com NS dns.linejet.com (表示linejet.com域中的域名服务器为:dns.linejet.com ), 同时给出dns.linejet.com的地址,并将结果返回给域名服务器dns.company.com。
   (4)域名服务器dns.company.com 收到回应后,再发出请求解析域名www.linejet.com的报文。
   (5)域名服务器 dns.linejet.com收到请求后,开始查询本地的记录,找到如下一条记录: www.linejet.com A 211.120.3.12 (表示linejet.com域中域名服务器dns.linejet.com的IP地址为:211.120.3.12),并将结果返回给客户本地域名服务器dns.company.com。
   (6)客户本地域名服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。
  这样就完成了一次域名解析过程,

 


bind  (berkeley  intenet name domain)


yum  install bind* -y


软件包;

bind.i386        --主服务软件包                            
bind-chroot.i386           -- 笼环境软件包                 
bind-devel.i386   --开发包
bind-libs.i386   --库文件
bind-utils.i386   --工具包


协议端口:  tcp/udp 53

  查询DNS记录只使用udp 53端口
  主DNS服务器和备DNS服务器之间的数据同步使用tcp 53端口


 配置文件的目录:
  没有安装bind-chroot.i386的话
   配置文件为/etc/named.conf
   数据文件在/var/named目录下

  安装了bind-chroot.i386
   配置文件为/var/named/chroot/etc/named.conf --默认没有
   数据文件在/var/named/chroot/var/named目录

从上面看到装了bind-chroot,笼环境为/var/named/chroot/


[root@dns data]# ls /var/named/chroot/etc/ --域配置文件目录
localtime   rndc.key

[root@dns data]# ls /var/named/chroot/var/named/
data   slaves

[root@dns data]# ls /var/named/chroot/var/named/data/  --存放主zone文件

[root@dns data]# ls /var/named/chroot/var/named/slaves/  --存放从zone文件


配置前的准备:

主机名三步,改好
hostname dns.cluster.com

vim /etc/hosts
10.1.1.35       dns.cluster.com

vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=dns.cluster.com

 

配置步骤:
 1,编辑named.conf --记录你的域和域对应的数据文件在哪
 2, 编辑zone区域文件 --就是数据文件,记录域名和IP的对应

 

 vim /var/named/chroot/etc/named.conf --手动建立


第一步:编辑named.conf

 vim /var/named/chroot/etc/named.conf
options {
      directory "/var/named";  --定义你的目录路径,指的是/var/named/chroot/var/named/
};
zone "cluster.com" IN {  --单独对cluster.com这个域的定义,注意“引号里不要有空格
        type master;  --定义dns服务器的类型为主
        file "data/master.cluster.com.zone";--定义存放域名和IP地址对应的区域文件存放的地方
};


[root@dns data]# vim /var/named/chroot/var/named/data/master.cluster.com.zone

$TTL 86400 --生存时间,对应缓存多久
@       IN      SOA     dns.cluster.com.        root. ( --定义一个授权域的开始
                                2011050401 --版本号,最好写十位数
                                120
                                240
                                360
                                86400 )
        IN      NS      dns.cluster.com. --定义域为cluster.com
dns     IN      A       10.1.1.35 --表示li.cluster.com对应10.1.1.35
www     IN      A       11.22.33.44 --对应的ipDNS只负责解析,但能不能找到不是DNS的职责


[root@dns data]# /etc/init.d/named restart

 

客户端的操作:
[root@li ~]# vim /etc/resolv.conf

nameserver  10.1.1.35  --把这个指向DNS服务器


验证:现在在firefox里输入  http://li.cluster.com就访问到笔记了,就是因为解析成10.1.1.35了

 

还可以使用下面的三种命令来解析
nslookup - query Internet name servers interactively
dig - DNS lookup utility
host - DNS lookup utility

[root@li ~]# nslookup li.cluster.com
Server:         10.1.1.35
Address:        10.1.1.35#53

Name:   li.cluster.com
Address: 10.1.1.35

[root@li ~]# dig li.cluster.com
[root@li ~]# host li.cluster.com
li.cluster.com has address 10.1.1.35

 

例二:反向解析
 IP解析为域名 (邮件服务器反垃圾邮件时可以应用)


第一步:主配置文件添加以下区域:
zone "1.1.10.in-addr.arpa" IN {
        type master;
        file "data/master.1.1.10.in-addr.arpa.zone";
};


第二步:建立区域数据文件
[root@li ~]# vim /var/named/chroot/var/named/data/master.1.1.10.in-addr.arpa.zone

$TTL 86400
@       IN      SOA     1.1.10.in-addr.arpa.    root. (
                                2011050401
                                120
                                240
                                360
                                86400 )
        IN      NS      dns.cluster.com.
35      IN      PTR     dns.cluster.com. --注意有点.号


[root@li ~]# /etc/init.d/named restart


[root@dns data]# nslookup 10.1.1.35
Server:         10.1.1.35
Address:        10.1.1.35#53

35.1.1.10.in-addr.arpa  name = dns.cluster.com.

 

例三,使用DNS的轮循实现简单的负载均衡


[root@dns data]# vim /var/named/chroot/var/named/data/master.cluster.com.zone

$TTL 86400
@       IN      SOA     dns.cluster.com.        root. (
                                2011050401
                                120
                                240
                                360
                                86400 )
        IN      NS      dns.cluster.com.
dns     IN      A       10.1.1.35
        IN      A       10.1.1.36
        IN      A       10.1.1.37
www     IN      A       11.22.33.44


使用nslookup验证,会实现自动轮循

[root@dns data]# /etc/init.d/named restart


[root@dns data]# nslookup dns.cluster.com --每次访问下面的IP顺序都会变动,大多数客户端会访问第一个IP
Server:         10.1.1.35
Address:        10.1.1.35#53

Name:   dns.cluster.com
Address: 10.1.1.35
Name:   dns.cluster.com
Address: 10.1.1.36
Name:   dns.cluster.com
Address: 10.1.1.37

 


例四:CNAME记录的使用 --与apache里虚拟主机课程有联系(同一台主机多少域名)

$TTL 86400
@       IN      SOA     dns.cluster.com.        root. (
                                2011050401
                                120
                                240
                                360
                                86400 )
        IN      NS      dns.cluster.com.
dns     IN      A       10.1.1.35
        IN      A       10.1.1.36
        IN      A       10.1.1.37
www     IN      A       11.22.33.44
bbs     IN      CNAME   www
sports  IN      CNAME   www
news    IN      CNAME   www


[root@dns data]# /etc/init.d/named reload


验证时
nslookup www.cluster.com
nslookup bbs.cluster.com
nslookup sports.cluster.com
nslookup news.cluster.com 

全部返回的是同一个IP地址

 

例五:实现直接对域的解析
$TTL 86400
@       IN      SOA     dns.cluster.com.        root. (
                                2011050401
                                120
                                240
                                360
                                86400 )
        IN      NS      dns.cluster.com.
dns     IN      A       10.1.1.35
        IN      A       10.1.1.36
        IN      A       10.1.1.37
www     IN      A       11.22.33.44
bbs     IN      CNAME   www
sports  IN      CNAME   www
news    IN      CNAME   www
cluster.com.    IN      A       10.1.1.35 --注意com后面有点.


/etc/init.d/named reload


[root@dns data]# nslookup cluster.com
Server:         10.1.1.35
Address:        10.1.1.35#53

Name:   cluster.com
Address: 10.1.1.35

 

例六:使用通配符实现泛解析

*       IN      A       10.1.1.35 --使用*号表示任何主机头


/etc/init.d/named reload

[root@li ~]# nslookup sldfjsladfjasfjdsa.cluster.com --主机头任意字符,都解析为10.1.1.35
Server:         10.1.1.35
Address:        10.1.1.35#53

Name:   sldfjsladfjasfjdsa.cluster.com
Address: 10.1.1.35

 

例七:实现连接范围域名解析 --跟DHCP结合,可以在分配IP的同时分配主机名
 实现station1~station254.cluster.com 与10.1.1.1~10.1.1.254的对应

  
 正向DNS的写法
# vim /var/named/chroot/var/named/data/master.cluster.com.zone

      $GENERATE 1-254 station$        IN      A       10.1.1.$

 /etc/init.d/named reload 

 测试:
 nslookup 测试

 
 反向DNS的写法

# vim /var/named/chroot/var/named/data/master.1.1.10.in-addr.arpa.zone

    $GENERATE 1-254  $       IN      PTR     station$.cluster.com.

 测试:
 nslookup 测试

 

例8: 辅助DNS服务器(从DNS服务器)的配置

        
主 35
备 71


    
  10.1.1.35      10.1.1.71
  主   ---- 从
      type master    type slave
       zone文件      被动的从主传过来zone文件


 从DNS服务器的准备工作:
  和主DNS服务器一样

 

1,配置从服务器的主配置文件

vim /var/named/chroot/etc/named.conf

 options {
        directory "/var/named";
};

zone "cluster.com" IN {
        type slave; --类型定义为slave
        file "slaves/slave.cluster.com.zone"; --最好把zone文件定义到slaves目录下
        masters  { 10.1.1.35; }; --指定主DNS服务器的IP地址
};


[root@localhost ~]# ls /var/named/chroot/var/named/slaves/  --此目录下什么都没有

[root@localhost ~]# /etc/init.d/named start --启动named服务
Starting named:                                            [  OK  ]

[root@localhost ~]# ls /var/named/chroot/var/named/slaves/ --再次查看发现是主上面下载过来了
slave.cluster.com.zone


 如果不能下载过来:
  查看网络是否连通,就是ping一下
  查看iptables,selinux是否关闭
  时间是否同步等

 

[root@localhost ~]# tail /var/log/messages

Mar 23 15:17:58 localhost named[6939]: zone cluster.com/IN: Transfer started.
Mar 23 15:17:58 localhost named[6939]: transfer of 'cluster.com/IN' from 10.1.1.35#53: connected using 10.1.1.71#60355
Mar 23 15:17:58 localhost named[6939]: zone cluster.com/IN: transferred serial 2011032301
Mar 23 15:17:58 localhost named[6939]: transfer of 'cluster.com/IN' from 10.1.1.35#53: end of transfer
Mar 23 15:17:58 localhost named[6939]: zone cluster.com/IN: sending notifies (serial 2011032301)

 

 

例九:验证主DNS到从DNS的更新

 1,更新主服务器的区域文件的记录,注意,加大版本号
 
 vim /var/named/chroot/var/named/data/master.cluster.com.zone
 
 随便添加一条记录,然后增大版本号的数字,最好把刷新时间改小点(比如60秒)


 2,/etc/init.d/named restart --重启服务


 3,在从域名服务器这里查看


1,直接删除/var/named/chroot/var/named/slaves/slave.cluster.com.zone 文件
 然后重启服务


2,从DNS服务器什么都不用做,用watch tail /var/log/messages查看日志看是否能够自动更新过来 --或者使用tail -f来查看

 

 

例十:限制从DNS的IP

 主对从DNS的限制

vim /var/named/chroot/etc/named.conf

     zone "cluster.com" IN {
        type master;
        file "data/master.cluster.com.zone";
        allow-transfer { 10.1.1.71; }; --加上这一句,限制了只有71这台机才能做这个域的从DNS
};

 

例十一:转发服务器的设置

 
前面所做的全是一个域的情况,也就是我只能解析cluster.com这一个域,如果想要解析另外一个域

方法一:在named.conf里再写一个域
然后再配置一个对应zone数据文件
重启服务


方法二:做转发

 单域转发
   1,named.conf里加上下面一段
zone "man.com" IN {
        type forward;
        forwarders { 10.1.1.127; };
};

/etc/init.d/named restart


[root@li ~]# nslookup station171.man.com  --查找能查出来,是因为127的DNS服务器的zone文件里有,我这里转发过去查找到结果,再返回过来
Server:         10.1.1.45
Address:        10.1.1.45#53

Non-authoritative answer:
Name:   station171.man.com
Address: 10.1.1.171


 2,完全转发
 options {
        directory "/var/named";
        forwarders { 10.1.1.1; }; --这是写到options里的完全转发,指的是本机的zone文件查不到的情况,会去查找10.1.1.1,都查不到才会返回错误
};

options {
        directory "/var/named";
        forwarders { 10.1.1.127;10.1.1.199; }; --可以用分号隔开,写多个转发服务器的IP
};

 

=============================================================


实现子域  

   
    

  主域DNS服务器  子域DNS服务器
  172.16.232.1    172.16.232.137
 主机名 li.cluster.com   dns.bbs.cluster.com

  主域名 cluster.com 
  子域名 bbs.cluster.com

 

第一步:在主域服务器上对子域进行授权

# vim /var/named/chroot/etc/named.conf

options {
        directory "/var/named";
};

zone "cluster.com" IN {
        type master;
        file "data/master.cluster.com.zone";
};

 

[root@dns data]# vim /var/named/chroot/var/named/data/master.cluster.com.zone

$TTL 86400
@       IN      SOA     dns.cluster.com.        root. (
                                2011050402
                                60
                                240
                                360
                                86400 )
        IN      NS      dns.cluster.com.
bbs.cluster.com.        IN      NS      dns.bbs.cluster.com.
dns     IN      A       2.2.2.35
dns.bbs.cluster.com.    IN      A       172.16.232.137


# /etc/init.d/named restart

 

第二步:配置子域服务器

# vim /var/named/chroot/etc/named.conf

options {
        directory "/var/named";
};

zone "bbs.cluster.com" IN {
        type master;
        file "data/master.bbs.cluster.com.zone";
};


# vim /var/named/chroot/var/named/data/master.bbs.cluster.com.zone

$TTL 86400
@       IN      SOA     dns.bbs.cluster.com.    root. (
                                2011050401
                                120
                                240
                                360
                                86400 )
        IN      NS      dns.bbs.cluster.com.
www     IN      A       1.2.3.4
abc     IN      A       5.6.7.8


# /etc/init.d/named restart

 

验证,再使用一台虚拟机(172.16.232.138)做客户端进行验证


vim /etc/resolv.conf  指向主域DNS服务器172.16.232.1,可以查看主和子的所有记录


但是指向子域DNS服务器172.16.232.137时,只能查看子的记录,不能查看主的记录
  解决方法:  做转发
      做主从(137又是1的子,又是1的从)