计算机网络中,通过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 :::*
本文出自 “SystemCall社区” 博客,请务必保留此出处http://minux.blog.51cto.com/8994862/1719810
原文:http://minux.blog.51cto.com/8994862/1719810