DNS服务原理及区域解析库文件配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS服务原理及区域解析库文件配置相关的知识,希望对你有一定的参考价值。

一、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

以上是关于DNS服务原理及区域解析库文件配置的主要内容,如果未能解决你的问题,请参考以下文章

多区域 DNS 服务,子域授权,缓存 DNS及Split 分离解析的原理和实现

DNS配置及主从同步

Linux上配置DNS分离解析

linux-DNS域名正向解析服务程序BIND安装与配置

DNS原理及其解析过程

Linux从DNS服务器反向解析配置