内容纲要

DNS基础

  DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,域名服务器是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。

  DNS 是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的树,这个逻辑的树形结构称为域名空间,由于DNS 划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息。模式: C/S 模式。DNS协议使用udp/tcp的53端口提供服务,客户端向DNS服务发起请求时,使用udp的53端口;DNS服务器间进行区域传送的时候使用TCP的53端口。

注:DNS 域名空间中,树的最大深度不得超过127 层,树中每个节点最长可以存储63个字符。

image-20211214151347174

概念解析

1、域

DNS树的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构。域名空间的每个域的名字,通过域名进行表示。

2、域名

   域名:通常由一个完全合格域名(FQDN)标识。FQDN能准确表示出其相对于DNS 域树根的位置,也就是节点到DNS 树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS 域google 来说,其完全正式域名(FQDN)为google.com。
例如,google为com域的子域,其表示方法为google.com,而www为google域中的子域,可以使用www.google.com表示。注意域名不区分大小写。

   Internet 域名空间的最顶层是根域(root),其记录着Internet 的重要DNS 信息,由Internet域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到Internet 的各个组织。 “.”全球有13个根(root)服务器

   DNS 根域下面是顶级域,也由Internet 域名注册授权机构管理。共有3 种类型的顶级域。

组织域:采用3 个字符的代号,表示DNS 域中所包含的组织的主要功能或活动。比如com 为商业机构组织,edu 为教育机构组织,gov 为政府机构组织,mil 为军事机构组织,net 为网络机构组织,org 为非营利机构组织,int 为国际机构组织。

地址域:采用两个字符的国家或地区代号。如cn 为中国,kr 为韩国,us 为美国。
反向域:这是个特殊域,名字为in-addr.arpa,用于将IP 地址映射到名字(反向查询)。
对于顶级域的下级域,Internet 域名注册授权机构授权给Internet 的各种组织。当一个组织获得了对域名空间某一部分的授权后,该组织就负责命名所分配的域及其子域,包括域中的计算机和其他设备,并管理分配的域中主机名与IP 地址的映射信息。 

3、FQDN

    FQDN全称为Fully Qualified Domain Name,即完全合格域名。FQDN由两个部分组成:主机名和域名。因为DNS是逐级管理的,所以在不同的层级中主机名与域名也是不同的;以www.google.com为例,在第二层中,.com就是域名,google就是主机名,而到了第三层中,.google.com就成了域名,www就成了主机名。
    注意:主机名与域名并不是依据"."来划分的,主机名中也可以包含"."号的,主要还是要根据域名的注册情况来划分。

注意:通常,FQDN 有严格的命名限制,长度不能超过256 字节,只允许使用字符a-z,0-9,A-Z
和减号(-)。点号(.)只允许在域名标志之间(例如“google.com”)或者FQDN 的结尾使用。
域名不区分大小。
由最顶层到下层,可以分成:根域、顶级域、二级域、子域。

4、正向解析

    从FQDN转换为IP地址称为正向解析。

5、反向解析

    从IP地址转换为FQDN称为反向解析。

6、区域

    正向解析或反向解析中,每个域的记录就是一个区域。

7、区(Zone)

    区是DNS 名称空间的一部分,其包含了一组存储在DNS 服务器上的资源记录。使用区的概念,DNS 服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器。

8、主域名服务器与辅助域名服务器
    当区的辅助服务器启动时,它与该区的主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通信,查看区数据是否改变。如果改变了,它就启动一次数据更新传输。每个区必须有主服务器,另外每个区至少要有一台辅助服务器,否则如果该区的主服务器崩溃了,就无法解析该区的名称。

辅助服务器的优点:
1)容错能力
    配置辅助服务器后,在该区主服务器崩溃的情况下,客户机仍能解析该区的名称。一般把区的主服务器和区的辅助服务器安装在不同子网上,这样如果到一个子网 的连接中断,DNS 客户机还能直接查询另一个子网上的名称服务器。
2)减少广域链路的通信量
    如果某个区在远程有大量客户机,用户就可以在远程添加该区的辅助服务器,并把远程的客户机配置成先查询这些服务器,这样就能防止远程客户机通过慢速链 路通信来进行DNS 查询。
3)减轻主服务器的负载
    辅助服务器能回答该区的查询,从而减少该区主服务器必须回答的查询数。

