计算机网络中,通过IP地址标识一台主机,当两台主机通信的时候,就需要通过IP地址来建立联系。所以早期访问一个WEB服务器,就得要输入ip地址来访问他。不过后来网络上的网站越来越多,假如在我们百度的时候,都必须要输入202.103.226.126这么一大串数字,光记忆就很难了,而且有可能还会更换IP,太不方便了。于是乎,就有人设计出了一个可以将IP地址转换成主机名(字符串)的东西,这就是DNS。DNS全称为Domain Name System(域名系统)。负责将主机名转换为IP地址(或者反之:将IP转换为主机名)。


  在DNS中有一个数据库,里面记录着各种主机名和IP的对应关系。当你访问一个主机名的时候,就先向DNS发起解析请求(对用户而言是透明的),DNS将结果返回给浏览器,浏览器使用返回的IP来访问这个网站。

  假如我们访问www.baidu.com. 客户端的解析大概是这样的:

 客户端将请求发给其上级DNS服务器A,并且跟A说"你告诉我www.baidu.com.的IP是什么"。上级DNS服务器A一般是一个运营商缓存的服务器,它里面并没有主机的记录,他一看自己不知道,于是乎就去找根,根看了www.baidu.com.后,他回复A"我不知道www.baidu.com.的IP地址,  .com这个域被我委托给x.x.x.x管理了,你去问问它吧!"。A得到了.com的IP地址后,就去问.com说,"www.baidu.com.的IP是多少啊?",.com说"我不知道www.baidu.com.的IP,但是baidu.com.这个域我已经委托给x.x.x.x这个主机管理了,你去问它吧!",A得到了baidu.com.这个域的地址,就去问baidu.com.说"你知道www.baidu.com的IP是多少吗?",baidu.com.说"我知道www.baidu.com.的IP地址,他的IP地址是x.x.x.x。"于是乎,A拿着结果告诉了客户端,客户端就访问去了。

  从上面的过程我们可以发现一个问题,A向DNS发起了一次请求就拿到了结果,而他上级的DNS则经历了很多过程。A向DNS这个过程我们称作递归,而上级DNS到主机的具体解析我们称作迭代。递归我们可以理解为:我问A 1+1等于几?你只需要告诉我结果(你知道或者不知道)就好了,其他的我不管。而迭代可以理解为:A不知道1+1等于几,A去问B,而B说我也不知道,但是C可能知道,你去问C,然后A又去问C,直到得到最终结果。


