DNS简介数据库
DNS其实你们都不陌生,由于这个是咱们访问互联网必不可少的一个东西,全称:Domain Name System。在当今计算机网络中是经过IP地址来进行主机之间互联的,可是咱们知道IP地址有32位,之后还会普及IPv6,128位。对于人类来记忆实在太痛苦了。DNS的做用就是为了解决域名到IP之间的转换。这样你们就恍然大悟了吧,咱们天天都在享受着DNS带来的便捷。centos
DNS是一个分布式、分层次的主机名管理架构,经过配置DNS服务器地址,主机不须要知道对应的IP地址就能经过主机名的形式访问互联网。那么你要想了,全球这么多IP地址,都在一台DNS服务器上,万一宕机了咋办?天天这么多访问量,配置得多高啊!前辈们早就想好解决方法了。DNS利用相似倒状树的目录结构将主机名的管理分配在不一样层级的DNS服务器当中,通过分层管理,每一级DNS服务器负责部分域名信息,这就减轻了DNS服务器的负载。具体结构参考下图:缓存
DNS解析过程bash
第一种:递归查询。递归查询通常是客户机和服务器之间的查询,即只发送一块儿请求,其余的工做交给上层服务器去解决,而后一层一层的反馈结果到客户端;
服务器
第二种:迭代查询。通常是DNS服务器与DNS服务器之间的方式,最初的服务器负责发起请求,一层层的找到目标服务器,在返回给客户端,这个过程叫迭代。网络
一次完整的查询请求通过的流程:架构
Client --> hosts文件 -->DNS service tcp
Local DNS cache --> DNS server(recursion递归)-->server cache -->iteration(迭代) -->根--> 顶级域名DNS-->二级域名DNS…分布式
DNS服务器的类型 ide
主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服务
一、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软件
二、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组成:
资源记录类型:
一、SOA:Start Of Authority,起始受权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
格式:name [TTL] IN rr_type value
一、TTL表示该记录被其余dns服务器查询到后保留到对方服务器上的缓存当中保持多少秒,可全局继承;
二、name:当前区域的名字
三、value: 有多部分组成:
$TTL 1D @ IN SOA dns1 admin.xiaomage.com. ( <==@可用于引用当前区域的名字,dns1当前区域的主DNS服务器,admin.xiaomage.com. 当前区域管理员的邮箱地址;但地址中不能使用@符号,通常用.替换; 31 ;序列号 1D ;刷新时间 1H ;重试时间 1W ;过时时间 3H ) ;否认答案的TTL值 dns1 IN A *.*.*.* <==主机名对应主机的IP地址
二、A :internet Address,做用,FQDN --> IP
三、AAAA: FQDN --> IPv6
四、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. <==注意每一个后面必需要加“.”做为结束符,否则系统会自动补上当前域名
五、NS: Name Server,专用于标明当前区域的DNS服务器,对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
例如:jd.com IN NS ns1.jd.com
六、CNAME:Canonical Name,别名记录
七、MX:Mail eXchanger,邮件交换器,对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
测试命令
一、dig 只用于测试dns系统,不会查询hosts文件进行解析
语法:dig [-t type] name [@SERVER]
例如:dig -t a www.hxsd.com @1.1.1.1
+trace:跟踪解析过程
+recurse:进行递归解析
二、host [-t type] name [SERVER]
例如:host –t NS hxsd.com 172.16.0.1
三、nslookup命令:nslookup[-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪一个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
非交互式模式:·
nslookup www.hxsd.com 172.18.0.1