简介
域名系统DNS (Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。 1、因特网的域名结构 由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分。 域名只是逻辑概念,并不代表计算机所在的物理地点。分为三大类: (1)国家顶级域名采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等 。国家域名又常记为ccTLD(cc表示国家代码contry-code) (2)通用顶级域名最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。 (3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析 ,因此称为反向域名。
现如今全球一共投放13个根服务器 服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。 所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。 这13台根服务器可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
2 DNS域名解析的过程 客户端发出的查询都是递归查询,DNS服务器向外发出的查询一般都是迭代查询 查找方式: 递归 ------计算机只发送一次请求 迭代 -----多次 实际解析分为两段,一段递归一段迭代 1.在浏览器中输入www.qq .com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。 2.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。 3.本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性 。 4.如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性 。 5.如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP 。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器 。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理qq.com的DNS服务器地址给本地DNS服务器 。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www . qq .com主机。 6.如果用的是转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS
8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用
正向解析:FQDN --------> IP
域名 -----> IP
反向解析:IP --------------> FQDN
IP -----> 域名
(一个ip可以有多个域名)
DNS 服务类型:
主DNS服务器:数据修改(接受用户请求返回数据) master
辅助dns服务器:定期请求数据同步 slave
缓存dns服务器: 只缓存dns数据 hint
转发服务器:缓存服务器去掉缓存功能 forward
DNS解析答案 当DNS客户端向DNS服务器发出解析请求时,不管是否能够查询到想要的结果,都会返回一个解析答案。根据是否能够查询到想要的结果,可分为肯定答案和否定答案;根据解析答案是否由直接负责的DNS服务器返回,可分为权威答案和非权威答案。 根据是否能够查询到想要的结果: ①肯定答案:存在查询的键(key),并且存在与其查询键对应的值(value)。 ②否定答案:不存在查询的键(key),因此,自然不存在与其查询键(value)对应的值。 根据解析答案是否由直接负责的DNS服务器返回: ①权威答案:由直接负责的DNS服务器返回的答案。 ②非权威答案:不是由直接负责的DNS服务器返回的答案。这种情况下一般是由其他DNS服务器直接返回缓存的解析结果。 DNS协议的一种开源实现----bind 端口为:53 提供dns服务的套件叫bind但执行服务名称的是named 我们说DNS是一种协议,而对于每一种协议的实现都需要程序员开发出遵循这种协议规范的软件程序来实现,这里要介绍的BIND就是DNS协议的一种开源实现。据统计,使用bind作为DNS服务器软件的DNS服务器大约占所有DNS服务器的九成。BIND全称为Berkeley Internet Name Domain,因为当今互联网上的通信几乎都必须借助于DNS服务器来解析主机名,得到通信对方的IP地址,而在DNS服务器上最常用的软件就是bind,所以,bind这款软件几乎可以说是当今互联网上常用的软件了。目前bind由ISC.org(Internet Systems Consortium,互联网系统协会)负责开发与维护。 学习bind这款软件之前,务必掌握以下基本概念: 1、dns:协议 53 tcp udp 正向解析 ------- 域名–ip 2、 bind:dns协议的一种开源实现 3、 named:bind程序运行起来后的进程名 4、 bind相关的程序包 bind不仅提供了主包,还提供了各种bind的支包,它们用于实现不同的功能。而在众多bind支包中,最常用到的有:bind-utils, bind-libs, bind-chroot等。 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 //安装资源包 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 区域文件dns数据库 解析库文件:存放于/var/named/目录下,一般名字为ZONE_NAME.zone
要点: (1)一台DNS服务器可同时为多个区域提供解析。dns (2)DNS服务器必须要有根区域解析库文件:named.ca. (3)DNS服务器还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库,这两个文件分别如下: ①正向解析库文件:/var/named/named.localhost ②反向解析库文件:/var/named/named.loopback rndc的全称是Remote Name Domain Controller,它可以帮助用户更方便地管理DNS服务器,包括可以检查DNS服务器的状态与统计信息、重载配置文件及zone或单独重载某个区域而不需要重新启动整个DNS服务,还有查看已存在DNS缓存当中的资料等。 DNS在53端口上监听请求并提供响应的服务。出于性能的考虑,DNS查询请求用UDP协议交互并且每个请求的大小小于512字节,但是如果返回的请求大小大于512字节,交互双方会协商使用TCP协议。 rndc服务默认监听在tcp的953端口,且默认监听于127.0.0.1地址,因此默认仅允许本地使用。 rndc的常见用法: rndc reload:在不重新启动DNS服务的情况下,重新加载配置文件及zone. rndc reload zone:重新加载指定的zone. rndc status:查看当前DNS服务器的状态。 rndc stats:将当前系统的DNS统计数据记录下来,默认会将数据存储为一个文件:/var/named/data/named_stats.txt. rndc dumpdb:将当前DNS高速缓存中的数据记录下来,与stats类似,默认会将数据存储为一个文件:/var/named/data/cache_dump.db rndc flush:清空当前DNS服务器上的所有缓存。 Usage: rndc [-b address] [-c config] [-s server] [-p port] [-k key-file ] [-y key] [-V] command
资源记录名称:(数据库中的每一个条目) SOA(起始授权记录) 记录提供有关dns区域工作方式的信息 -----具体负责哪个区域的解析 (指定权威服务器)这代表着master/salve相关的认证,授权资料。不论有没有设定master/salve的架构都需要设定好。 NS 标记dns服务器 将域名最终映射到哪一台主机(标记本地 dns服务器) A (ipv4地址记录) 资源记录将主机名映射到ipv4地址。 CNAME (规范名称)记录域别名 MX 邮件交换记录 —标记邮件服务主机名 PTR 指针记录 将IPV4 IPV6地址映射到主机名 (用于反向DNS) AAAA (IPV6 地址记录) 资源记录(四A记录)将主机名映射到ipv6地址。 /var/named/named.ca (数据文件----资源记录文件) TTL值 (当外部DNS服务器对你的DNS这个域进行查询时,这个记录会放置在对方的DNS服务器几秒钟) 五种定义的信息 serial number: 序列号 定义当前使用的数据序列号 sn遵循“年+月+日+编号” ·主和从的更新依据 refresh: 定义检查间隔时间 (上次和这次变化的时间) retry: 重试时间 < 检查时间> expire: 过期时间 (什么时候通过从服务器解析) negative answer ttl: 否定答案的缓存时长 (没有指定生存期的数据可以保存在数据中的时间及TTL值) 时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
实现正向解析: 资源记录包含的元素:
owner-name TTL class type date
主机名 资源记录生存时间 INTERNET A 记录存储数据(主机ip)
首先安装bind包 [root@localhost ~]# yum install bind -y 准备工作 [root@localhost ~]# systemctl stop firewalld //关闭防火墙 [root@localhost ~]# setenforce 0 //关闭seLinux [root@localhost ~]# systemctl restart named.service //开启服务 编辑配置文件 [root@localhost ~]# vim /etc/named.conf 重启服务 [root@localhost named]# systemctl restart named (如果报错请检查配置信息) 在客户端进行测试(必须保证两台主机在同一个网络模式) [root@localhost ~]# nmcli device show //查看当前主机的ip参数 [root@localhost ~]# cat /etc/resolv.conf 更改dns(不是永久生效) [root@localhost ~]# vim /etc/resolv.conf 实现反向解析: 更改配置文件 [root@localhost ~]# cat /etc/named.rfc1912.zones 复制下面的配置文件写好的配置信息我们做更改 把复制的东西粘贴到下面的配置文件,然后在做一些更改 复制[root@localhost named]# vim /var/named/named.loopback 里面的配置文件 把刚刚粘贴的配置信息复制到这个文件下[root@localhost named]# vim /var/named/named.192.168.229 重启服务 [root@localhost named]# systemctl restart named 在客户端测试 实现从服务器: 当我们的主服务挂了之后我们就可以激活我们的从服务器工作 区域传送 将一个区域文件复制到多个服务器上的过程叫做区域传送。将主服务器上的信息复制到辅助服务器上来实现。 两种区文件复制方式: 完全区域传送:axfr,all transfer,全部区域文件复制,复制整个区域文件 增量区域传送:ixfr,incremental transfer,仅复制区域里变化的文件 实现完全区域传送: 安装bind的包 [root@localhost ~]# yum install bind -y 关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 编辑配置文件 因为从服务器实现的是同步所以在主服务器里面还要添加一条信息 [root@localhost named]# vim /etc/named.conf [root@localhost named]# systemctl restart named //配置完重启一下服务 在从服务器上检测 [root@localhost ~]# cd /var/named/slaves/ //进入这个目录 [root@localhost slaves]# watch ls 检测ls的执行结果每两秒1次 在开一个从服务器重启服务 [root@localhost slaves]# systemctl restart named 使用nslookup测试我们的从服务器 实现增量区域传送: 当你主服务器当中的资源发生了更新,主要是判断版本号 更改主服务器的配置文件 [root@localhost named]# vim /var/named/named.openlab.com 配置完成后重启服务 [root@localhost named]# systemctl restart named 在从服务器上测试 [root@localhost slaves]# tail -f /var/log/messages 查看日志信息 [root@localhost slaves]# tail -f /var/log/messages 实现转发服务器: 在开一台服务器来实现 安装bind服务 [root@localhost ~]# yum install bind -y 更改配置信息 [root@localhost ~]# vim /etc/named.conf 重启服务,关闭防火墙关闭selinux [root@localhost ~]# systemctl restart named [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 测试 我们没有在转发服务器上做任何配置,是转发到主服务器上做的查询结果
|