1.DNS的概念
DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网
基于C/S架构,服务器端:53/udp, 53/tcp实际上,每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域 名和 IP 地址的对应关系
这些特定的 DNS 域或 IP 地址段称为 zone(区域)。
根据地址解 析的方向不同
DNS 区域相应地分为正向区域(包含域名到 IP 地址的解析记录)和反向区 域(包含 IP 地址到域名的解析记录)
2.DNS的架构
从上到下:
根域:一般用.表示,可省略不写
一级(顶级)DNS服务器:专门负责一级域名的解析(一般代表一种类型的组织机构或国家地区)
二级DNS服务器:专门负责二级域名的解析
子域名(三级域名)DNS服务器:专门负责子域名的解析
主机名 位于DNS域命名空间的最低层,主要指计算机的主机名
根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
- 一级域名:Top Level Domain: tld
- 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
- com, edu, mil, gov, net, org, int,arpa
- 二级域名:magedu.com
- 三级域名:study.magedu.com
- 最多可达到127级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理
根域名服务器一旦有任何异常对整个互联网影响都非常大。目前全球有了许多的根域名服务器镜像服务器,这点增加了容错率
2.1 域名的架构
域名采用层次结构表示,从右向左依次表示更高的级别。
以 www.example.com 为例
.com 是一级域名
example 是二级域名
www 是主机名
#主机名用于标识特定的设备或计算机,而子域名用于对主域名下的特定部分进行分类或组织
2.2 域名解析的类型
- A记录:将域名解析为IPv4地址。
- AAAA记录:将域名解析为IPv6地址。
- CNAME记录:将域名解析为另一个域名,可用于创建别名。
- MX记录:指定接收某域名邮件的邮件服务器地址。
- NS记录:指定管理域名解析的权威域名服务器。
- PTR记录:用于反向解析,将IP地址解析为域名
3.为什么要是用DNS
当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。
当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。
为了解决这一问题,我们启用了DNS服务
通过每个网络设备起一个好记的名称,如:www.baidu.com,这种由文字组成的名称(域名),显而易见要更容易记忆。
虽然计算机不理解这种名称的,但我们可以利用一种名字解析服务(DNS)将名称转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。
另外,使用DNS解析这种方式访问一个网络中的设备,由于不需要记IP地址,即使当用户要访问的主机IP变化时,只需要主机方面修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响
4.DNS服务器的类型
缓存域名服务器:
只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,
但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定
其他 DNS 服务器作为解析来源。
主域名服务器:
管理和维护所负责解析的域内解析库的服务器
从域名服务器:
从主服务器或从服务器"复制"(区域传输)解析库副本
5.查询方式
迭代查询:
当客户机输入域名时,会访问根域,而根域无法解析会向下级域名服务器询问是否可以解析,知道找到能够解析这个域名的权威服务器
递归查询:
当找到权威服务器时,会在服务器中递归查找权威结果并反馈
6.查询原理
正向解析过程:
1.当用户访问一个域名时,先查看本地的host文件,如果有相关记录,直接访问,如果没有,去访问DNS缓存服务器
2.如果DNS缓存服务器中有,直接访问,如果没有,访问根域服务器
3.根域服务器管理主机域,接着去找下级域名的服务器,根据线索找到相应的服务器,以此类推,直到找到和域名相符合的结果,然后反馈给客户机ip地址(权威服务器反馈的权威结果)
7.实现DNS的方式
7.1 本地host文件
host:本地名称解析配置文件,位于etc/host
使用方式:
直接vim /etc/hosts,进入配置文件,添加IP地址和域名的对应关系(例如:192.168.1.13 www.baidu.com将百度的域名与192.168.1.13关联,在本机访问时输入www.baidu.com,访问的是192.168.1.13这个IP地址)
PS:以本地host文件的方式做dns解析,一定要记得修改dns的优先级
即:去vim /etc/nsswitch.conf配置文件中将第39行
39 hosts: dns files myhostname
修改为
39 hosts: files dns myhostname
修改两者先后,优先级就会发生改变,这样系统会优先以本地host做解析,然后才会尝试使用DNS服务器进行主机名解析
作用:
本地hosts文件用于在域名解析时将特定的域名与对应的IP地址进行映射。
在域名解析过程中,操作系统会首先检查本地hosts文件中是否存在与查询域名匹配的条目,如果有,则直接返回hosts文件中指定的IP地址,跳过后续的DNS查询过程。
缺陷:
过于分散,且需要手动更新文件
7.2 安装软件服务 bind
bind是dns服务应用最广泛的程序
DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns
- bind:服务器
- bind-libs:相关库
- bind-utils: 客户端
- bind-chroot: 安全包,将dns相关文件放至
/var/named/chroot/
BIND服务:
主配置文件位于: /etc/named.conf
区域配置文件位于:/etc/named.rfc1912.zones
主要执行程序:/usr/sbin/named
默认监听端口:53 保存DNS解析记录的数据文件位于:/var/named/目录下具体文件名由管理员定义。一般格式为/var/named/域名.zone
7.2.1 使用bind服务正向解析中的各种资源记录
- A记录:将域名解析为IPv4地址。
- AAAA记录:将域名解析为IPv6地址。
- CNAME记录:将域名解析为另一个域名,可用于创建别名。
- MX记录:指定接收某域名邮件的邮件服务器地址。
- NS记录:指定管理域名解析的权威域名服务器。
- PTR记录:用于反向解析,将IP地址解析为域名
SOA记录与NS记录的区别:NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设置一些数据版本和更新以及过期时间等信息。
SOA记录:
name: 当前区域的名字
value: 有多部分组成
注意:
- 当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字
- 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
- 主从服务区域传输相关定义以及否定的答案的统一的TTL
name [TTL] IN rr_type value
域名 缓存 Internet协议 资源类型 值
1.TTL可从全局继承缓存时间
2.使用@符号可以引用当前区域域名
3.同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询方式响应
4.同一个值也可能有多个定义名字,通过不同的名字指向同一个值进行定义,仅代表通过多个不同的名字找到同一个主机
$TTL 1D(统一的ttl定义1天,不写D 是秒)
@ IN SOA master. admin. (
当前服务器的名称 邮箱地址
0 ; serial #是否有更新 版本号 更新文件 手动把 0 加1
1D ; refresh #刷新时间 拉取时间
1H ; retry #失败一个小时后再试一次
1W ; expire #过期时间,老是拉取不了,1周以后过期
3H ) ; minimum #老是去查错误的解析地址,3小时内的缓存下,用户再查直接返回找不到
NS记录:
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字
注意:
- 相邻的两个资源记录的name相同时,后续的可省略
- 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
- 一个区域可以有多个NS记录
master IN NS name.com.
master IN NS name.com.
NS master
MX记录:
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
注意:
- 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
- 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
mail IN MX 10 mx1.name.org.
IN MX 20 mx2.name.org.
mx1 A 192.168.1.10
mx2 A 192.168.1.10
A记录:
name: 某主机的域名解析,例如:www.ylc.com
value:主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
www.ylc.com. IN A 1.1.1.1
www.ylc.com. IN A 2.2.2.2
www.ylc.com. IN A 3.3.3.3
www.ylc.com. IN A 4.4.4.4
* IN A 5.5.5.5
#代表泛域名
@ IN A 6.6.6.6
#代表不需要名字
PTR记录
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:inaddr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
CNAME别名记录
name: 别名
value: 真正名字
name1 IN CNAME name2
输入name2就等于输入name1
7.3 举例一些使用bind实现DNS解析
7.3.1正向解析
7.3.2 主从复制示例
环境:
两台服务器:
master:IP地址为192.168.1.10
slave:IP地址为192.168.1.100