目录:
一、DNS协议
二、DNS系统
三、DNS理论知识
1.DNS域名结构
(1)域名的层次结构 (2)域名的分级
2.域名服务器
3.域名解析过程
4.总结
5.正向解析与反向解析
四、DNS服务类型
五、DNS解析答案
六、DNS协议的一种开源实现bind
七、五种案例
案例一:正向解析
案例二:反向解析
案例三:完全区域传送
案例四:增量区域传送
案例五:批量解析
一、DNS协议
如果说ARP协议是用来将IP地址转换为MAC地址,那么DNS协议则是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。
我们都知道,TCP/IP中使用的是IP地址和端口号来确定网络上某一台主机上的某一个程序,不免有人有疑问,为什么不用域名来直接进行通信呢?
- 因为IP地址是固定长度的,IPv4是32位,IPv6是128位,而域名是变长的,不便于计算机处理。
- IP地址对于用户来说不方便记忆,但域名便于用户使用,例如www.baidu.com这是百度的域名。
总结一点就是IP地址是面向主机的,而域名则是面向用户的。
hosts文件
域名和IP的对应关系保存在一个叫hosts文件中。
最初,通过互联网信息中心来管理这个文件,如果有一个新的计算机想接入网络,或者某个计算IP变更都需要到信息中心申请变更hosts文件。其他计算机也需要定期更新,才能上网。
但是这样太麻烦了,就出现了DNS系统。
二、DNS系统
1…一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系
2.如果新计算机接入网络,将这个信息注册到数据库中
3.用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址我们可以通过命令查看自己的hosts文件:
在域名解析的过程中仍然会优先查找hosts文件的内容。
三、DNS理论知识
1.DNS域名结构
(1)域名的层次结构
域名系统必须要保持唯一性。
为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法:
- 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成
- 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)
- 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。
- 级别最低的域名写在左边,级别最高的域名写在右边。
域名服务主要是基于UDP实现的,服务器的端口号为53。
关于域名的层次结构,如下图所示:
eg :我们熟悉的,www.baidu.com
- com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
- baidu: 二级域名,指公司名。
- www: 只是一种习惯用法。
因特网的域名结构
由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分。
域名只是逻辑概念,并不代表计算机所在的物理地点。分为三大类:
(1)国家顶级域名:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。
(2)通用顶级域名:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
(3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。
IANA the internet Assigned Numbers Authority 互联网数字分配机构
ICANN the internet Corporation for Assigned names and Nunbers 互联网名称与数字地址分配机构
现如今全球一共投放13个根服务器
服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。 这13台根服务器可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
由于根服务器中有经美国政府批准的260个左右的互联网后缀(如.com、.net等)和一些国家的指定符(如法国的.fr、挪威的.no等),美国政府对其管理拥有很大发言权。
在与现有IPv4根服务器体系架构充分兼容基础上,由下一代互联网国家工程中心牵头发起的“雪人计划”于2016年在美国、日本、印度、俄罗斯、德国、法国等全球16个国家完成25台IPv6(互联网协议第六版)根服务器架设,事实上形成了13台原有根加25台IPv6根的新格局,为建立多边、民主、透明的国际互联网治理体系打下坚实基础。
( 2)域名的分级
域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。
如下图所示:
其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。
2.域名服务器
名是分层结构,域名服务器也是对应的层级结构。
有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。
由高向低进行层次划分,可分为以下几大类:
注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区
我们需要注意的是:
- 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器
- 每一级域名服务器都知道下级域名服务器的IP地址
- 为了容灾, 每一级至少设置两个或以上的域名服务器
3.域名解析过程
域名解析总体可分为一下过程:
(1) 输入域名后, 先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据.
(2) 如果没有, 就向上级域名服务器进行查找, 依次类推
(3) 最多回溯到根域名服务器, 肯定能找到这个域名的IP地址
(4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的IP地址缓存起来, 可以加速查找过程
具体可描述如下:
- 主机先向本地域名服务器进行递归查询
- 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
- 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址
- 本地域名服务器向顶级域名服务器进行查询
- 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址
- 本地域名服务器向权限服务器进行查询
- 权限服务器告诉本地域名服务器所查询的主机的IP地址
- 本地域名服务器最后把查询结果告诉主机
如图所示:
上文我们提出了两个概念:递归查询和迭代查询
(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
(2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。
迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。
原文链接:https://blog.csdn.net/baidu_37964071/article/details/80500825
4.总结
发展:
Hosts文件 ---------------需要不停地添加域名
1.周期性任务 ---------------在指定时间自动的去写(自动化)
2.server ---------------东西太多(性能)
3.分布式数据库 -------------全球各地分放
查找方式:
递归 ------计算机只发送一次请求
迭代 -----多次
实际解析分为两段,一段递归一段迭代
114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS
8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用
5.正向解析与反向解析
正向解析:FQDN---->Ip
Ip 域名 (一对多)
反向解析:IP----->FQDN
四、DNS服务类型
主DNS服务器:数据修改 (接受用户请求返回数据) master
辅助dns服务器: 定期请求数据同步 slave
缓存dns服务器: 只缓存dns数据 hint
转发器:缓存服务器去掉缓存功能 forward
五、DNS解析答案
当DNS客户端向DNS服务器发出解析请求时,不管是否能够查询到想要的结果,都会返回一个解析答案。根据是否能够查询到想要的结果,可分为肯定答案和否定答案;根据解析答案是否由直接负责的DNS服务器返回,可分为权威答案和非权威答案。
根据是否能够查询到想要的结果:
①肯定答案:存在查询的键(key),并且存在与其查询键对应的值(value)。
②否定答案:不存在查询的键(key),因此,自然不存在与其查询键(value)对应的值。
根据解析答案是否由直接负责的DNS服务器返回:
①权威答案:由直接负责的DNS服务器返回的答案。
②非权威答案:不是由直接负责的DNS服务器返回的答案。这种情况下一般是由其他DNS服务器直接返回缓存的解析结果。
六、DNS协议的一种开源实现bind
提供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这款软件之前,务必掌握以下基本概念:
bind相关的程序包
bind不仅提供了主包,还提供了各种bind的支包,它们用于实现不同的功能。而在众多bind支包中,最常用到的有:bind-utils, bind-libs, bind-chroot等。
bind相关的程序包如下:
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服务器可同时为多个区域提供解析。
(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
区域类型:
主区域:主DNS,master
从区域:从DNS,slave
缓存区域:hint,在找不到相关信息的时候去从根查找,标识根的地址
转发区域:forward,转发到指定区域,而不是指向根
Haha.com
资源记录名称:(数据库中的每一个条目)baidu.com
SOA(起始授权记录) 记录提供有关dns区域工作方式的信息 -----具体负责哪个区域的解析
这代表着master/salve相关的认证,授权资料。不论有没有设定master/salve的架构都需要设定好。
NS 将自己的域名映射到DNS 将域名最终映射到哪一台主机(由哪一台主机去解析当前所定义的域主机)
A (ipv4地址记录) 资源记录将主机名映射到ipv4地址。
CNAME (规范名称)记录域别名
132 主机名
MX 邮件交换记录
PTR指针记录 将IPV4 IPV6地址映射到主机名 (用于反向DNS)
AAAA (IPV6 地址记录) 资源记录(四A记录)将主机名映射到ipv6地址。
资源记录包含的元素:
owner-name TTL class type date
主机名 资源记录生存时间 INTERNET A 记录存储数据(主机ip)
TTL值
(当外部DNS服务器对你的DNS这个域进行查询时,这个记录会放置在对方的DNS服务器几秒钟)
五种定义的信息
serial number: 序列号 定义当前使用的数据序列号 sn遵循“年+月+日+编号” ·
主和从的更新依据
refresh: 定义检查间隔时间 (上次和这次变化的时间)
retry: 重试时间 < 检查时间>
expire: 过期时间 缓存放多久过期
negative answer ttl: 否定答案的缓存时长 (没有指定生存期的数据可以保存在数据中的时间及TTL值)
时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
配置文件详解:
dns的主配置文件,作为dns的设定档,将我自己的设定档案列出来然后逐部分进行解释。
注意格式:"//" “/* */” ";"结尾
该文件属主root,named用户组
###################################3
#全局选项
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;
};
查看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 //关键就是这一条记录。
查看named.loopback文件:
[root@www ~]# cat /var/named/named.loopback
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
PTR localhost. //关键就是这一条记录。
七、五种案例
案例一:正向解析
主配置文件 /etc/named.conf
TTL(time to live)生存时间dns记录在dns服务器上的缓存时长。
@域名 IN INTERNET输入标准 起始授权记录 服务器所对应的主域名服务器 管理员邮件以.代替常见的类型的@
如何查看是否解析成功:
Dig -t
#查询NS记录
dig -t NS baidu.com
dig +trace -t A www.linux7.com
#使用nslookup,windows操作系统也可以使用
nslookup;交互式
Nslookup -type=A www.baidu.com
[root@localhost ~]# nslookup -type=A www.baidu.com
案例二:反向解析
测试:
重启服务正常
区域传送
将一个区域文件复制到多个服务器上的过程叫做区域传送。将主服务器上的信息复制到辅助服务器上来实现。
两种区文件复制方式:
完全区域传送:axfr,all transfer,全部区域文件复制,复制整个区域文件
增量区域传送:ixfr,incremental transfer,仅复制区域里变化的文件
#定义全局,在options选项内定义
allow-transfer { 192.168.75.130; };
IXFR: 增量区域传送
查询上次序列号改变后的信息
dig -t ixfr=1 baidu.com @192.168.75.129
案例三:完全区域传送
在服务器端的主配置文件定义完全区域传送
在另一台虚拟机作为从服务器安装bind软件包:
配置主配置文件/etc/named.conf
#ll /var/named/slaves
[root@localhost slaves]# ll
-rw-r–r--. 1 named named 274 1月 16 22:30 named.192.168.221
-rw-r–r--. 1 named named 336 1月 16 22:30 named.linux7.com
重启服务会动态同步主服务其中的区域数据文件。
案例四:增量区域传送
1.修改主服务器的区域配置文件/var/named/named.baidu.com
2.重启主&从服务器的服务
[root@localhost ~]# systemctl restart named
3.查看结果
通过tail -f /var/log/message来查看从服务器的日志,注意传送过程
[root@localhost ~]# tail -f /var/log/messages
Jan 23 16:29:50 localhost named[73533]: reloading configuration succeeded
Jan 23 16:29:50 localhost named[73533]: reloading zones succeeded
Jan 23 16:29:50 localhost named[73533]: zone baidu.com/IN: refresh: failure trying master 192.168.18.132#53 (source 0.0.0.0#0): operation canceled
Jan 23 16:29:50 localhost named[73533]: zone baidu.com/IN: loaded serial 2018012313
Jan 23 16:29:50 localhost named[73533]: zone baidu.com/IN: expired
Jan 23 16:29:50 localhost named[73533]: all zones loaded
Jan 23 16:29:50 localhost named[73533]: running
Jan 23 16:29:50 localhost systemd: Reloaded Berkeley Internet Name Domain (DNS).
Jan 23 16:30:01 localhost systemd: Started Session 48 of user root.
Jan 23 16:30:01 localhost systemd: Starting Session 48 of user root.
案例五:批量解析
批量解析(主服务器:vim /var/named/named.baidu.com)
$GENERATE 1-10
.
l
i
n
u
x
7.
c
o
m
.
I
N
A
192.168.221.
.linux7.com. IN A 192.168.221.
.linux7.com.INA192.168.221.
在从服务器上: ping 1.baidu.com
反向格式
$GENERATE 1-10 $ IN PTR $.linux7.com.