一、DNS服务概述
DNS(Domain Name service或者Domain Name Server)中文名叫做域名服务或者域名服务器, 属于应用层协议, 为C/S架构, 使用TCP/UDP的53号端口.
[[email protected] ~]# cat /etc/services | grep "^domain\b"
domain 53/tcp # name-domain server
domain 53/udp
1.1 DNS服务架构概览
DNS服务架构见下图:
从图中可以看出, DNS服务的架构是一个分布式的架构, 最顶层是根域服务器, 中间是顶级域名服务器, 接着是二级域名和三级域名服务器.
每一个域名服务器都只负责解析本域内的名称的主机. 根域服务器全球共有13组.
常用的顶级域名(TLD, Top Level Domain)有com, edu, mil, gov, net, org, int等, TLD分三类, 组织域、国家或地区域(.cn, .us, ...)和反向域.
1.2 DNS服务查询类型
DNS服务查询有两种类型:
- 递归查询: 只发送一次查询请求就能得到最终答案, 普通客户端就是使用的递归查询
- 迭代查询: 每次查询的答案为参考答案, 必须进行下一次查询, 通过1次或多次查询得到最终答案, 缓存DNS服务器(一般由电信运营商提供)使用的就是迭代查询
DNS查询过程图如下:
NOTE: 客户端在查询DNS服务器之前会先查询本地的hosts(名称解析配置文件)文件, hosts文件中没有查询到需要的信息才会去查询DNS服务器.
hosts路径:
- linux: /etc/hosts
- windows: %WINDOWS%/system32/drivers/etc/hosts
# hosts格式: IP DomainName 1.1.1.1 www.xxx.com 2.2.2.2 www.yyy.com
一次完整的DNS查询请求经过的流程:
# 1. 当你请求www.xxx.com这个域名时, 会先去查找本地hosts文件, 如果本地hosts文件中有结果, 则直接返回
# 2. 如果hosts文件中没有结果, 则会请求DNS serveice, DNS service会先查找Local DNS Cache, 有结果则直接返回
# 3. 如果没有结果, 就去会从根域服务器开始迭代查询
# 4. 最后迭代查询有结果就直接返回给客户端
解析答案有四种类型:
- 肯定答案
- 否定答案: 请求的条目不出那种等原因导致无法返回结果
- 权威答案
- 非权威答案
1.3 DNS解析类型
DNS解析类型有两种:
- 正向解析: FQDN(Full Qualified Domain Name) --> IP
- 反向解析: IP --> FQDN
FQDN的中文意思是完全限定域名, 例如: www.buyaoliandebaidu.com就是一个FQDN.
正向解析和反向解析各需要一个解析库来进行解析, 称之为正向区域和反向区域.
NOTE: 正反向解析是两个不同的名称空间, 是两颗不同的解析树.
1.4 DNS服务器类型
DNS服务器类型分为四类:
- 主DNS服务器: 维护所负责解析的域内解析库的服务器, 解析库由管理员维护
- 辅助DNS服务器: 从主服务器或其他从服务那里“复制(区域传送)”一份解析库, 从服务器根据主服务器的序列号变化来更新解析库
- 序列号: 解析库的版本号; 前提: 主服务器解析库内容发生变化, 其序列号递增
- 刷新时间间隔: 从服务器从主服务器请求同步解析库的时间间隔
- 重试时间间隔: 从服务器从主服务器请求同步解析库失败时, 再次尝试的时间间隔
- 过期时长: 从服务器始终联系不到主服务器时, 多久之后放弃从服务器角色并停止提供服务器
- 缓存DNS服务器
- 转发器
区域传送有两种, 全量传送(传送整个解析库)和增量传送(传送解析库变化的那部分内容).
二、DNS的区域解析库
DNS的区域解析库中定义了资源记录(Resource Record, RR), 资源记录类型如下:
- SOA(Start Of Authority): 起始授权记录, 一个区域解析库仅能有一个SOA记录, 而且必须为解析库的第一条记录
- A(Internet Address): 用于实现将FQDN解析为IP地址
- AAAA: 用于IPv6, 将FQDN解析为IPv6地址
- PTR(PonTeR): 将IP解析为FQDN
- NS(Name Server): 专用于标明当前区域的DNS服务器
- CNAME(Canonical Name): 别名记录
- MX(Mail eXchanger): 邮件交换器
2.1 资源记录定义的格式
定义资源记录的语法:
# 语法: name [TTL] IN tt_type value
# NOTE:
# TTL可从全局继承
# “@”可用于引用当前区域的名字
# 同一个名字可以通过多条记录定义多个不同的值, 此时DNS服务器会以轮询方式响应
# 同一个值也可能有多个不同的定义名字, 通过多个不同的名字指向同一个值进行定义; 仅此表示通过多个不同的名字可以找到同一个主机而已
SOA记录:
# name: 当前区域的名字, 例如: leistudy.com
# value: 有多部分组成
# 当前主区域的DNS服务器的FQDN, 也可以使用当前区域的名字
# 当前区域管理员的邮箱地址, 但地址中不能使用@符号, 一般用“.”代替, 例如linuxedu.magedu.com
# 主从服务协调属性的定义以及否定的答案的统一的TTL
# 示例:
leistudy.com. 86400 IN SOA ns.leistudy.com. nsadmin.leistudy.com. (
2018022801 ;序列号
2H ;刷新时间
10M ;重试时间
1W ;过期时间
1D ;否定答案的TTL值
)
NS记录:
# name: 当前区域的名字
# value: 当前区域的某DNS服务器的名字, 例如: ns.leistudy.com.
# NOTE: 一个区域可以有多个NS记录
# 示例:
leistudy.com. IN NS ns1.leistudy.com.
leistudy.com. IN NS ns2.leistudy.com.
NOTE1: 相邻两个资源记录的name相同时, 后续可省略
NOTE2: 对NS记录而言, 任何一个ns记录后面的服务器名字, 都应该在后续有一个A记录
MX记录:
# name: 当前区域的名字
# value: 当前区域的某邮件服务器(smtp服务器)的主机名, 一个区域内, MX记录可有多个; 但每个记录的value之前应该有一个数字(0-99), 表示此服务器的优先级, 数字越小, 优先级越高
# 示例:
leistudy.com. IN MX 10 mx1.leistudy.com.
IN MX 20 mx2.leistudy.com.
# NOTE: 对MX记录而言, 任何一个MX记录后面的服务器名字, 都应该在后续有一个A记录
A记录:
# name: 某主机的FQDN, 例如www.leistudy.com.
# value: 主机名对应主机的IP地址
# 示例:
www.leistudy.com. IN A 1.1.1.1
www.leistudy.com. IN A 1.1.1.2
mx1.leistudy.com. IN A 1.1.1.3
mx2.leistudy.com. IN A 1.1.1.3
# NOTE: 避免用于写错名称时给错误答案, 可通过泛域名解析进行解析至某特定地址
# 示例:
*.leistudy.com. IN A 1.1.1.4
magedu.com. IN A 1.1.1.4
AAAA记录:
# name: FQDN
# value: IPv6
PTR记录:
# name: IP, 有特定格式, 把IP地址反过来写, 例如1.2.3.4要写作4.3.2.1; 而且有特定后缀: in-addr.arpa; 所以完整写法为“4.3.2.1.in-addr.arpa”
# value: FQDN
# 示例:
4.3.2.1.in-addr.arpa. IN PTR www.leistudy.com
# 简写: 网络地址及后缀可省略, 主机地址依然要反写
4 IN PTR www.leistudy.com.
CNAME记录:
# name: 别名的FQDN
# value: 真正名字的FQDN
# 示例:
web.leistudy.com. IN CNAME www.leistudy.com.
NOTE: 配置示例请查看博客http://blog.51cto.com/13501622/2092851
原文地址:http://blog.51cto.com/13501622/2092840