概念
域名系统DNS(Domain Name System)是因特网使用的命名系统,域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分。DNS作用很简单,就是对ip通过域名进行访问
因特网的域名结构
域名只是逻辑概念,并不代表计算机所在的物理地点。分为三大类:
- 国家顶级域名
- 通用顶级域名
- 基础结构域名——arpa用于反向域名解析
因特网在命名时采用层次树状结构命名
服务器主要用来管理互联网的主目录,全世界只有13台,这13台根服务器可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
根服务器的作用:负责全球互联网域名的体系和Ip地址的管理,根域记录所有顶级(一级)域名服务器的信息。
DNS的发展
1、hosts文件——需要不停的添加域名(手工添加)
2、周期性任务——在指定时间自动去写(自动添加)
3、server——东西太多(性能hold不住)
4、分布式数据库——全球各地分放
域名解析的方式
DNS服务器解析域名的两种方式:
递归——计算机只发起一次请求
迭代——计算机发起多次请求
DNS域名解析的过程
解析方式:客户端发出的查询都是递归查询,DNS服务器向外发出的一般都是迭代查询
- 在浏览器中输入www. google .com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
- 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
- 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服 务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。
本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理google .com的DNS服务器地址给本地DNS服务器。
当本地DNS服务器收到这个地址后,就会找google.com域服务器,重复上面的动作,进行查询,直至找到www. google.com主机。 - 如果用的是转发模式,本地DNS服务 器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后把结果返回给本地DNS服务器,由此DNS服务器再
返回给客户机。
过程比较繁琐,但逻辑性强,容易理解,DNS解析过程也是HR经常会问到的问题!
上文提到的权威和非权威是根据解析答案是否由直接负责的DNS服务器返回:
①权威答案:由直接负责的DNS服务器返回的答案。
②非权威答案:不是由直接负责的DNS服务器返回的答案。这种情况下一般是由其他DNS服务器直接返回缓存的解析结果。
DNS 服务器类型
主DNS服务器:数据修改 (接受用户请求返回数据) master
辅助dns服务器: 定期请求数据同步 slave
缓存dns服务器: 只缓存dns数据 hint
转发器:缓存服务器去掉缓存功能 forward
bind
DNS协议的一种开源实现——bind,当今互联网上的通信几乎都必须借助于DNS服务器来解析主机名,得到通信对方的IP地址,而在DNS服务器上最常用的软件就是bind,提供dns服务的套件叫bind但执行服务名称的是named。
bind相关的程序包:
1 bind:提供dns server程序,以及几个常用的测试工具。
2 bind-utils:bind客户端程序集,例如提供dig, nslookup等工具。
3 bind-libs:提供bind和bind-utils包中的程序共同用到的库文件。
4 bind-chroot:选装,让bind程序(named进程)运行于jail进程之下。
yum install bind -y 安装bind软件
rpm -ql bind 查看bind的相关配置文件
/etc/named.conf 主配置文件
/etc/rndc.conf: 相关配置文件
/var/named/zidingyi.zone 区域数据文件,需要手动创建
/usr/sbin/named-checkconf 配置检查脚本工具
/usr/sbin/named-checkzone 区域配置检查工具
/var/named/named.ca 全球十三个根服务器的相关信息
注意:
1)一台DNS服务器可同时为多个区域提供解析。
2)DNS服务器必须要有根区域解析库文件:named.ca.
3)DNS服务器还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库,这两个文件分别如下:
①正向解析库文件:/var/named/named.localhost
②反向解析库文件:/var/named/named.loopback
4)DNS在53端口上监听请求并提供响应的服务。出于性能的考虑,DNS查询请求用UDP协议交互并且每个请求的大小小于512字节,但是如果返回的请求大小大于512字节,交互双方会协商使用TCP协议。
配置文件详解
查看主配置文件/var/named.conf
[root@www ~]# vim /var/named.conf
options {
#定义监听端口,如果所有地址都监听,则只写端口
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
#定义数据文件目录
directory "/var/named";
dump-file "/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 { localhost; }; #只允许本地主机进行查询
recursion yes; #允许递归
#allow-recursion { 192.168.0.0/16; } ;指定可以递归的范围
logging { //指定日志记录分类和他们的目标位置
};
Zone{ 定义区域,一个zone定义一个区域
type hint;
};
type区域类型,有以下下几种:
- 主区域:主DNS,master
- 从区域:从DNS,slave
- 缓存区域:hint,在找不到相关信息的时候去从根查找,标识根的地址
- 转发区域:forward,转发到指定区域,而不是指向根
查看named.localhost文件
[root@www ~]# cat /var/named/named.localhost
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial 序列号
1D ; refresh 检查时间
1H ; retry 重试时间
1W ; expire 缓存时长
3H ) ; minimum 过期时间
NS @
@ A 127.0.0.1 关键就是这一条记录
每一条资源记录默认向上一条资源记录去匹配参数
解释:
资源记录包含的元素:
owner-name TTL class type date
主机名 资源记录生存时间 INTERNET A 记录存储数据(主机ip)
TTL值:当外部DNS服务器对你的DNS这个域进行查询时,这个记录会放置在对方的DNS服务器几秒钟
@:对SOA所解析的区域可以用@符号来代替
类型:
- SOA(起始授权记录) 记录提供有关dns区域工作方式的信息——具体负责哪个区域的解析
- NS 将自己的域名映射到DNS 将域名最终映射到哪一台主机(标记 dns服务器)
- A (ipv4地址记录) 资源记录将主机名映射到ipv4地址。
- CNAME (规范名称)记录域别名
- MX 邮件交换记录
- PTR指针记录 将IPV4 IPV6地址映射到主机名 (用于反向DNS)
- AAAA (IPV6 地址记录) 将主机名映射到ipv6地址。
五种定义的信息
serial number: 序列号 定义当前使用的数据序列号,遵循“年+月+日+编号” ·,主和从的更新依据
refresh: 定义检查间隔时间 (上次和这次变化的时间)
retry: 重试时间 < 检查时间>
expire: 过期时间 缓存放多久过期
negative answer ttl: 否定答案的缓存时长 (没有指定生存期的数据可以保存在数据中的时间及TTL值)
时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