DNS的解析库

  DNS的主要作用是进行主机名的解析。解析:根据用户提供一种名称,去查询解析库,以得到另一种名称。 正向解析与反向解析使用不同的解析库。

  资源记录:rr(resource record),有类型的概念;用于此记录解析的属性。

  • A:Address地址 IPv4

    A 资源记录
    地址(A)资源记录把FQDN 映射到IP 地址。 因为有此记录,所以DNS服务器能解析FQDN域名对应的IP 地址。

  • AAAA:Address地址 IPv6

  • NS:Name Server域名服务器

    NS 资源记录
    NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。每个区在区根处至少包含一个NS 记录。

  • SOA 资源记录
    每个区在区的开始处都包含了一个起始授权记录(Start of Authority Record),简称SOA 记录。
    SOA 定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA 记录。

  • MX:Mail Exchanger邮件交换

    MX 资源记录
    邮件交换(MX)资源记录,为DNS 域名指定邮件交换服务器。
    邮件交换服务器是为DNS 域名处理或转发邮件的主机。处理邮件指把邮件投递到目的地或转交另一不同类型的邮件传送者。转发邮件指把邮件发送到最终目的服务器,用简单邮件传输协议SMTP 把邮件发送给离最终目的地最近的邮件交换服务器,或使邮件经过一定时间的排队。

  • CNAME:Canonical Name规范名

    CNAME 资源记录
    别名记录(CNAME)资源记录创建特定FQDN 的别名。用户可以使用CNAME 记录来隐藏用户网络的实现细节,使连接的客户机无法知道真正的域名。
    例:ping百度时,解析到了百度的别名服务器。百度有个cname=www.a.shifen.com.的别名

  • PTR:Pointer指针

    PTR 资源记录
    相对于A 资源记录,指针(PTR)记录把IP地址映射到FQDN。 用于反向查询,通过IP地址,找到域名。

DNS的查询过程

对于Linux服务器来说解析一个域名默认情况首先查询的的是/etc/hosts这个配置文件(可以设置解析顺序),然后是本地DNS。顺序如下:

   1、本地hosts文件
   2、本地DNS缓存
   3、本地DNS服务器
   4、发起迭代查询 

 DNS采用两种查询机制:递归(Recursive Query)和迭代(Iterative Query)。

  img
img

  实际应用中,即使用递归查询,又使用迭代查询

img

两种查询方式:

(1)递归查询
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一
个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询
问其他服务器,并将返回的查询结果提交给客户机。

(2)迭代查询
DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。

DNS服务器类型

  1、主DNS服务器
    为客户端提供域名解析的主要区域,主DNS服务器宕机,会启用从DNS服务器提供服务。
  2、从DNS服务器
    主服务器DNS长期无应答,从服务器也会停止提供服务。
    主从区域之间的同步采用周期性检查+通知的机制,从服务器周期性的检查主服务器上的记录情况,一旦发现修改就会同步,另外主服务器上如果有数据被修改了,会立即通知从服务器更新记录。
  3、缓存服务器
    服务器本身不提供解析区域,只提供非权威应答。
  4、转发服务器
    当DNS服务器的解析区域(包括缓存)中无法为当前的请求提供权威应答时,将请求转发至其它的DNS服务器,此时本地DNS服务器就是转发服务器。

BIND部署

BIND简介

  BIND 全称为Berkeley Internet Name Domain(伯克利因特网名称域系统)。BIND 主要有三个版本:BIND4、BIND8、BIND9。BIND8 融合了许多提高效率、稳定性和安全性的技术,而BIND9 增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等。现在最新的版本是9,有ISC(Internet Systems Consortium)编写和维护。

  BIND支持先今绝大多数的操作系统(Linux,UNIX,Mac,Windows)

  BIND服务的名称称之为named

  DNS默认使用UDP、TCP协议,使用端口为53(domain),953(mdc,远程控制使用)

BIND安装

  本例使用的环境是CentOS 7.0的Linux操作系统(非CentOS 7.0系统,安装会有所区别),所以直接采用命令:

yum install -y bind bind-chroot bind-utils

bind:提供的dns server程序、以及几个常用的测试程序;
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如dig, host, nslookup等;
bind-chroot:选装,为了安全目的,让named运行于jail模式(沙箱)下;使bind可以在一个chroot 的模式下运行.也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已.这样做的目的是为了提高安全性.因为在chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中.
bind-utils #该包为客户端工具,默认安装,用于搜索域名指令。
 

DNS资源记录

1、资源记录的格式:

      name [ttl(缓存时间)] IN 资源记录类型(RRtype)  Value

例子:

       www  600(单位s) IN A 192.168.1.8
       www.example.com.  600 IN A 192.168.1.8

2、SOA记录

格式说明

name:只能是区域名称,通常可以简写为@,例如:example.com.
value:有n个数值,最主要的是主DNS服务器的FQDN,点不可省略 。

注意:SOA必须是区域数据库文件第一条记录

例子:

@ 600 IN SOA  na.magedu.com. 管理员邮箱(dnsadmin.example.com.)(
    序列号(serial number) ;注释内容,十进制数据,不能超过10位,通常使用日期,例如2014031001
    刷新时间(refresh time) ;即每隔多久到主服务器检查一次
    重试时间(retry time) ;应该小于refresh time
    过期时间(expire time)
    netgative answer ttl ;否定答案的ttl
)