DNS的资源记录有很多种,常用的有(转自:http://bbs.51cto.com/thread-909189-1.html):

1,A记录
A记录也称为主机记录,是使用最广泛的DNS记录,A记录的基本作用就是说明一个域名对应的IP是多少,   它是域名和IP地址的对应关系,表现形式为     www.contoso.com   192.168.1.1  这就是一个A记录!A记录除了进行域名IP对应以外,还有一个高级用法,可以作为低成本的负载均衡的解决方案,比如说,www.contoso.com  可以创建多个A记录,对应多台物理服务器的IP地址,可以实现基本的流量均衡!

2,NS记录
  NS记录和SOA记录是任何一个DNS区域都不可或缺的两条记录,NS记录也叫名称服务器记录,用于说明这个区域有哪些DNS服务器负责解析,SOA记录说明负责解析的DNS服务器中哪一个是主服务器。因此,任何一个DNS区域都不可能缺少这两条记录。NS记录,说明了在这个区域里,有多少个服务器来承担解析的任务,
3,SOA记录
  NS记录说明了有多台服务器在进行解析,但哪一个才是主服务器呢,NS并没有说明,这个就要看SOA记录了,SOA名叫起始授权机构记录,SOA记录说明了在众多NS记录里那一台才是主要的服务器!
4,MX记录
  全称是邮件交换记录,在使用邮件服务器的时候,MX记录是无可或缺的,比如A用户向B用户发送一封邮件,那么他需要向DNS查询B的MX记录,DNS在定位到了B的MX记录后反馈给A用户,然后A用户把邮件投递到B用户的MX记录服务器里!
5,Cname记录
  又叫别名记录,我们可以这么理解,我们小的时候都会有一个小名,长大了都是学名,那么正规来说学名的符合公安系统的,那个小名只是我们的一个代名词而已,这也存在一个好处,就是比暴漏自己,比如一个网站a.com 在发布的时候,他可以建立一个别名记录,把B.com发不出去,这样不容易被外在用户所察觉!达到隐藏自己的目的!
6,SRV记录
  SRV记录是服务器资源记录的缩写,SRV记录是DNS记录中的新鲜面孔,在RFC2052中才对SRV记录进行了定义,因此很多老版本的DNS服务器并不支持SRV记录。那么SRV记录有什么用呢?SRV记录的作用是说明一个服务器能够提供什么样的服务!SRV记录在微软的Active Directory中有着重要地位,大家知道在NT4时代域和DNS并没有太多关系。但从Win2000开始,域就离不开DNS的帮助了,为什么呢?因为域内的计算机要依赖DNS的SRV记录来定位域控制器!表现形式为:
—ldap._tcp.contoso.com 600 IN SRV 0 100 389 NS.contoso.com
ladp: 是一个服务,该标识说明把这台服务器当做响应LDAP请求的服务器
tcp:本服务使用的协议,可以是tcp,也可以是用户数据包协议《udp》
contoso.com:此记录所值的域名
600: 此记录默认生存时间(秒)
IN: 标准DNS Internet类
SRV:将这条记录标识为SRV记录
0: 优先级,如果相同的服务有多条SRV记录,用户会尝试先连接优先级最低的记录
100:负载平衡机制,多条SRV并且优先级也相同,那么用户会先尝试连接权重高的记录
389:此服务使用的端口
NS.contoso.com:提供此服务的主机
7,PTR记录
PTR记录也被称为指针记录,PTR记录是A记录的逆向记录,作用是把IP地址解析为域名。由于我们在前面提到过,DNS的反向区域负责从IP到域名的解析,因此如果要创建PTR记录,必须在反向区域中创建。

-------------------------------------------------------------------------------------------------------------------------

配置DNS:

1.安装BIND软件:

[root@localhost ~]# yum install -y bind

2.BIND的服务名叫named,相关的主要文件有以下几个:

/etc/named/           #DNS主目录

/etc/named.conf        #DNS配置文件

/etc/rc.d/init.d/named   #DNS启动脚本

/etc/sysconfig/named    #DNS脚本的配置文件

/var/named/          #区域配置文件目录

3.配置文件格式说明

配置文件分为三段:

      options:全局段,用来定义全局参数

      logging:日志段,定义一些日志参数

      zone:区域段,定义具体的域

4.定义配置文件(这里是一个精简版的,默认的示例文件有很多多余参数,这里只给大家展示可能用到的):

options {

        listen-on port 53 { any; };  #监听本机所有启用的IP地址的53号端口,UDP和TCP

        listen-on-v6 port 53 { ::1; }; #IPV6监听

        directory       "/var/named";  #区域文件目录

        allow-query     { any; };  #允许所有(any)客户机像本服务器查询

        recursion yes;  #允许递归

        allow-recursion { any; }; #允许所有主机递归

};


logging {

        channel default_debug {

                file "data/named.run";  

                severity dynamic;

        };

};


zone "." IN {   #定义根区域

        type hint; #区域类型为根(hint);  区域类型{hint|master|slave|forward}  

        file "named.ca"; 区域文件为named.ca

};


zone "localhost" IN {

        type master;

        file "named.localhost";

};


zone "1.0.0.127.in-addr.apra" IN {

        type master;

        file "named.loopback";

};


zone "test.com" IN {

        type master;

        file "test.com.zone";

};

5.配置区域数据文件(只配置test.com这个域的配置文件,其他文件都已经存在了):

[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@localhost named]# vim test.com.zone
$TTL 86400
$ORIGIN test.com.
@       IN      SOA     ns.test.com.    admin.test.com. (
                        2015120201
                        2H
                        20M
                        3D
                        1D)
        IN      NS      ns
        IN      MX  10  mail
ns      IN      A       172.16.100.1
mail    IN      A       172.16.100.2
www     IN      A       172.16.100.3
web     IN      CNAME   www
pop     IN      CNAME   mail
*       IN      A       172.16.100.1


启动DNS测试:

[root@localhost named]# service named start
Starting named:                                            [  OK  ]
[root@localhost named]# ss -tunl
Netid  State      Recv-Q Send-Q                     Local Address:Port                       Peer Address:Port 
udp    UNCONN     0      0                              127.0.0.1:53                                    *:*     
udp    UNCONN     0      0                                      *:67                                    *:*     
udp    UNCONN     0      0                                      *:68                                    *:*     
udp    UNCONN     0      0                                      *:631                                   *:*     
udp    UNCONN     0      0                                    ::1:53                                   :::*     
tcp    LISTEN     0      3                                    ::1:53                                   :::*     
tcp    LISTEN     0      3                              127.0.0.1:53                                    *:*     
tcp    LISTEN     0      128                                   :::22                                   :::*     
tcp    LISTEN     0      128                                    *:22                                    *:*     
tcp    LISTEN     0      128                            127.0.0.1:631                                   *:*     
tcp    LISTEN     0      128                                  ::1:631                                  :::*     
tcp    LISTEN     0      128                                  ::1:953                                  :::*     
tcp    LISTEN     0      128                            127.0.0.1:953                                   *:*     
tcp    LISTEN     0      100                                  ::1:25                                   :::*     
tcp    LISTEN     0      100                            127.0.0.1:25                                    *:*     
tcp    LISTEN     0      128                            127.0.0.1:6010                                  *:*     
tcp    LISTEN     0      128                                  ::1:6010                                 :::*     
tcp    LISTEN     0      128                            127.0.0.1:6011                                  *:*     
tcp    LISTEN     0      128                                  ::1:6011                                 :::*