DNS简介
DNS其实大家都不陌生,因为这个是我们访问互联网必不可少的一个东西,全称:Domain Name System。在当今计算机网络中是通过IP地址来进行主机之间互联的,但是我们知道IP地址有32位,以后还会普及IPv6,128位。对于人类来记忆实在太痛苦了。DNS的作用就是为了解决域名到IP之间的转换。这样大家就恍然大悟了吧,我们每天都在享受着DNS带来的便捷。
DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的IP地址就能通过主机名的形式访问互联网。那么你要想了,全球这么多IP地址,都在一台DNS服务器上,万一宕机了咋办?每天这么多访问量,配置得多高啊!前辈们早就想好解决方法了。DNS利用类似倒状树的目录结构将主机名的管理分配在不同层级的DNS服务器当中,经过分层管理,每一级DNS服务器负责部分域名信息,这就减轻了DNS服务器的负载。具体结构参考下图:
DNS解析过程
第一种:递归查询。递归查询一般是客户机和服务器之间的查询,即只发送一起请求,其他的工作交给上层服务器去解决,然后一层一层的反馈结果到客户端;
第二种:迭代查询。一般是DNS服务器与DNS服务器之间的方式,最初的服务器负责发起请求,一层层的找到目标服务器,在返回给客户端,这个过程叫迭代。
一次完整的查询请求经过的流程:
Client --> hosts文件 -->DNS service
Local DNS cache --> DNS server(recursion递归)-->server cache -->iteration(迭代) -->根--> 顶级域名DNS-->二级域名DNS…
DNS服务器的类型
主DNS服务器:维护所负责解析的域内解析库服务器。解析库由管理维护;
从DNS服务器:从主DNS服务器或其他的从DNS服务器那里“复制”(区域传递)一份解析库;
缓存DNS服务器:提高DNS的访问速度,实现快速解析,在安装完成DNS软件后就已经实现了简单的缓存服务器,通常在/etc/named.conf当中的forward only设定;
转发器:通过区域传送,将所需要的域名解析传送给其他DNS服务器进行解析
区域传输:
完全传输:传送整个解析库
增量传输:传递解析库变化的那部分内容
DNS监听的端口
DNS是一个网络服务,端口号是53.通常DNS在查询的时候是以udp这个快速的数据传输协议来查询的, 但是一旦没有办法查询到完整的信息时就会再次以TCP协议来进行重新查询,因此DNS服务在启动的时候会同时开启tcp的53号端口和udp的53号端口。
安装DNS服务
1、DNS服务程序包:bind,程序名:named
使用yum list all bind* 查看相关安装包:
bind:服务器;
bind-libs:于bind相关的库文件;
bind-utils:客户端相关命令文件;
bind-chroot:bind主目录禁锢程序,就是将bind程序禁锢在家目录中,centos6之后的系统已经默认在/var/named目录下了;
补充:如果你的程序是centos之前,那么还有一个软件包caching-nameserver:作用是为bind提供简单的配置文件模版,centos5之后的系统这个软件功能都被包含在bind主程序软件包当中。
*根据需求使用yum安装bind软件
2、DNS服务器配置文件
第一步:修改主配置文件:/etc/named.conf <==主配置文件一般用来定义全局配置和根zone
~]#cat /etc/named.conf options { <==在options包含的是全局配置 listen-on port 53 { any; }; <==监听的端口,即哪些主机可以进行访问解析; directory "/var/named"; <==对应数据库文件的目录位置; dump-fi le "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; <==运行哪些主机请求查询,这里修改为any运行所有; recursion yes; <==将自己视为客户端的一种查询方式; dnssec-enable no; <==测试环境建议先关闭; dnssec-validation no; };
第二步:配置/etc/named.rfc1912.zones <==主配置文件之一,一般用来存放zone,就是定义解析的域
zone "ZONE_NAME" IN { <==ZONE_NAME表示要解析的域名,正解时就是域名本身,如:jd.com;反解的时候:ip网段反写.in-addr.arpa; type {master|slave|hint|forward}; <==定义zone的类型:master主DNS服务器,slave从服务器,hint根服务器,forward转发域 file "ZONE_NAME.zone"; <==标明解析域名的数据库文件名 };
第三步:解析库文件:/var/named/ZONE_NAME.ZONE <==与zone中file相对应,文件名必须一致
区域解析库:由众多资源记录RR组成:
资源记录类型:
1、SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
格式:name [TTL] IN rr_type value
1、TTL表示该记录被其他dns服务器查询到后保留到对方服务器上的缓存当中保持多少秒,可全局继承;
2、name:当前区域的名字
3、value: 有多部分组成:
$TTL 1D @ IN SOA dns1 admin.xiaomage.com. ( <[email protected]可用于引用当前区域的名字,dns1当前区域的主DNS服务器,admin.xiaomage.com. 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换; 31 ;序列号 1D ;刷新时间 1H ;重试时间 1W ;过期时间 3H ) ;否定答案的TTL值 dns1 IN A *.*.*.* <==主机名对应主机的IP地址
2、A :internet Address,作用,FQDN --> IP
3、AAAA: FQDN --> IPv6
4、PTR: 反向解析:有特定格式,把IP地址反过来写,1.2.3.4 要写出4.3.2.1;而且有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
例如:4.3.2.1.in-addr.arpa. IN PTR www.jd.com. <==注意每个后面必须要加“.”作为结束符,不然系统会自动补上当前域名
5、NS: Name Server,专用于标明当前区域的DNS服务器,对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
例如:jd.com IN NS ns1.jd.com
6、CNAME:Canonical Name,别名记录
7、MX:Mail eXchanger,邮件交换器,对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
测试命令
1、dig 只用于测试dns系统,不会查询hosts文件进行解析
语法:dig [-t type] name [@SERVER]
例如:dig -t a www.hxsd.com @1.1.1.1
+trace:跟踪解析过程
+recurse:进行递归解析
2、host [-t type] name [SERVER]
例如:host –t NS hxsd.com 172.16.0.1
3、nslookup命令:nslookup[-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
非交互式模式:·
nslookup www.hxsd.com 172.18.0.1