3、NS记录

格式说明

name:区域名称,通常可以简写为@
value:DNS服务器的FQDN(可以使用相对名称)

注意:如果有多台NS服务器,每一个都必须有对应的NS记录; 对于正向解析文件来讲,每一个NS的FQDN都应该有一个A记录;

例子:

@ 600 IN NS ns

4、MX记录:

格式说明

name:区域名称 ,用于标识smtp服务器。
value:邮件服务器的FQDN 和优先级,优先级为0-99.数字越小,越优先。

注意:如果有多台MX服务器,每一个都必须有对应的MX记录;但各MX记录还有优先级属性 ,对于正向解析文件来讲,每一个NS的FQDN都应该有一个A记录;

例如

@    IN    MX  10    mail.example.com.
@    IN    MX  20    mail2.example.com.

5、A记录

格式说明

name: FQDN(可简写)
value: IP

注意:只能定义在正向区域数据文件中。

例如

www  600(单位s) IN A 1.2.3.4
www  600(单位s) IN A 1.2.3.5

说明:此种方法能做最简单的负载均衡,但是由于其负载均衡的规则为轮询,故使用前一定要注意。

www  600(单位s) IN A 1.2.3.4
ftp 600(单位s) IN A 1.2.3.4

说明:此种是将一个主机名定义多个名称。

6、AAAA记录

格式说明

name:FQDN(可简写)
value:ipv6 IP

7、CNAME记录

格式说明

name: FQDN
value: FQDN

例如

www    IN    A    172.16.10.10
ftp    IN    CNAME    www

8、PTR记录

格式说明

name: 逆向的主机IP地址加后缀in-addr.arpa,例如172.16.10.10/16, 网络地址为172.16, 主机地址为10.10,其name为10.10.in-addr.arpa.(可简写)

value: FQDN

注意:只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in.addr.arpa.后缀组成。

例如

10    IN    PTR    www.example.com.

BIND配置

1、BIND配置文件保存在两个位置:

/etc/named.conf  - BIND服务主配置文件
/var/named/    - zone文件(域的dns信息)

  如果安装了bind-chroot(其中chroot是 change root 的缩写),BIND会被封装到一个伪根目录内,配置文件的位置变为:

/var/named/chroot/etc/named.conf  - BIND服务主配置文件
/var/named/chroot/var/named/    - zone文件

  chroot是通过相关文件封装在一个伪根目录内,已达到安全防护的目的,一旦程序被攻破,将只能访问伪根目录内的内容,而不是真实的根目录

2、BIND安装好之后不会有预制的配置文件,但是在BIND的文档文件夹内(/usr/share/doc/bind-9.9.4),BIND为我们提供了配置文件模板,我们可以直接拷贝过来:

cp -r /usr/share/doc/bind-9.9.4/sample/etc/* /var/named/chroot/etc/
cp -r /usr/share/doc/bind-9.9.4/sample/var/* /var/named/chroot/var/

3、配置BIND服务的主配置文件(/var/named/chroot/etc/named.conf),命令:vim /var/named/chroot/etc/named.conf;
内容很多使用简单配置,删除文件中logging以下的全部内容,以及option中的部分内容,得到如下配置

4、在主配置文件(/var/named/chroot/etc/named.conf )中加入,zone参数
   

5、新建example.net.zone文件,example.net的域名解析文件,zone文件放在/var/named/chroot/var/named/下,zone文件可以已/var/named/chroot/var/named/named.localhost为模板。
    命令:cp /var/named/chroot/var/named/named.localhost /var/named/chroot/var/named/example.net.zone

    文件example.net.zone的内容如下:
 

6、禁用bind默认方式启动,改用bind-chroot方式启动。命令如下:
    [root@iZ2806l73p6Z named]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
    [root@iZ2806l73p6Z named]# systemctl stop named
    [root@iZ2806l73p6Z named]# systemctl disable named
    [root@iZ2806l73p6Z named]# systemctl start named-chroot
    [root@iZ2806l73p6Z named]# systemctl enable named-chroot

    

  8、测试DNS服务,本例在本机上测试,也可在其他电脑上测试,修改DNS服务的ip地址即可(命令:vim /etc/resolv.conf ),然后使用命令dig(命令:dig www.example.net)测试

参考

DNS软件bind使用

DNS之BIND使用小结(Forward转发)

如何使用 bind 设置 DNS 服务器

使用BIND9在Ubuntu 18.04上设置本地DNS解析器

如何在Debian 9上将BIND配置为专用网络DNS服务器

https://unix.stackexchange.com/questions/128220/how-do-i-set-my-dns-when-resolv-conf-is-being-overwritten