ISC BIND9 - 最详细、最认真的从零开始的BIND 9服务讲解

DNS and BIND 服务的搭建说明



1. 背景

1.1 DNS

DNS( Domain Name Service) 做为一个很是让人耳熟能详的概念,这种技术能够把复杂难记的IP地址转化成为一个域名供人们去调用,这样人们只须要记住每个网站的域名而不须要记住很是复杂的IP地址。html

这种技术这里不作深刻探讨,只须要对DNS的过程有一个大概的了解便可,将来会有一篇专门探讨 DNS 协议及其安全问题的安全博客,在这篇安全博客将会详细描述安全实验的步骤。

linux

DNS ZONE:web

DNS Zone,DNS域,被用来划分DNS主域。传统的DNS域相似一个树状的结构,被分红不一样的区域,这些区域可区分一个DNS服务器中命名空间中不一样的区域。 DNS区域是构成DNS命名空间的一部分,由特定组织或管理员加以管理,其能够对权威性域名服务器等DNS组件更加精细的控制。 域名空间是一个分层数,其中DNS的根域位于顶部,DNS区域始于该树中的一个域,而且能够扩展到下边的子域。算法


常见的资源记录类型shell

A :Address地址, IPv4数据库

AAAA:Address地址 IPv6ubuntu

NS :Name Server域名服务器windows

SOA:Start of Authority 起始受权机构centos

MX:Mail Exchanger 邮件交换缓存

CNAME:Canonical Name规范名

PTR:Pointer指针

TXT:Text

SRV:Service

CNAME

CNAME-records ( Canonical name for an alias )是域名的别名。一个服务器地址 nyc3.example.com 这个主机域名可能会提供不一样的服务,好比说一个域名即要去提供 web服务,也要提供 ftp 服务,那么这个时候就须要一个别名域名来指向原来的域名,这个时候就可使用一个 A 记录来管理多个域名,为DNS后期修改配置提供方便。举个例子:

我想要搭建一个博客网站后台为博客网页提供web服务,我想要节省我服务器搭建的成本开销,只想租用一个服务器并配置相关域名解析,个人博客网站如今提供的服务有评论,分享,登录受权,注册,这个时候我须要同时在这个服务器上开通这些服务,一开始你的博客网站默默无闻,访问量以及下载量并非那么大,这个时候你的服务器负载并非那么严重;当你的访问量暴增的时候,这个时候就须要考虑到你的服务器的流量转发问题了~原始服务器的流量暴增已经让你的服务器性能急剧降低,你须要将原来的提供服务的服务器的相关模块提供一个内容分发模块 (CDN),这个CDN提供商要求你的域名作一个Pointer来指向他们为你提供的 DNS地址,这个时候你的 CName 就能够指向他们提供的域名,作到对DNS流量的分发,从而实现网站的流量负载均衡做用。

NS (Name Server)

域名服务器,NS,用于肯定哪些服务器(注意不是单个服务器)为一个局域网传递DNS信息以及肯定域名由哪一个服务器进行解析。

通常NS配置在 BIND9 中的 db 文件中进行配置,在 SOA 配置以后。NS记录 和 SOA记录是任何一个DNS区域都不能或缺的两条记录。

SOA( Start of Authority)

SOA 又被称做 起始受权机构记录, 被标记成在众多NS记录中哪一台是主服务器。

SOA 记录表示此域名的权威解析服务器地址,当要查询的域名在全部递归解析服务器没有域名的解析缓存时,会回源到请求此域名的SOA 记录,也叫作权威解析记录。

SOA 做为全部区域文件的强制性记录,他必须是 ZONE 文件中的第一个记录。

SRV (Service)

SRV 记录是从 RFC2052 中对 SRV资源进行了定义。SRV 被用来记录服务器提供什么样的服务。

1.2 FQDN

FQDN(Fully Qualified Domain Name) 彻底合格域名/全程域名,即域名能够经过DNS进行解析,其公式 FQDN = HostName + Domain。

这门技术解决了一个多个主机的问题,一个网站或者服务器集群通常都是有多个主机一块儿协做的,好比说包括正向代理服务器、反向代理服务器、Web服务器、Email服务器、OA服务器、FTP服务器等等,这个时候就涉及是否是需不须要为每个主机申请一个域名。 有了这个技术以后每个主机均可以本身申请一个 Hostname 来区别于其余的主机,这个时候就只须要一个域名就能够作到管理全部的主机。

好比我申请了一个域名: doheras.com

如今我有两个服务器须要用到这个域名,一个 FTP服务器,一个Web服务器,这两个服务器都须要用到 doheras.com这个域名,根据公式,咱们知道能够采用 hostname 的方式来访问不一样的主机:

Web 服务器: web.doheras.com

FTP 服务器: ftp.doheras.com

所以, FQDN 服务能够简化在服务和应用中的配置流程,提升配置文件的可维护性。

在配置DNS的过程当中,由于服务端的工做在UDP协议端口53上,DNS须要FQDN提供正向解析 (FQDN --> IP)以及反向解析 (IP --> FQDN) 的服务。

1.3 BIND

BIND(Berkeley Internet Name Domain)做为一款目前市面是最主流的开源DNS软件,占据了市面上DNS服务器软件的九成,目前由 互联网系统协会 (Internet Systems Consortium) 负责开发和维护。目前,最新的稳定版BIND已经更新到了 BIND 9 版本。

BIND能够运行的系统和平台很是得全面,从官网上来看,目前支持的主流的Linux操做系统及其服务器种类有: Ubuntu、Debian、Fedora/CentOS。其中对于Fedora的版本支持已经涵盖了最新版本:Fedora 33。在Linux平台上能够作到对 BIND 源码的编译和特殊功能定制的操做,对于该软件在实际运行过程当中的安全性的探讨研究。其基本功能支持在服务器或者是本机上搭建定制的DNS服务并作到域名解析功能。对于将该软件部署到Linux平台最具备优点的方面是定制化的DNS服务,由于源码对于每个开发人员和网络管理人员都是透明的,所以能够作到对该软件的随意定制。

其次,对于使用较为普遍的Windows操做系统,BIND也给出了能够运行的解决方案,可是其定制化的功能由于平台的缘由收到了限制和Windows 10 操做系统的相关问题,所以我认为不推荐 BIND 在 Windows上的实验,可是本文也给出了在 Windows 10 操做系统下的安装办法,对于 Windows Server 操做系统要求的管理经验以及熟练度过高,所以本文没有给出相关配置步骤。

1.4 本文中搭建模拟DNS服务网络虚拟设备架构示意图 - Debian 9

本文中说起到相关实验和操做步骤的操做环境具体配置要求,都已经根据每一个不一样章节的内容给出了说明,请在不一样章节前自行查找相关的配置信息做为参考。

下边给出的图片列举了Big Sur下搭建模拟DNS虚拟机网络的拓扑图,使用的:

  • 172.16.2.11 做为主要的 (Master) DNS解析服务器,主要为客户端提供域名解析服务,全部客户端的首要访问的DNS解析服务器是NS1
  • 172.16.2.12 做为一个灾备的服务器NS2,被看成一个灾备DNS服务器使用,在主机没法提供域名解析服务的时候被启用,其配置流程与NS2基本上同样,惟一的区别是配置须要分清与NS1的主次关系;
  • 172.16.2.5 / 172.16.2.6 / 172.16.2.7 作为模拟请求客户端的虚拟机,其用来模拟和重现配置DNS解析客户端的配置流程;
  • 172.16.2.0 做为虚拟机链接本机的 NAT 网络的网关地址,用于与 Mac 主机进行通讯;

Caution

  • 以上全部网络设备对应的设备都是基于 Mac Big Sur 下 VMware Fusion 的虚拟机;
  • 自行搭建复现过程IP地址不须要与上图保持一致,请自行规定虚拟设备的IP;

1.5 操做系统的选择

在 ISC 官网上的 BIND 9 支持的 Linux 版本包括: Debian 、 CentOS 、 Fedora 、 Ubuntu。从网上的资料来讲,大多数的选择都是 Debian 做为服务器端的选择。对于非Linux操做系统,Windows / Windows Server 也支持搭建 BIND 9 DNS 服务。

从互联网上的大多数英文论坛网友的评论来讲,本着稳定、安全、实用并容易管理的原则,对上述的主流操做系统进行分析:

对于 Debian 系列的操做系统对于开源社区的更新和支持力度比较大,版本更新较快,新发行的版本可能会存在不稳定的问题和补丁容易带来系统的安全性、完整性的问题,但其优势是ISC提供预编译的 BIND 9 包在 Debian 操做系统上能够轻松作到运行,Debian Server 版本更新补丁的速度都比较快;

CentOS 做为一款专业的服务器端,拥有稳定、安全的特性,其发行版本通常较为稳定并通过许多专业人员在服务器端的大量测试,ISC 也为其编译了BIND 9 的安装包,但其缺点在不容易上手和难以操做,对于 CentOS 7 和 CentOS 8 的社区支持和版本更新会在 2021年和2029年终止,而且之后 CentOS Stream 再也不做为 RHEL的“免费”的商业版本而成为介于 Fedora 和 RHEL 之间,其定位与 Fedora 较为相近;在尝试配置 CentOS 8 的过程当中出现不少不该该出现的问题,好比说从 yum 安装BIND9时对应目录下的文件没法找到,sudo 的用户添加过于复杂的问题让人很是恼火。

Ubuntu 做为经典的桌面版Linux的操做系统,很是稳定和容易上手,可是选择其做为服务器端的人数较少,有可能带来的问题难以被估计。

综上,我选择 Debian9 做为 测试版 DNS Server 的承载操做系统,选择的依据依赖于其稳定的更新频率和良好的开源社区,备用的选择为 RHEL 和 Fedora。

在接下来的内容,我将选择 Windows 预先编译好的服务文件做为测试搭建DNS服务并详细描述在 Debian 的搭建 BIND 9 服务的步骤和配置流程。

1.5 BIND9 与 F5-GTM

写这篇博客的目的是作一个替代F5核心GTM的BIND服务器,构建这个服务器目标是为了在局域网内核心F5的GTM设备出现故障时候,配置好的 BIND服务器 能够马上取代F5 GTM设备充当整个区域网的域名解析服务器为访问终端或服务器提供域名解析服务。

在这里我必须指出在构建这个BIND域名解析服务器时,遇到的一个很是大的困惑。

从上面的模拟DNS虚拟机网络的拓扑图中,NameServer(NS)是与主机在同一个网段下的,但实际上,在生产链路中的F5 GTM设备并非和其余的服务器链接在同一个网段下的,这就会带来一个问题,就是当终端想要访问外网段的DNS解析服务器时,NameServer 会不会不能为其提供服务?

问题的重现从这篇详细阐述F5-GTM运做原理的官方文档开始:https://techdocs.f5.com/kb/en-us/products/big-ip_gtm/manuals/product/gtm-concepts-11-5-0/4.html

这里边详细介绍了F5 GTM的运做原理,以及出现了下边的图片,这个部分引发了个人担心,当链路的GTM失效以后,由于GTM与LTM链接的子服务器以及子终端由于不在同一个网段中而没法进行工做:

举个例子,GTM做为整个链路的核心设备,用于为LTM设备提供域名解析服务,在实际的生产网络中中GTM在网络中拓扑并非与LTM存在于同一个网段的,画一个图来表述这个问题:

上图中,做为一个简单的网络拓扑的再现,四个网络中LTM都与中间的GTM不在同一个网段中,由于我在以前画的模拟拓扑全部的设备无论是DNS服务器仍是host终端都在同一个网段,所以设备与设备之间的访问以及设备与DNS服务器之间的服务创建并不须要跨越网段,所以访问以及提供服务是没有任何问题的。

可是若是不在同一个网段呢? 固然这个部分省略了不少关键的网络设备,这里不一一阐述。

其实这个问题我是想的有一点偏的,或者来讲比较多余,由于:

  • 其实做为谷歌仍是阿里提供的免费的权威域名服务器都是在不一样的网段下进行运做的,那么不一样网段不该该成为DNS服务器没法提供服务的一个阻碍条件;
  • 其次,个人困惑是在整个体系中 GTM 与 LTM 是搭配进行使用的,因此我错误地认为 GTM是为LTM服务的,我须要解决的事是GTM与LTM之间的配置问题,为LTM提供服务,这个想法是彻底错误的;在整个网络体系中,GTM 为全部的访问域名客户端的客户端提供解析服务,并不影响 LTM的工做,二者的工做状态是独立的;
  • 最后,若是说F5设备的特点是负载均衡,那么这个负载均衡体如今GTM设备之间的负载均衡或者来讲是“双活”,而不是与LTM的负载问题。

若是想要了解 GTM 与 BIND 之间的关系,请详细了解 BIG-IP-GTM 中内嵌的模块 - ZONERUNNER

2.BIND 9 配置文件讲解

这里以 Debian9 做为配置讲解的环境。

BIND9 的配置文件在安装以后配置文件名字: named.config, 在 Linux下被易名为 named.conf 文件存储的位置为:/etc/bind,其中文件named.conf引用了三个文件: named.conf.optionsnamed.conf.localnamed.conf.default-zone

在 Debian9 中查找和重启当前 BIND9 服务的命令是: sudo systemctl status bind9sudo systemctl restart bind9

2.1 CONF 文件

在完成 BIND9 的变异和安装以后,BIND9 已经建立了一个默认的配置文件 named.conf.local 和 文件 named.conf.options 用于配置 BIND9 的基础服务,这两个文件做为配置DNS的核心文件,修改这两个文件须要管理员权限,默认的权限为: root:named,不要随便更改这两个文件的运行权限,DNS 服务会出现问题。

配置文件的注释符号为 //

acl

通常来讲,ACL模块用来承担控制主机能够访问域名解析服务器的角色,其设置不会让控制文件的配置很是冗余和庞大。采用这个配置能够有效防范DOS以及Spoofing攻击。通常来讲定义这部分的内容来规定IP是否可以被接入以及Blocklist来阻止某些特定的IP地址介入到域名解析服务器中。

ACL匹配客户端是否可以接入到域名服务器基于三个基本的特征:

  • 客户端的IPv4或者IPv6地址
  • 用于签署请求的 TSIG 和 SIG(0) 密钥
  • 在DNS客户端子网选项中编码的前缀地址

匹配 acl 定义以及使用规则以下: string 是用来命名IP地址集的一个变量名,能够随意地被命名;

acl <string> { <address_match_element>; ... };

举一个在 named.conf.options 文件中被定义的例子:

acl bogusnets {
    0.0.0.0/8;  192.0.2.0/24; 224.0.0.0/3;
    10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16;
}; // 这个部分
// Set up an ACL called our-nets. Replace this with the
// real IP numbers.
acl our-nets { 172.16.2.11/24; 172.16.2.12/24; }; //子网的名称

logging

logging 部分的配置为DNS解析服务器提供了日志记录的功能,DNS服务器上的全部日志记录被存储到了指定的文件中。其通用的配置文件为:

logging {
      category <string> { <channel_name_string>; ... };
      channel <string> {
              buffered <boolean>;
              file <quoted_string> [ versions ( unlimited | <integer> ) ]
                  [ size <size> ] [ suffix ( increment | timestamp ) ];
              null;
              print-category <boolean>;
              print-severity <boolean>;
              print-time ( iso8601 | iso8601-utc | local | <boolean> );
              severity <log_severity>;
              stderr;
              syslog [ <syslog_facility> ];
      };
};

从上边的通用配置格式能够看出来,logging 模块分为两个部分,categorychannel,channel的做用是指定输出的方式、日志格式的选项和事件的严重性,每个channel 能够指定一个 category 来指定记录的事件类型。其中 category 用来区分不一样的事件产生的类别或者场景,好比:客户端请求-client request、配置文件解析处理-Configuration file parsing and processing

若是在 named.conf.options 文件中没有指定 logging 模块系统会给出一个默认的配置

logging {
     category default { default_syslog; default_debug; };
     category unmatched { null; };
};

channel 的配置规则:

  • 全部的日志输出都须要 channel 来指定输出格式,BIND9 对于建立 channel 的数量没有限制。

  • 每个 channel 都须要为该通道的日志信息指定一个 destination clause - 目的句柄,目的句柄在 channel 阶段被配置,这个目的句柄用来区分: 1)输出到具体的文件的名字 - file;2)输出到具体的系统日志工具中(syslog/syslogd)- syslog;3)输出到终端显示- 标准错误流(standard error stream);4)或者该错误消息直接被丢弃 - null

    其次,channel 的配置能够规定每个错误日志消息的响应级别,默认的响应级别是info ,channel 能够规定接受错误消息的级别;此外,channel 还能够控制输出错误日志消息的格式,能够包含:响应时间戳、category名字、严重等级等。

channel 的配置参数:

  • buffered: 用来规定是否刷新错误日志的文件,其参数值为<boolean>,在 BIND9 中 <boolean> 值的参数值为 yes / no,若是设置成为 yes 那么日志消息流(通常每个错误日志消息都是一个 Log Entry)就不会刷新,而是被保存在缓冲区中了,不会刷新到文件中。

  • file: 相似于Linux的通道概念,file 将日志输出流经过通道直接输出给文件,从上边的通用配置能够看出来能够为 file 指定文本文件的大小 - size ;指定 log 文件的版本号 - version;指定用于命名备份版本的格式 - suffix

    size 用来限制log文件的大小,若是log文件的大小设置超过了设定的阈值,那么系统会自动中止输出内容到文件中;

    versions: 用于指定新建立的 log文件数存储到本地的上限值,默认的参数值为unlimited,当指定的文件的大小超过设定的size值得时候,若是没有指定 versions,那么系统就不会继续写进log;若是制定了versions,那么就会继续写入;

    suffix :设定用来命名log文件的方式;好像没啥用,我添加这个参数没有什么反应...;

  • syslog:将通道定向到系统的日志文件流中; 经常使用的支持日志文件服务为:dameonsysloglocal6local7

  • severity:用来承担定义日志严重级别的定义角色,至关于 syslog - priorities。好比说定义了日志的严重级别为 Debug,那么会输出日志事件 Debug 以上的错误到文件中。通常经常使用的严重等级: debug[level]noticewarningdynamic - 与当前服务器的日志保持一致;通常的 DNS服务器的日志等级调成 info便可;

  • stderr:将通道指向服务器的标准错误流。这是为了在服务器做为前台进程运行时使用;

  • print-timeyes / no / local / iso8601 / iso8061-utc 能够设定不一样的输出到日志文件的时间格式;

  • print-category:打印日志消息配置category 的信息;

  • print-severity: 打印日志的严重等级


category词组配置规则:category <config_string> { <channel_name_string>; ... };

  • client: 客户端请求;
  • cname:因为是CNAME而不是a /AAAA记录 的域名服务器;
  • config: 配置文件解析和处理过程;
  • database:与名称服务器内部用于存储区域和缓存数据的数据库相关的消息;
  • general: 没有被归类的 category 类别的其余种类的日志文件信息;
  • lame-servers: 远程服务器中的错误配置,BIND 9在解析期间试图查询这些服务器时发现;
  • network: 网络操做;
  • notify: 通知协议;
  • queries:记录全部查询 DNS服务器的 query;
  • query-errors: 关于致使某些失败的查询的信息;
  • xfer-in:区域传输服务器正在接收;
  • xfer-out:区域传输服务器正在发送的信息;
  • zoneload:加载区域和建立自动空区域;

怎么去配置这个服务?

配置的 logging 服务会建立指定的日志文件,该日志文件从服务挂起的时候被建立,用于记录DNS服务中的相关的配置信息以及交换信息。在 Debian9 的默认存储目录为 /var/cache/bind/*。你也能够为其指定存储的位置。

若是你想要配置成一个本身的目录,首先你须要建立一个自定义的目录,好比说我指定了我想要存放日志的文件的目录: /var/log/bind,若是不为这个文件使用chown命令指定权限的话会出现 isc_stdio_open '/var/log/example.log' failed 的报错。解决方法是: sudo chown bind:root /var/log/bind

如今咱们已经基本上了解了 logging 的工做原理,其工做机制简单地来讲就是,首先你须要建立一个 channel 来规定输出日志流的格式还以及日志文件名、文件版本,每个 channel 能够被多个 category 调用使用,每个 category 至关于一个 BIND9 内嵌的服务模块,服务模块去调用日志配置模最后输出格式化日志。

options

options 的参数设置会影响整个 BIND9 DNS环境的配置,具体各部分经常使用到的配置参数以下:

  • listen-on: 用于配置监听的端口以及IPv4地址,默认的监听端口为:53;
  • listen-on-v6:用于监听 IPv6 地址以及端口;
  • directory: 用于指定读取DNS数据文件的文件夹,默认的文件夹的路径为:/var/cache/bind
  • dump-file:选项用来设置域名缓存数据库文件的位置,能够本身定义。默认的存储文件为:named_dump.db
  • statistics-file:选项用来设置状态统计文件的位置,能够本身定义。;
  • memstatistics-file :选项用来设置服务器输出的内存使用统计信息。默认保存在 /var/named/data 目录下,文件名为 named.memstats
  • allow-query:选项用来设置容许DNS查询的客户端地址,默认值为localhost, 能够设置为某个网段、任意地址、具体的某台主机三种状况。例如,要修改成任意地址,就在括号内的加入 any,也能够引用以前建立的 acl 内的全部地址;
  • recursion:用于设置递归查询,通常客户机和服务器之间属于递归查询,即当客户机向DNS服务器发出查询请求后,若DNS服务器自己不能解析,则会向另外的DNS服务器发出查询请求,获得结果后转交给客户机。此选项有yesno两个值。这个选项用于设置 Failover 很是有用;
  • dnssec-enable: 选项用来设置是否启用DNSSEC支持,DNSSEC能够用来验证DNS数据的有效性,该选项有yesno两个值,默认值为yes
  • dnssec-validation:选项用来设置是否启用DNSSEC确认,默认值为yes,能够选择 auto
  • bindkeys-file : 用来设置内置信任的密钥文件,其默认值为 /etc/named/iscdlv.key
  • managed-keys-directory: 选项用于指定目录中的文件存储位置,跟踪管理 DNSSEC 密钥, 这部分的内容在后边会有介绍;
  • forwarders:DNS转发器。用于设定该DNS解析服务器没法进行当前域名解析的状况下,进行转发解析的DNS地址,其中 8.8.8.88.8.4.4 是谷歌的免费DNS服务器的网络地址;233.5.5.5233.6.6.6 是阿里云的免费DNS地址。当设置了 forwarder 的转发器以后,全部的非本域的和在缓存中没法查找到的域名查询都转发都设置的DNS转发器,由DNS转发器 完成转发操做。所以这台转发器的缓存中就记录了丰富的域名信息。所以若是遇到非本域的查询,转发器的缓存就能够作到查询,从而减小了向外部的查询流量。
  • forward: 选择默认的IP地址便可;

controls

controls语句声明了系统管理员用于管理名称服务器远程操做的控制通道。rndc使用这些控制通道向名称服务器发送命令,并从名称服务器检索非dns结果。

2.2 Zone 文件 - named.conf.local

该文件定义了 BIND9 中的 ZONE(区域)文件在named.conf文件中的定义,用于定义解析的域名的数据库文件,即域名与IP地址的映射关系以及DNS发送的解析域名数据包的相关参数设置,其定义的格式以下:

zone "<YOUR DNS Domain Name >" {
	<Configurations>
}

固然你也能够定义你的反向解析域名经过如下的格式进行定义:

zone "<YOUR IP ADDRESS>-addr.arpa" {
	<Configurations>
}

经常使用的参数配置以下:

  • file - 和 options 的参数的含义是同样的,用于指出域名与IP地址解析的数据库配置文件;
  • allow-transfer: 这个地方的配置是用来给出 Failover 或者是 递归查询DNS服务器的IP地址,若是以前在 options 里配置的allow-transfer 若是设置成了参数 yes, 那么须要在这里指出递归查询服务器的IP地址;
  • type: 用于指定当前DNS解析服务器的位置,是主服务器 - master 仍是从服务器 - slaver?

3. Windows下的安装测试

3.1 BIND 9 Executable Windows Edition 下载及其安装

Windows 桌面及其Server运行版本要求

BIND 9 部署到 Windows 环境须要知足如下的环境条件:

Windows 64 bit for win64 built using Microsoft Visual Studio 2012 (.x64.zip)

ISC 要求须要知足运行环境下 Microsoft Visual Studio 2012 及其依赖的安装, 不能运行在 Microsoft Windows XPMicrosoft Windows Server 2003 下。

BIND 9 Windows版本

Windows版本下载的网址请单击: https://www.isc.org/download/

目前 ISC 给出了三种能够下载的版本,第一种是测试版本 9.17.9 , 第二种是稳定版本 9.16.11,我使用的是该版本做为 Windows下的测试版本,第三种版本是 9.11.27 做为一种稳定的老旧版本,已经中止了更新维护。

安装步骤

1.下载完成以后,须要安装的文件是一个压缩文件 ( BIND9.16.11.x64.zip ),在 Windows下解压以后便可正常运行。下图为解压以后的文件目录。

2.使用管理员权限打开 BINDInstall.exe 文件,进入到界面的安装步骤中。未使用管理员权限打开该文件可能会带来安装过程当中的错误。

3.在下边的图片请选择:

  • Keep Config Files After UninstallStart BIND Service After Install 以及 Automatic Startup 选项,确保可以在设备重启以后DNS服务能够正确被运行。
  • 保留 Service Account Name 为默认值不要更改,更改为其余的字符串会发生错误。
  • 输入一个默认密码进行安装

4.正确配置以后会提示你安装 Microsoft Visual C++ 2017, 若是已经安装请单击 修复 保证安装的环境是正确的,若是系统环境中没有该运行的环境请按照提示进行安装。

5.安装成功以后会提示:

6.将全部的工具加入到Windows环境变量中。

右键单击 “此电脑”,单击 “属性”,单击“高级”,单击“环境变量”。

找到 Path 的环境变量,双击并加入新的路径: C:\Program Files\ISC BIND 9\bin

验证:

  • 在命令行界面输入: dig

    C:\Users\DoHeras>dig
    ; <<>> DiG 9.16.11 <<>>
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34160
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;.                              IN      NS
    
    ;; ANSWER SECTION:
    .                       4502    IN      NS      a.root-servers.net.
    .                       4502    IN      NS      g.root-servers.net.
    .                       4502    IN      NS      l.root-servers.net.
    .                       4502    IN      NS      c.root-servers.net.
    .                       4502    IN      NS      d.root-servers.net.
    .                       4502    IN      NS      b.root-servers.net.
    .                       4502    IN      NS      k.root-servers.net.
    .                       4502    IN      NS      h.root-servers.net.
    .                       4502    IN      NS      i.root-servers.net.
    .                       4502    IN      NS      j.root-servers.net.
    .                       4502    IN      NS      e.root-servers.net.
    .                       4502    IN      NS      m.root-servers.net.
    .                       4502    IN      NS      f.root-servers.net.
    
    ;; Query time: 31 msec
    ;; SERVER: 172.16.2.1#53(172.16.2.1)
    ;; WHEN: Thu Jan 28 18:34:42 中国标准时间 2021
    ;; MSG SIZE  rcvd: 239

3.2 BIND 9 在 Windows环境的配置

区别于旧版的 ISC BIND 服务,旧版的软件安装在 C:\Windows\System32\dns中,新版软件安装的目录则在 C:\Program Files\ISC BIND 9,所以新版软件的环境配置相比旧版的直接在系统目录下安装更加复杂。

步骤

1.安装结束以后,进入到安装目录 C:\Program Files\ISC BIND 9\bin 下运行 rndc-config.exe 来生成一个 rndc.key。这个 key 是 BIND 9.x版本的新功能,是有关DNS更新以及更新时加密处理的,跟咱们我的用户无太大关系,不过基于兼容性,仍是照作。 这个 key 生成的路径为: C:\Program Files\ISC BIND 9\etc , 同时这个文件夹也是用来存放 BIND 服务的配置文件的。

生成后的 key 显示以下:

![06](../DNS 解析/DNS:BIND/06.png)

2.配置一个 named.conf 文件, 同时这个文件也是 BIND 的配置文件,目前配置文件的内容先简单以下:

options {

// zone文件的位置

directory "C:\Program Files\ISC BIND 9\etc";

// 没法解析的域名就去查询ISP提供的DNS

// 在下面的IP地址位置上填写ISP的DNS地址

forwarders {

//这里是你本机IP或者127.0.0.1

127.0.0.1;

};

// 仅容许本机与192.168.0.0网段内的机器查询

allow-query {

127.0.0.1;

192.168.0.0/16;

10.231.0.0/16;

10.232.0.0/16;

};

};

// 根DNS

zone "." {

type hint;

file "root.zone";

};

// localhost

zone "localhost" IN {

type master;

file "localhost.zone";

allow-update { none; };

};

// localhost的反向解析

zone "0.0.127.in-addr.arpa" {

type master;

file "localhost.rev";

};

// 123.com是咱们为本身的域的正向解析配置

zone "123.com" IN {

type master;

file "123.com.zone";

};

// whalecloudvcenter.com是咱们为本身的域的正向解析配置

zone "whalecloudvcenter.com" IN {

type master;

file "whalecloudvcenter.com.zone";

};

// whalecloudvcenter.com的反向解析

zone "100.168.192.in-addr.arpa" {

type master;

file "whalecloudvcenter.com.rev";

};

3.从ISC网站上下载相关的named文件到本地上,网址为: https://www.internic.net/domain/named.root 去下载 name.root 文件。 在https://www.internic.net/domain/root.zone 网址中下载root.zone 文件。并将这两个文件拷贝到C:\Program Files\ISC BIND 9\etc 目录。

4.建立一个新的 localhost.zoneC:\Program Files\ISC BIND 9\etc 中来配置 localhost的正向解析。

$TTL 1D

@ IN SOA localhost. root.localhost. (

2007091701 ; Serial

30800 ; Refresh

7200 ; Retry

604800 ; Expire

300 ) ; Minimum

IN NS localhost.

localhost. IN A 127.0.0.1

5.建立一个新的 localhost.rev 文件到 C:\Program Files\ISC BIND 9\etc 中来配置 localhost 的反向解析。

$TTL 1D

@ IN SOA localhost. root.localhost. (

2007091701 ; Serial

30800 ; Refresh

7200 ; Retry

604800 ; Expire

300 ) ; Minimum

IN NS localhost.

1 IN PTR localhost.

6.建立一个新的 123.com.zone 文件到 C:\Program Files\ISC BIND 9\etc 中来为本身的域名来配置正向解析。

123.com. IN SOA ns1.123.com. root.123.com. (

2007091701 ; Serial

30800 ; Refresh

7200 ; Retry

604800 ; Expire

300 ) ; Minimum

IN NS ns1.123.com.

* IN A 127.0.0.1

7.建立一个新的whalecloudvcenter.com.zoneC:\Program Files\ISC BIND 9\etc 中配置本身的服务器域名的正向解析服务。

whalecloudvcenter.com. IN SOA ns1.whalecloudvcenter.com. root.whalecloudvcenter.com. (

2007091701 ; Serial

30800 ; Refresh

7200 ; Retry

604800 ; Expire

300 ) ; Minimum

IN NS ns1.whalecloudvcenter.com.

* IN A 192.168.100.1

8.建立一个新的 whalecloudvcenter.com.revC:\Program Files\ISC BIND 9\etc 中配置本身服务器域名的反向解析服务。

$TTL 1D

@ IN SOA whalecloudvcenter.com. root.whalecloudvcenter.com. (

2007091701 ; Serial

30800 ; Refresh

7200 ; Retry

604800 ; Expire

300 ) ; Minimum

IN NS whalecloudvcenter.com.

1 IN PTR whalecloudvcenter.com.

目前咱们在 C:\Program Files\ISC BIND 9\etc 目录下的文件有:

9.在刚才安装的过程当中,系统已经默认建立了一个新的用户 named, 这个用户用来构建 DNS 服务,下一步须要作到的是为当前的文件夹配置权限,在目录 C"\Program Files\ISC BIND 9 配置全部的权限为: 所有容许。

这步的操做须要对全部在 “组或用户名” 下的全部用户和组添加权限,由于不知道新建立的用户处于哪个分组下,所以须要所有进行建立。

10.在“系统服务”中配置 ISC BIND 9 Service 的相关配置。先打开管理命令行,并输入 services.msc,回车。

进入到 “管理服务” 页面以后,找到 ISC BIND 服务以后双击改变属性。在下图中,请确认使用帐户 ./named 用户进行登陆,密码在默认的时候已经被配置了,不须要进行更改。

11.最后,完成全部文件的建立和配置更新以后,能够运行本机的DNS解析服务了,有两种启动方式:

  • 第一种:在“管理服务”右键单击 ISC BIND 服务进行启动
  • 第二种:使用命令行(管理员模式)启动当前服务

这里主要介绍第二种启动方式:

启动当前服务:

C:\Program Files\ISC BIND 9\bin>net start named
ISC BIND 服务正在启动 .
ISC BIND 服务已经启动成功。

结束当前服务:

C:\Program Files\ISC BIND 9\bin>net stop named
ISC BIND 服务正在中止.
ISC BIND 服务已成功中止。

TroubleShooting

遇到若是现出“ Window 没法启动 ISC BIND 服务 错误1067

解决办法:

  • 检查全部的文件是否所有导入到 C:\Program Files\ISC BIND 9\etc中,须要包含的文件包括:
    • localhost.rev
    • localhost.zone
    • named.conf
    • named.root
    • rndc.key
    • root.zone
  • 检查目录 C:\Program Files\ISC BIND 9 目录的权限是否改成所有受权的权限
  • 程序意外结束致使named.pid文件没有正确删除
    • 检查目录 C:\Program Files\ISC BIND 9\etc 并删除 named.pid文件
    • 再次启动ISC BIND服务


4. Debian Server 下的安装配置

4.1 Debian 9.11.0 下载

新版的 Debian 的 Release 版本的连接: https://www.debian.org/releases/

历史的 Debian 版本下载: http://cdimage.debian.org/cdimage/archive/

其中,目前Virtual Private Server 经常使用的版本为:
Debian 7:Debian 7.8
Debian 8:Debian 8.0/8.2/8.5
Debian 9:Debian 9.1/9.9/9.11

最终考虑其适配的设备的范围以及稳定性,牺牲最新的 Debian特性以及架构,选择较为稳定的版本 Debian 9.11 进行下载,其磁力连接的下载地址为: http://bttracker.debian.org:6969/stat

下载的文件为: [Debian_9.11][magnet:?xt=urn:btih:5c9634e7805c8a5049afa92f99946edaa574d449&dn=debian-9.11.0-amd64-DVD-1.iso&tr=udp://bttracker.debian.org:6969&tr=http://bttracker.debian.org:6969/announce]

版本信息:

NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch```

4.2 安装Debian

安装的步骤省略...或者留到之后进行更补... 配置安装实体机与虚拟机的安装选项配置保持一致便可。

4.3 安装 BIND 9 服务到 Debian Server

在 Debian9 中查找和重启当前 BIND9 服务的命令是: sudo systemctl status bind9sudo systemctl restart bind9

4.3.1 NS1 初始配置流程

1.Debian 的默认是没有安装sudo 工具的,这很是不方便,咱们先安装sudo 工具,安装以前由于 Debian 9 的特性,须要修改apt 默认的源,其源文件为:/etc/apt/resources.list

doheras@debian:~$ su -
Password
root@debian:~# vi /etc/apt/resources.list
# 163
deb http://mirrors.163.com/debian/ stretch main
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb http://httpredir.debian.org/debian stretch-backports main contrib non-free
# VirtualBox
deb http://download.virtualbox.org/virtualbox/debian stretch contrib
root@debian:~# apt-get update
root@debian:~# adduser doheras sudo

2.如今安装 sudo 工具

root@debian:~# apt-get install sudo -y

3.使用 sudo 工具 安装 BIND 9 并启动 BIND 9 服务

doheras@debian:~$ sudo apt install bind9 bind9utils bind9-doc
... 
... Wait for Installation Complete
...
doheras@debian:~$ service /etc/bind/named start

4.将 BIND 9 设置成为 IPv4 模式,将下列的 OPTIONS = "-u bind" 设置成 OPTIONS = -u bind -4s, 并重启BIND服务。

doheras@debian:~$ sudo nano /etc/default/bind9
# startup options for the server
OPTIONS="-u bind -4"
doheras@debian:~$ sudo systemctl restart BIND9

5.请参照以前配置 Windows BIND 服务的流程,咱们须要先配置 Debian 下的 BIND 服务 namemd.conf.options。配置这个文件须要用到管理员权限,完成以后这些配置指定只有您本身的服务器(受信任的服务器)才能查询您的DNS服务器的外部域 (Domain)。

doheras@debian:~$ sudo nano /etc/bind/named.conf.options
acl "trusted" {
        172.16.2.11;
        172.16.2.12;
        172.16.2.4;
        172.16.2.5;
        172.16.2.6;
};

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //=====================================================================$
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //=====================================================================$
        dnssec-validation auto;
        recursion yes;
        allow-recursion {trusted;};
        listen-on {172.16.2.11;};
        allow-transfer {none;};
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
        forwarders {
                8.8.8.8;
                8.8.4.4;
                0.0.0.0;
        };
};

6.更改完 named.conf.options 文件以后,须要更改 named.conf.local 文件来配置正向和反向代理,通常来讲这个文件用来配置 DNS Zone。由于咱们设定的主域是nyc3.example.com,因此咱们须要设定一个正向区域,用来转发和映射域名 nyc3.example.com到子网 10.120.0.0/18

zone "nyc3.example.com" {
    type master;
    file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
    allow-transfer { 172.16.2.12; };           # ns2 private IP address - secon$
};

7.步骤6设定了DNS Zone 的正向区域,如今设定反向区域。若是您的服务器跨越多个专用子网,但位于同一数据中心,请确保为每一个不一样的子网指定其余区域和区域文件。 完成全部所需区域的添加后,保存并退出named.conf.local文件。如今,咱们的区域已在BIND中指定,咱们须要建立相应的正向和反向区域文件。

zone "16.172.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.16.172";  # 10.128.0.0/16 subnet
    allow-transfer { 172.16.2.12; };  # ns2 private IP address - secondary
};

8.建立一个正向转发区域文档,转发区域文件是 BIND 用来转发DNS和查找DNS的文件,也就是说当DNS Server收到了一个DNS请求的时候,用来查找 Domain Name和对应IP之间的关系。

在前边的 步骤6 建立的正向区域文件的对应路径是 /etc/bind/zones,咱们建立一个这样的文件夹。

doheras@debian:~$ sudo mkdir /etc/bind/zones

建立完成以后,须要新建一个zone file,在刚刚新建的文件夹中。

doheras@debian:~$ sudo cp /etc/bind/db.local /etc/bind/zones/db.nyc3.example.com

9.进入到修改/etc/bind/zones/db.nyc3.example.com 区域文件中修改为下边给出的文件内容:

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com.   (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; name servers - NS records
    IN      NS      ns1.nyc3.example.com.
    IN      NS      ns2.nyc3.example.com.

; name servers - A records
ns1.nyc3.example.com.       IN      A    172.16.2.11
ns2.nyc3.example.com.       IN      A    172.16.2.12

; 172.16.0.0/18 - A records
host1.nyc3.example.com.        IN      A      172.16.2.4
host2.nyc3.example.com.        IN      A      172.16.2.5
host3.nyc3.example.com.        IN      A      172.16.2.6

10.如今建立反向区域的文档 ,反向区域文件是咱们为反向DNS查找定义DNS PTR记录的地方。咱们须要建立的文件为: /etc/bind/zones/db.10.128 ,复制的源文件为: /etc/bind/db.127, 复制的命令为:

doheras@debian:~$ sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128
doheras@debian:~$ sudo nano /etc/bind/zones/db.10.128

建立完成以后的内容以下:

其中 PTR 的顺序为子网IP地址的倒序: 172.16.2.11 -> 11.2.16.172

; BIND reverse data file for local loopback interface
;
;
$TTL    604800
@       IN      SOA     nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

; PTR Records
11.2   IN      PTR     ns1.nyc3.example.com.    ; 172.16.2.11
12.2   IN      PTR     ns2.nyc3.example.com.    ; 172.16.2.12

4.2    IN      PTR     host1.nyc3.example.com.  ; 172.16.2.4
5.2    IN      PTR     host2.nyc3.example.com.  ; 172.16.2.5
6.2    IN      PTR     host3.nyc3.example.com.  ; 172.16.2.6

11.如今咱们已经完成了全部文件的建立,如今须要检查建立的规则是否知足要求:

检查文件 named.conf.options的命令

doheras@debian:~$ sudo named-checkconf

检查 正向区域 (Forward Zone) 是否知足配置的要求

doheras@debian:~$ sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com

检查 反向区域 (Reverse Zone) 是否知足配置的要求

doheras@debian:~$ sudo named-checkzone 16.172.in-addr.arpa /etc/bind/zones/db.16.172

12.重启 BIND 服务 和 配置 UFW 服务在Debian 9服务器上以及容许BIND服务

  • 重启 bind9 服务来使以前的配置生效
doheras@debian:~$ sudo systemctl restart bind9
  • 安装和配置 UFW 服务在Debian 9 服务器上
#第一步
#安装UFW服务
doheras@debian:~$ sudo apt install ufw
#第二步
#须要配置一下IPv6的网络地址 若是您的Debian服务器已启用IPv6,请确保UFW配置为支持IPv6,以便它将管理IPv4以外的IPv6防火墙规则。请确保IPv6=yes
doheras@debian:~$ sudo nano /etc/default/ufw
...
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=yes
...
#第三步
#配置Policy 默认的配置是 全部链接进来的不能被容许 全部出去的都被容许
doheras@debian:~$ sudo ufw default deny incoming
doheras@debian:~$ sudo ufw default allow outgoing
#第四步
#容许SSH Connection
doheras@debian:~$ sudo ufw allow ssh
#第五步
doheras@debian:~$ sudo ufw enable
  • 容许 BIND Service 从防火墙上经过(我也搞不清楚究竟是哪个...感受服务名是否是不须要区分大小写)
doheras@debian:~$ sudo ufw allow bind9
doheras@debian:~$ sudo ufw allow Bind9

4.3.2 NS2 初始配置流程

1.配置的流程与 NS1 配置流程基本上相同,由于 NS2 做为 NS1 的备用DNS服务器,配置须要保持同样,这里附上详细的每一个文件的配置内容。

named.conf.options

doheras@debian:~$ sudo nano /etc/bind/named.conf.options
acl "trusted" {
        172.16.2.11;
        172.16.2.12;
        172.16.2.4;
        172.16.2.5;
        172.16.2.6;
};

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //=====================================================================$
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //=====================================================================$
        dnssec-validation auto;
        recursion yes;
        allow-recursion {trusted;};
        listen-on {172.16.2.12;}; # 这个地方要换成ns2的网络地址
        allow-transfer {none;};
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
        forwarders {
                8.8.8.8;
                8.8.4.4;
                0.0.0.0;
        };
};

named.conf.local

在主DNS服务器上定义与主域对应的从域。注意,类型是slave,文件不包含路径,而且有一个主指令,应该设置为主DNS服务器的私有IP地址。若是在主DNS服务器中定义了多个反向区域,请确保将它们所有添加到此处

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "nyc3.example.com" {
    type slave;
    file "db.nyc3.example.com";  # zone file path
    masters { 172.16.2.11; };           # ns1 private IP address - secon$
};

zone "16.172.in-addr.arpa" {
    type slave;
    file "db.16.172";  # 172.16.2.0/24
    masters { 172.16.2.11; };  # ns1 private IP address - secondary
};

2.根据 NS1 配置流程安装和配置 UFW 服务,并开启 UFW 服务。

$ sudo ufw allow Bind9

4.4 配置 Client

说明: Client_n 为以上配置的 Host_n,其IPv4地址须要与上边的保持一致。

4.4.1 Ubuntu 20.04 客户端

1.首先,使用ip address命令查询私网子网,找到与私网关联的设备。

$ ip address show to 172.16.2.0/24

会有一个输出:

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 172.16.2.4/24 brd 172.16.2.255 scope global dynamic noprefixroute ens33
       valid_lft 85520sec preferred_lft 85520sec

2.在 Ubuntu 的路径 /etc/netplan 路径下找到 *-private-nameservers.yaml 文件,其文件名可能会根据不一样的设备而不一样,请仔细检查该路径下的文件进行更改,好比说在个人虚机里个人文件就是 01-private-nameservers.yaml

$ sudo nano /etc/netplan/00-private-nameservers.yaml

内容为:

network:
    version: 2
    ethernets:
        ens33:                                 # Private network interface
            nameservers:
                addresses:
                - 172.16.2.11                # Private IP for ns1
                - 172.16.2.12                # Private IP for ns2
                search: [ nyc3.example.com ]  # DNS zone

3.完成配置以后,使用下边的命令让 NetPlan 采用新的配置,若是存在网络问题那么新的配置就会中断。若是你想要接收当前配置,那么就输入 Enter

$ sudo netplan try
Do you want to keep these settings?


Press ENTER before the timeout to accept the new configuration


Changes will revert in 117 seconds

4.如今,检查系统的DNS解析器以肯定您的DNS配置是否已应用

$ sudo systemd-resolve --status

正确的内容会显示你刚刚配置的 DNS Server 和 DNS Domain

如今能够正确的使用DNS Server做为域名解析了~

4.4.2 CentOS 8 客户端

1.编辑/etc/sysconfig/network-scripts/ifcfg-ens33文件。您可能必须用当前主机的主网络接口的名称替换ens33,由于本次模拟搭建的环境为虚拟机环境,因此必须查看网卡是否对应。

查看网络配置,从下边的文字能够看出虚机的IP地址为: 172.16.2.6/24,对应的网卡名称为: ens33

CentOS8$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:e6:20:79 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.6/24 brd 172.16.2.255 scope global dynamic noprefixroute ens33
       valid_lft 84375sec preferred_lft 84375sec
    inet6 fe80::22ec:5ec9:b729:d16d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:3b:9a:58 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:3b:9a:58 brd ff:ff:ff:ff:ff:ff

所以,修改的文件名称为 /etc/sysconfig/network-scripts/ifcfg-ens33

CentOS8$ sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33

将上述打开的文件更改成:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"  # 取消 DHCP 服务, 更改成 Static IP 模式
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="2e9c162d-fbed-4f65-8a42-e69285538ac2"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="172.16.2.6"   # IP Address
NETMASK="255.255.255.0"   # NetMask
GATEWAY="172.16.2.1"  # Gateway / Router
DNS1="172.16.2.11"    # ns1的IP地址
DNS2="172.16.2.12"	  # ns2的IP地址
DOMAIN='nyc3.example.com'

2.重启NetworkManager服务

CentOS8$ sudo systemctl restart NetworkManager.service

3.安装 bind-utils

CentOS8$ sudo yum install bind-utils

4.查看 resolv.conf 确认配置是否生效

CentOS8$ cat /etc/resolv.conf
# Generated by NetworkManager
search nyc3.example.com
nameserver 172.16.2.11
nameserver 172.16.2.12

4.5 测试客户端

4.5.1 Forward Lookup Test

在客户端 (Host) 输入如下命令:

CentOS8$ nslookup host1

正确输出:

Server:		172.16.2.11
Address:	172.16.2.11#53

Name:	host1.nyc3.example.com
Address: 172.16.2.4

4.5.2 Reverse Lookup

在客户端 (Host) 输入如下命令:

CentOS8$ nslookup 172.16.2.11

正确输出:

11.2.16.172.in-addr.arpa   name = host1.nyc3.example.com.

4.6 维护 DNS 配置信息

再完成上边的任务以后,咱们已经搭建了一个简单的 DNS 服务器 在虚拟机网络上,如今的任务是咱们须要维护咱们的 DNS记录来保证服务器的运做稳定和便于维护,这个功能能够及时、有效地反映服务器的环境以及运行状况。

4.6.1 添加一个新的Host到当前的BIND配置中

4.6.1.1 Primary Server - ns1
  • 第一步: 将新主机的私有IP地址添加到受信任的ACL中(named.conf.options)。
  • 第二步: 更改 Primary Server下的 db.nyc3.example.com 文件, 为新主机添加一条 A 记录,增长Serial的值;格式根据以前的格式来增长便可。
  • 第三步:更改 Primary Server下的 db.16.172 文件,为新主机增长一条新的 PTR 记录,增长 Serial 的值,格式根据以前的格式来调整便可。
  • 第四步:运行以前的配置过程的全部检查步骤。
  • 第五步:从新启动 BIND9 服务。
4.6.1.2 Secondary Server - ns2
  • 第一步: 将将新主机的私有IP地址添加到受信任的ACL中(named.conf.options)。
  • 第二步: 检查配置文件是否正确: sudo named-checkconf
  • 第三步: 重启 Secondary Server的 BIND9 服务
4.6.1.3 Host-Client 配置
  • 添加新的Host(客户端) 的流程就参照以前的步骤

4.6.2 DNS日志记录

从上边来看,咱们能够为 DNS Server 增长一个 logging模块,添加的内容为下边:

logging{

	channel default_logfile {
		file "/var/log/bind/example_1.log" versions 3 size 1m;
		print-category yes;
		print-severity yes;
		print-time yes;
		severity info;
	};

	channel default_querylogfile{
		file "/var/log/bind/query.log" versions 3 size 1m;
		print-category yes;
		print-severity yes;
		print-time yes;
		severity info;
	};

	channel default_databaselogfile{
		file "/var/cache/bind/data/database.log" versions 3 size 3m;
		print-time yes;
		print-severity yes;
		severity debug;
	};

	category default {
		default_logfile;
	};
	category queries {
		default_querylogfile;
	};
	category database {
		default_databaselogfile;
	};
	category unmatched { null; };
};

5. DNS Server的压力测试 - queryperf 工具

对于普通的DNS服务器来讲,根据进行域名解析的过程不一样,被分红了两种解析模式:递归查询和迭代查询。简单来比较这两个的区别:

递归查询

递归查询由客户端向本地域名服务器发送请求,而后等待本地域名服务器返回结果。

若是客户端向一个本地域名服务器请求一个域名的查询操做可是本地域名服务器并不知道查询域名的IP地址,那么本地域名服务器就会模仿扮演成客户端向根域名服务器发送继续查询的请求而不是让主机本身再向根域名服务器发送进行下一步的查询,直到查询到结果或者查询完全部的根域名服务器;

因此 查询的结果就是 一个特定的IP地址或者是未找到域名的报错信息。

迭代查询

若是根域名服务器收到了本地域名服务器发送的迭代查询请求报文时,要么给出所要查询的IP地址,要么返回引导的域名服务器进行查询,因此查询的动做若是不能给出最终的结果,那么就是给客户端返回一个DNS服务器列表供客户端继续查询。

从上边的概念来看,实现递归的DNS服务器性能评价更加困难,由于被测试的DNS服务器有可能与其余的根域名服务器或者是其余权威服务器进行查询交互,或者是管理以及维护以前了解到的域名数据缓存。

安装 queryperf

【等待补充】

配置 queryperf

【等待补充】

6. DNS Server的安全性配置

首先, BIND9 的 options 提供的 allow-query 参数能够对访问DNS解析服务器的客户端地址和网段进行限制,从而达到对陌生客户端和恶意IP地址的封禁。

named.conf.options 中的参数 dnssec-enablednssec-validation 等配置参数都是维护 DNS 服务器安全性的很是重要的配置参数,DNS 的设计起始于上世纪 80 年代,当时互联网规模小得多,安全性并不是首要设计考虑因素。当DNS的递归解析器(DNS Resolver )向权威域名服务器发送查询请求的时候,解析器没法验证响应的真实性。解析器只须要检查响应的IP地址与解析器发送初始查询的IP地址是否相同。 可是, 这种检查机制存在一个很是严重的问题:权威域名服务器的请求包的源地址很是容易被伪造和仿冒,攻击者很容易冒充来自权威域名服务器的响应,而后假装成解析器最初查询的权威域名服务器,所以能够很轻松将用户重定向到其余的恶意网站。

由于须要考虑到递归解析器可能被入侵的场景,域名解析器有一种缓存的机制用来加速解析流程,其原理是从权威域名服务器和根解析器时候收到的上次DNS数据存储到本地来加速下一次应答,避免查询一个或者多个权威服务器引起的服务延迟。然而,依靠缓存存在一个缺点,若是攻击者发送的假冒的DNS权威域名服务器响应被接受,那么其缓存就会被一直缓存在递归解析服务器中,所以以后全部的查询DNS Server 的主机都会接收到欺诈性DNS数据。若是用户访问银行网站,会怎么样?用户设备在其配置的递归域名服务器中查询银行网站的 IP 地址。不过,攻击者能够经过伪造IP地址向解析器注入恶意的缓存数据,届时 IP 地址并不是指向目标合法网站,而是指向攻击者建立的某个网站。这个欺诈网站冒充银行网站,看上去毫无差异。用户会毫无防备地输入名称和密码,这就致使用户在不经意间向攻击者透露了本身的银行凭证,攻击者能够冠冕堂皇地以用户的身份登陆合法银行网站进行转帐或执行其余未经受权的操做。

对于解决这个问题, BIND 提供了一种名叫 DNSSEC 的安全扩展服务以及配套的密钥生成工具供网络人员使用。

DNSSEC

DNSSEC 采用基于公钥加密的数字签名技术来增强 DNS的验证强度。 DNSSEC 并不是对DNS查询和响应的过程进行传输加密,而是数据全部者对 DNS 数据进行签名加密。

每个 DNS Zone 在配置的时候 BIND 服务会为其建立一个公钥和私钥的配对的秘钥对。 DNS zone 的全部者使用该区域的私钥对区域内的DNS数据进行签名,并为这些数据生成签名。 DNS 解析器生成的 公钥 对该区域内全部的 DNS数据验证真实性。若是有效,证实DNS数据合法,则将全部的DNS数据返回给用户。若是没有经过验证,解析器会认为发生了攻击,丢弃数据并为用户返回错误。

DNSSEC 在 DNS协议中新增长的两个安全的功能:

  • 数据来源验证 - DNS 解析器经过加密的方式验证收到的数据是否确实来自其认定的数据传送区域。
  • 数据完整性保护 - DNS 解析器能够确信,自区域全部者使用私钥第一次进行数字签名,数据在传输过程当中并未遭到修改。

每一个zone都会发布一个公钥,递归解析器能够检索公钥以验证区域中的数据,区域的公钥也必须通过签名。

DS-records (Delegation Record)

DS-records 用来保证密钥分发的安全和DNS消息内容的分发安全;

常见的 DS-records的分发格式为:

  • 关键字标签 (Key Tags):一个简短的数值,能够帮助快速识别所引用的DNSKEY记录;
  • 算法 (Algorithm):引用 DNSKey-record 的密码学算法;
  • 摘要类型 (Digest Type):用于建立摘要值的加密哈希算法;
  • 摘要 (Digest):引用的DNSKEY记录的加密哈希值;
ZONE 文件安全配置分析

在 Debian9 下的全部的数据库文件都存储到了配置的文件夹中,其路径为:/etc/bind,每建立一个新的 ZONE 的配置文件都会在当前路径下建立一个新的db文件来记录资源地址和域名之间的映射关系,为了了解 DNSSEC在其中究竟是怎么应用的,咱们能够去分析这些文件的DNSSEC公钥配置来明确 DNSSEC 在其中的配置原理。

在 Debian9 DNS服务器上配置密钥 - NS

1.首先须要在 named.conf.options 文件以及引用文件中的 options 加入一下配置:

dnssec-enable yes;
dnssec-validation yes;
    
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";

2.肯定咱们保存密钥的路径,通常来讲保存 zone 的数据库文件的路径为: /var/cache/bind,这个地方保存着 zone 配置的数据库文件。咱们在这个地方新建一个文件夹 keys,而后找到 dnssec-keygen 的配置文件夹,调用建立密钥的命令:

$ find / -name "dnssec-keygen"
/usr/sbin/dnssec-keygen
$ cd /var/cache/bind/keys

建立密钥的方式以下:

-a <algorithm>:
    RSA | RSAMD5 | DSA | RSASHA1 | NSEC3RSASHA1 | NSEC3DSA |
    RSASHA256 | RSASHA512 | ECCGOST |
    ECDSAP256SHA256 | ECDSAP384SHA384 |
    DH | HMAC-MD5 | HMAC-SHA1 | HMAC-SHA224 | HMAC-SHA256 | 
    HMAC-SHA384 | HMAC-SHA512
   (default: RSASHA1, or NSEC3RSASHA1 if using -3)
   
-b <key size in bits>:
    RSAMD5:	[512..4096]
    RSASHA1:	[512..4096]
    NSEC3RSASHA1:	[512..4096]
    RSASHA256:	[512..4096]
    RSASHA512:	[1024..4096]
    DH:		[128..4096]
    DSA:		[512..1024] and divisible by 64
    NSEC3DSA:	[512..1024] and divisible by 64
    ECCGOST:	ignored
    ECDSAP256SHA256:	ignored
    ECDSAP384SHA384:	ignored
    HMAC-MD5:	[1..512]
    HMAC-SHA1:	[1..160]
    HMAC-SHA224:	[1..224]
    HMAC-SHA256:	[1..256]
    HMAC-SHA384:	[1..384]
    HMAC-SHA512:	[1..512]
    (if using the default algorithm, key size
    defaults to 2048 for KSK, or 1024 for all others)
# 执行建立一个 ZSK (Zone Signing Key) 的命令 注意必定要为 密钥配置
/var/cache/bind/keys$ sudo /usr/sbin/dnssec-keygen -L 3600 -a NSEC3RSASHA1 -b 2048 -n ZONE example.com
Generating key pair....................................................................................................+++++ .......+++++ 
Kexample.com.+007+59870

# 执行建立一个 Key Signing Key 的命令
/var/cache/bind/keys$ sudo /usr/sbin/dnssec-keygen -L 3600 -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com
Generating key pair......................................................................................................................++++ ..............................................++++ 
Kexample.com.+007+01143

3.建立完密钥以后,如今该文件夹下边存在两组公钥和私钥,这两组公钥和私钥建立完成以后,已经建立在了当前的目录下 /var/cache/bind/keys 下,如今须要建立的公钥的引用信息导入到 ZONE 文件中让其生效。在这个过程当中,须要明确的是新建的 ZONE 文件是以前建立的 db.nyc3.example.com ,因此须要将以前建立的ZONE文件引用新建立的两个公钥,Zone Signing KeyKey Signing Key

Debian9 默认的BIND软件的默认安装目录是:/etc/bind,新建立的 ZONE 配置文件的目录是: /etc/bind/zones,如今咱们须要将刚才建立的密钥目录 /var/cached/bind/keys 复制到 /etc/bind/zones 目录下,以便随后去调用密钥来进行 ZONE 绑定。这里边有一个BIND9 设定的环境BUG,就是在 ZONE 文件引用的 keys 必须保存在和 ZONE文件相同的目录下,

$ sudo cp /var/cached/bind/keys/example*.* /etc/bind/zones

4.在/etc/bind/zones 中,咱们须要将ZONE 文件引用新生成的 KSK 和 ZSK, 以后进行 ZONE 绑定:

/etc/bind/zones$ sudo nano nyc3.example.com  # 更改后的文件 nyc3.example.com 内容以下
;
; BIND data file for local loopback interface
;
; Import ZSK / KSK
$INCLUDE Kexample.com.+007+01143.key
$INCLUDE Kexample.com.+007+59870.key
$TTL	604800
@	IN	SOA	ns1.nyc3.example.com. admin.nyc3.example.com.   (
			      3		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
; name servers - NS records
    IN      NS      ns1.nyc3.example.com.
    IN      NS      ns2.nyc3.example.com.

; name servers - A records
ns1.nyc3.example.com.       IN      A    172.16.2.11
ns2.nyc3.example.com.       IN      A    172.16.2.12

; 10.128.0.0/18 - A records
host1.nyc3.example.com.        IN      A      172.16.2.4
host2.nyc3.example.com.        IN      A      172.16.2.5
host3.nyc3.example.com.        IN      A      172.16.2.6

引用完成以后,如今须要使用 /usr/sbin/dnssec-signzone 命令来签名 ZONE,使刚新建的公钥在ZONE上生效。

5.使用 /usr/sbin/dnssec-signzone 来签名 ZONE,生成新的signed 文件。具体的参数配置文件能够访问 dnssec-signzone,下边列举了我在这部分用到的参数以及相关参数配置的含义。

/etc/bind/zones$ sudo /usr/sbin/dnssec-signzone -AA -n 3 -3 $(head -c 1000 /dev/urandom | sha1sum | cut -b 1-16) -N INCREMENT -o example.com -t db.nyc3.example.com 
Verifying the zone using the following algorithms: NSEC3RSASHA1.
Zone fully signed:
Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
                         ZSKs: 1 active, 0 stand-by, 0 revoked
db.nyc3.example.com.signed
Signatures generated:                       17
Signatures retained:                         0
Signatures dropped:                          0
Signatures successfully verified:            0
Signatures unsuccessfully verified:          0
Signing time in seconds:                 0.011
Signatures per second:                1439.092
Runtime in seconds:                      0.016
-n ncpus
	Specifies the number of threads to use. By default, one thread is started for each detected CPU.
-3 salt
	Generate an NSEC3 chain with the given hex encoded salt. A dash (salt) can be used to indicate that no salt is to be used when generating the NSEC3 chain.
-A
	When generating an NSEC3 chain set the OPTOUT flag on all NSEC3 records and do not generate NSEC3 records for insecure delegations.
	Using this option twice (i.e., -AA) turns the OPTOUT flag off for all records. This is useful when using the -u option to modify an NSEC3 chain which previously had OPTOUT set.
-N soa-serial-format
	The SOA serial number format of the signed zone. Possible formats are "keep" (default), "increment" and "unixtime".
	"keep"
	Do not modify the SOA serial number.
	"increment"
	Increment the SOA serial number using RFC 1982 arithmetics.
	"unixtime"
	Set the SOA serial number to the number of seconds since epoch.
-o origin
	The zone origin. If not specified, the name of the zone file is assumed to be the origin.
-t
	Print statistics at completion.

在当前路径下:/etc/bind/zones,生成了多个新的文件

/etc/bind/zones$ ls
db.16.172                   Kexample.com.+007+01143.key
db.nyc3.example.com         Kexample.com.+007+01143.private
db.nyc3.example.com.signed  Kexample.com.+007+59870.key
dsset-example.com.          Kexample.com.+007+59870.private

运行完上边的命令以后,会生成几个新的文件,这些文件对接下来配置DNS权威域名服务器有帮助。至于反向解析DNS的配置咱们留到最后根据以前的配置流程再进行配置。

6.目前咱们已经建立了新的绑定ZONE 文件,生成新的 zone 文件的名字为 db.nyc3.example.com.signed,所以先来比较一下命令 dnssec-signzone 为新的文件增长了什么。

/etc/bind/zones$ diff db.nyc3.example.com db.nyc3.example.signed
1,29c1,284
< ;
< ; BIND data file for local loopback interface
< ;
< ; Import ZSK / KSK
< ;
< ; ZSK / KSK
< $INCLUDE Kexample.com.+007+59870.key
< $INCLUDE Kexample.com.+007+01143.key
< ;
< $TTL	604800
< @	IN	SOA	ns1.nyc3.example.com. admin.nyc3.example.com.   (
< 			      3		; Serial
< 			 604800		; Refresh
< 			  86400		; Retry
< 			2419200		; Expire
< 			 604800 )	; Negative Cache TTL
< ;
< ; name servers - NS records
<     IN      NS      ns1.nyc3.example.com.
<     IN      NS      ns2.nyc3.example.com.
< 
< ; name servers - A records
< ns1.nyc3.example.com.       IN      A    172.16.2.11
< ns2.nyc3.example.com.       IN      A    172.16.2.12
< 
< ; 10.128.0.0/18 - A records
< host1.nyc3.example.com.        IN      A      172.16.2.4
< host2.nyc3.example.com.        IN      A      172.16.2.5
< host3.nyc3.example.com.        IN      A      172.16.2.6
---
> ; File written on Sun Feb  7 06:08:22 2021
> ; dnssec_signzone version 9.10.3-P4-Debian
> example.com.		604800	IN SOA	ns1.nyc3.example.com. admin.nyc3.example.com. (
> 					4          ; serial
> 					604800     ; refresh (1 week)
> 					86400      ; retry (1 day)
> 					2419200    ; expire (4 weeks)
> 					604800     ; minimum (1 week)
> 					)
> 			604800	RRSIG	SOA 7 2 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					Rq5UwPjs2OB0rvGRGA4IP6AB5EzA5lRCF+ri
> 					L80hg3E3jskoFu9sPHiD77k9AXYJ7KccML/z
> 					4mc3vRFic6Ms2xFeaFaCswLRKzYWd3hMuJ2f
> 					x+5tiI/R6HGBqug1o7WRt53IEbaog8vgqM+r
> 					wg5DXjO2Lm5bh2RdvDE0YYRvgSwG/Jz3Fm9E
> 					HaPZKejkVcMh8NWHWTCnndkiq41t4BQOoQZu
> 					bGxJzZYCVz0i0aKNGrJUT/KS4HeclXTzOpfI
> 					FknBrUO8EkNJgK+pI9/CGnPva0wyIhqI8rQk
> 					dlbII/DbV7ySiQjMymcu9qAtmmK+NEbyyzhJ
> 					14Ti44Jb9R8rNNZGAQ== )
> 			604800	NS	ns1.nyc3.example.com.
> 			604800	NS	ns2.nyc3.example.com.
> 			604800	RRSIG	NS 7 2 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					08stTHG8TEB68mMYeot4zLQdK6sycq/rMvxH
> 					Cbv/ot2ef/Mv1qcYhW/faxhQ6Hl/qZALJ+v2
> 					6LFY3tpLbQ9Fua4oJ2yRFZUkKVy0B3h6PYPc
> 					Soc13cyhwcfydIm0BqI3iVk1icDVylRcDr+s
> 					RxWPY9Q931MTBGNexhEq4+dU7oBRkZ90sRXe
> 					G6wW057uRdvwn222f0tWehKqMSvZWu49MFxf
> 					dk5hGVICNtGyo1HZEBbYl+5gjMR/sEGoFqgy
> 					5j38LCUcVkjXY+Ahc33ZJhYlcR1g2CodswMz
> 					zCH4b2ETGPUxiHb8jwl41IHXB1fY/ZhUYVs4
> 					8J28j4ZhxU0nzjgMPQ== )
> 			3600	DNSKEY	256 3 7 (
> 					AwEAAdeakN3vO7Rm22Khq7sACpdiJ+fDvrq2
> 					lNWxiaszGw+66cZtolhOX0p31hpIw0ZgYHCA
> 					2hM9aChvgpxlfMxijPzgLBrjcqp5Q1O4U6HD
> 					oRa6USX0m6814tawIHK5WxTJYC8oMLuZxcH8
> 					mn6XV2hjHBG4Ish7TNdHpAdnrmgbpHx3pn9x
> 					EA5SkgkzypMcLKXpnTDcOnn5rh++KUGWKgdh
> 					f/GvH93iu9Oes/EYzYpnFxIsNz1uSRlFtXbI
> 					C+ug5LLKipRxqH+KlW67Fko/6GGvbIAjb3PA
> 					mCeE6ZHYu5xj/aoT5MYAZ/uOTB+Vzhh392Xx
> 					lPN0dq75W0BtWxKazLXNSd8=
> 					) ; ZSK; alg = NSEC3RSASHA1; key id = 59870
> 			3600	DNSKEY	257 3 7 (
> 					AwEAAccdkhssmVzMPNOrD7DaPnerx6VbQ2UE
> 					y0LVuqGAgmXaqb66JP8NDqYLxEPsNcxc7PSb
> 					/2+tcPGzjM+lDmpYpmr/PrD3FJga8P23V6R4
> 					htdGRY6h3uz2FA88Dyd0CJXpyHFPXFm8OlCw
> 					ZVbHChUADWL9ab4dqbUpoLUCwWNeej8gCMgr
> 					XU+doprSAGwVFzxMfliadMvaX8jIwQkAuACj
> 					+yHeh5aeGn+3g9Osm2JH9sQUDwVQVZp6i2xw
> 					VBnIq7ZIJp7WFISOT2WWjKOGJz3Tk/Qe37sJ
> 					c8peNfOMWHZlN1VyOj0OQA732MdjkD/hYq0M
> 					043PFqGb4hbrqzkiZ0JqioR1d0XPfaYQOoJU
> 					CRuqpQBzEUAXGp+3axx36MRyQ6mlJDG/PGsI
> 					4BgWhF4PjH8j7SPAD+VUUE62Cin5oUIYN5yU
> 					zx1aXUqcIxFhk37Yw1Y8KNO+54L+4SFJkeUO
> 					9YHhZXbnprJGcSKB4x+gTd7XYXfsGyd2WGv+
> 					GvptqcN4pBySe9WURs9v/1xPCbBRHFzq7u4I
> 					E9aWr8PCQoAn97iITIEqWJVZ8cpqSgql0WgT
> 					pOCXc9IzX7hFRBcQihdFTpTkTtpr7DKMnHQR
> 					dnECok6jY/PVf44WLyza5L4Gcrur3eFEITaJ
> 					iE7htDnI7CXTAxtRANF7ZADQSIdcFkSx+5b+
> 					1FpR
> 					) ; KSK; alg = NSEC3RSASHA1; key id = 1143
> 			3600	RRSIG	DNSKEY 7 2 3600 (
> 					20210309100822 20210207100822 1143 example.com.
> 					f1ciDXIjhF6dMV9A4ECaaXBg1OQKpCVczwff
> 					Z9oB5yfdGYVYVHq689jw9Avnmy1mevlyZ/0d
> 					VsxHjR5m5bgUnXun26IUmxtvOOA6Fr7pTbMU
> 					OujugesFbX0kY6auuMTbDdAnmxRe5T8OAhz/
> 					xRImQCPWwczJ+zhvFI4MCoe8LcKfjA1ffud9
> 					hTLBcjuonluCI8kutaKbYjvGCJuWxqcJSUHd
> 					2bF9h/rxb13irgBtuuLigA7z83a7f1rI+Ag3
> 					gDwYhz2oV846mrYLQguZsAKUJqVgvME9Typc
> 					pd0Xx02aDr/fx4zuoXCj+M0J1X6vucnKnW9A
> 					248dxOaE9g5HXwN2Fx8wblz3giF3mAY+WyXh
> 					h5uKCKEQfyEbt2fOt2e03DFGxpWUAJQP2jR3
> 					cMICFQHkUKboB9AfM1SpfpqPTQZoZwFoz4a9
> 					eZ5gvwge0z0l1lfLcQzhpzqRwpYVt78HpCpK
> 					2IKLU3tbftDQXDhhNuZdraI5F6Dj0W0h8cHj
> 					frjugFEQWy5SBb4FPNOxXIS1MyZ0MVTH3qTk
> 					8gxLcqShfb+1rlK0sLU/jMODJ3rxEZzgfW7i
> 					u4lDLMdOkqY5KrZtvH2q5hQoJ0/pS93AUHFe
> 					G1KFv+4sih6d1WSQIhanfefastE/l5hcvOZ9
> 					ppDV1azdNEnlchpuaViCXv9gAjksHKRrEW0= )
> 			3600	RRSIG	DNSKEY 7 2 3600 (
> 					20210309100822 20210207100822 59870 example.com.
> 					byMBp8tQaSmkD2VMMWqDqmhPcozCVSy7f80H
> 					afR5B6nEi23ItYTubpq1P4ODiYmTItmPHP/L
> 					5tOK6r6jlwnuZ0+YV1aFdGNpwOhsRK7b01Jv
> 					N5csU9P3vaGQ9MaRv1Q+hoXLf+yz5vPUFiNz
> 					qhQeuhzNBvIIyaB0Y9SjBW72lHLtTjLozpJe
> 					iyBQXhqaB4JV5mhMexCtlg78uf5a/ECihoLy
> 					nVs1e+pYaNYoVG7uKlVaT1uqBrX4MvXW9guN
> 					eAWK5U1ZPrzkyYqsx86+2vYveyykslC7HL+B
> 					NAHQPQ8PVwPabbrQbKbVjUdkPcj9iRMYkp3j
> 					Ug2goigJL1LJlWBsQA== )
> 			0	NSEC3PARAM 1 0 10 5B1E2A0938A7120B
> 			0	RRSIG	NSEC3PARAM 7 2 0 (
> 					20210309100822 20210207100822 59870 example.com.
> 					v1kpddaoUKrC3Ex9zV9LfdWqfOo1UY/KjKOK
> 					TXr1x8TJejaPJWtaChgV7DzzRv/ZlKZN+lS6
> 					lO/N1DPs9gwUWBRjA4+Dm6xqiRyoFevh5sbQ
> 					7SjvfcW0f2WW+xtrGbhIW8jVoSL//fHwXiKm
> 					GcjnF6nYVG3H7Zo26jO6PU/p377VgdTxZabr
> 					Kc697VGB/LeC1lMAFvByv36AcWZEEgs7QSTs
> 					gFTPNaUhuVveYKZ/KtHu+v6wrWwEVwYlVS5s
> 					jH9Nfk1KpxUDuljmayhomBNB1xFjFtUMUbNm
> 					+KhpWx0HIdIodubHOZaz4z2g8MY1R2etDiPz
> 					G7P1HF8cfh0NCZvyrw== )
> host1.nyc3.example.com.	604800	IN A	172.16.2.4
> 			604800	RRSIG	A 7 4 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					v9elCCsc0Ib22HVDyWzEOGvSalscBf+SlBCT
> 					3OB9oyZe7SH3Gcw727J55KDBjuQxp+9WqLhO
> 					DeibYisRGTHrmlOxYAQnVNT+4fL/puqNmJYi
> 					Y5IE8TiLc+9RfKm3QUP403jK8kF3aIybvuUm
> 					O9HgKUzH2eGBdwYLUrkwbg8MOJgiLCA7S3EY
> 					5rrxZp3WDyKG7h3+BRBxzY7T/u330Xb9EzUQ
> 					1ABq1BgKhxEdQhJAtZ0bYdRvAuqRKRcwzqNO
> 					avTw1eTR9HoPB8FpPPCv1cNMooicYOtehT55
> 					XHb1NXQ91WUxZjIS6nQJctUpd9/ZuL0xm3kz
> 					5r/jfoi5E2uULqQxwA== )
> host3.nyc3.example.com.	604800	IN A	172.16.2.6
> 			604800	RRSIG	A 7 4 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					beSpI/cjL5Lj246JMxPxNH+tSBnnB6UVjtAW
> 					EhmjNntb+cGXVpjYAPFnG0UM80+TpEGbCb4W
> 					HK3kqYjUzbiYrPLI6Q0wNClu5xHNXsGJ870i
> 					fAW8OT5wztHMRNQp2tn39RvRk+cr2EdJmeej
> 					+M7Bjc+fQbLoJU9dlKoc13az0obursWYXIX9
> 					4AGe0J8gG/jT62J95F5Z0nzWb1IQGK9TWf0T
> 					l+kSF+qRh76GLwnJZRBlQ1h5xmcBR0xAISng
> 					xCFzfxciOQh8At5ManogpLljOh3iqbAAqsh6
> 					f+0Dk8ilg0rK3FRwA6VwYdZVP3Bir6rsze6y
> 					FjEUEvn+GqiPJ9vXxg== )
> host2.nyc3.example.com.	604800	IN A	172.16.2.5
> 			604800	RRSIG	A 7 4 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					n5MjCD3hbx1Uj/X1x/umVbnunVSqafYudVvw
> 					Pt0Kl+FVAiva/F/N4UXkJLFh+M6MCwNsO2fG
> 					MFVr9Eyf1SgP6Jg4HKpTWFpINGYRWibFMQwo
> 					gVxDVoVnOLdOpD8Sse06sVlGhIoX6K2bbvId
> 					RCNU1zGHE0Jok1E0eafg39U3/03xQYe0Efbz
> 					nnKprAvoJdy75XQKUJvUBaR3leJazI2zWe2J
> 					9GMBrfgdNCEMn7VvazXJ/Rl1i1gY5Qm35bP7
> 					nmMlZNGgleAVjVgFgVrqSHAgey7q4C0kipkK
> 					K8UixABZeGQbcyPFC3Mk+lDBVAO0aC8FO2ue
> 					avvhTviRtOOlxujguQ== )
> ns1.nyc3.example.com.	604800	IN A	172.16.2.11
> 			604800	RRSIG	A 7 4 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					0OiF2YaBuJOkb7VhgufvPRlXOQUMVp+smbUQ
> 					s2ZpWdEt0JP1hqaXQwaGhbbKwlXGkZZazIBg
> 					ADhjTSMofpPsbxyaUxrjCNbkHeTO2oPK1bfD
> 					X2og7GSpt361yCrMpbfHEVXds3upHmwT5LV6
> 					6IKCQozcWmf75lBkOyuu9qo9U6SAzNCqleiJ
> 					YrdxuIilx1IY4qw+woenaUf9R+WJ+l7eI51i
> 					Ju/pNfpowpTheNShX7NJcCOOlDASWGnk5om6
> 					bdqPE270d8MImmYsT9QX5D/+g5OV+n+oKP2z
> 					CwkqzIAZXPW8JASutmwneH54Pbb4A0FIZgWj
> 					mNWd4mvGdRxyopH8Bw== )
> 13NTQLTAL8GPRJ810B4IBC0PML5JT58O.example.com. 604800 IN	NSEC3 1 0 10 5B1E2A0938A7120B (
> 					1UQN7J8KHHVV55NJJDFMJRDGVEC9QK71
> 					A RRSIG )
> 			604800	RRSIG	NSEC3 7 3 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					fz7DqiOwgOU/8M9xpbhm5U2YfKjE+AspD0UR
> 					ZeeDvSIAfYa4whUsfB5OkrvIY3f38YqLBng4
> 					Wn0DY95Tn4TOuvj3dyLw0KKz6gP237fGLvp3
> 					rrrLRq1vWWgwZ02uYObSmJj9W34JUL/Om++y
> 					9ZTN3Tp+nTvNjO5W43hwVCOkpRhu7QEQAGXz
> 					AE9zrxPkybiZW5UuY4b+lqTDYVv68c89qhE6
> 					+vR3zehwAIerEF0KzjBfigx4CKi1jfyixW4S
> 					9eKR6PF5mwM9r2gOE4lSUhbluWqY7+SZPSYa
> 					wqLV4r+iCEgZ0ZJfcs1wmxJDFbsPVEHsJ9yk
> 					GaBhwUPLgJ7cV6CyXw== )
> ns2.nyc3.example.com.	604800	IN A	172.16.2.12
> 			604800	RRSIG	A 7 4 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					b8Xi4lg+h+FLgDyu3s03qpBt0RczciNGvMHs
> 					Szf+jEE5LxzGx+AS4DkPI8FPZ8KS0EWHSvtA
> 					ejfOuI/53v+8JH6WtSSG6D1EQQrgyWRSnqVW
> 					IsOSz6qLqPIeZIdlAshjlqOppKfamE5kCbXv
> 					W+97u+1UF8CHUwauYnH5L26Iaxzimmnorsvz
> 					hxPei0QD5mVo2LToT3MUu6JKJUq+xFUnQRHg
> 					h1laKbpFmdYzfviTzphF8AAH61FMa/5rBnxN
> 					ur44u8k4iRk5cvp0KOnosxpaEXf9gMlckgD+
> 					u+je7wmqEY7mT3y4YjuDLbXRkgyWhYuGl4Q9
> 					0Su95pKOK8yuiVwa3w== )
> 1UQN7J8KHHVV55NJJDFMJRDGVEC9QK71.example.com. 604800 IN	NSEC3 1 0 10 5B1E2A0938A7120B (
> 					5TLGKO9HOD2H3QAS9UQBAQ0603N8NR68
> 					A RRSIG )
> 			604800	RRSIG	NSEC3 7 3 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					li4gfnT/ZWA5VfOC9w6yqDvfuL4PFI8BfnsV
> 					C9P7Am368Aqqp7jQx+w92FQYWeYq6+INj/Nf
> 					rwnACby+Ww2tvetQkUzsvREl3g/fS3LojLpL
> 					h6eRWzrExTHtO3OoawvgW5cL7tVENl7ap9LT
> 					WauRDBjIDJqdYlM1Z0Bj+v7M969zK5T1nDWR
> 					XKeVIaqWg72yyirgplz8eBSJbcxqnr7Sn4b1
> 					R1Jg6zshILjc4YZghIhydLDSq1rSq9sFMdOm
> 					eA8fmEYVkYqLRtbzw02LPUojvjX4cZGxg1/P
> 					g3/ykw8GTw1ofIlVnbSDFvePFKpqjZHjracr
> 					a2TTorw2KKKcY2HeLA== )
> 5TLGKO9HOD2H3QAS9UQBAQ0603N8NR68.example.com. 604800 IN	NSEC3 1 0 10 5B1E2A0938A7120B (
> 					E97CJO1762D7LNI4EQQBO2AHH4J1PKPU
> 					A RRSIG )
> 			604800	RRSIG	NSEC3 7 3 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					ROYmoLb2SKcijA57tT514jVI7o9OGYIV2EnA
> 					t3IfQv6cNGnMr838W5hjEn0Y5oql+p0gio1i
> 					GelL9eC1a+pSvSixH68zLSTTmGFgCv/AE5Te
> 					vQaj04AQsI0TOtptOEdCOwmDP7dv73xxxRUT
> 					Msx8NjICSB+t93rARv+02aNHcKbTz+7IeIM+
> 					gFVSN2kLK30UEfdVjbhl0xwLgFNmXWLpkZ7C
> 					1sdWYzmvjHj/YgeiMZwrcoHAeNSuiP42V7LX
> 					grRVxtkOsAEuPTDth79M9f60OQ3axASxWFnm
> 					CvscqxZGXn2JYCAQqyd+zZD0jSza7ODv2w17
> 					n2G6zrPHgudcQW5Muw== )
> E97CJO1762D7LNI4EQQBO2AHH4J1PKPU.example.com. 604800 IN	NSEC3 1 0 10 5B1E2A0938A7120B (
> 					Q09V94K6VA53F14PKP1DMK1LKSQ8OVUV
> 					NS SOA RRSIG DNSKEY NSEC3PARAM )
> 			604800	RRSIG	NSEC3 7 3 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					gR/GrHYtdOXzxcjwN5DulGPIPN6ltIDfKyjX
> 					/m7dtdin/5nlbYjBgZYSSIfFpmN0ikDnIukf
> 					AcIOEPx4X3xSZoq4wu+8s34eF2vUAjqlNLkc
> 					IHhk010ianMYzOF6/vSwZ7hCDKp/GdjBqLJK
> 					AKh1CQTGm4DmlfR4L4lIeI4cJ6OwcvTfqJUQ
> 					Ih7JDyC1ZoryqHNXtPk6vXOm3Rhc+F58aTRz
> 					UYR27cKSKNYTe2fHCivPPyfv+nZN5i9M9p4d
> 					d8lkO4QS4IOsbnBnkkSXRneXwdvTX4lmQLjK
> 					j7mqarJfns/ORj9TNw7kcDp8+oNVAh2dlINV
> 					hFwhjP4EMkqrMujPhA== )
> Q09V94K6VA53F14PKP1DMK1LKSQ8OVUV.example.com. 604800 IN	NSEC3 1 0 10 5B1E2A0938A7120B (
> 					U1EM83K3Q0K54RUULP79VC465MVDBSVG
> 					A RRSIG )
> 			604800	RRSIG	NSEC3 7 3 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					swUzi+Hs4Dge/Cmwf+yosK54EvA01eO2PHFR
> 					1V3yXhRAy9mtjDtymTORLrMKi23pyl28/J8r
> 					xrWPuL0K8LsuYEtuc/6/l0h4hfuT5MTDGo6U
> 					qQrZaUGDleFAAqcvlVVR9GNRk5TXFJIIzLF+
> 					k8WBkMYU5kb6xgdohrwjcXg8mIMCNtCD78ck
> 					F2Od9iSLOwW0A87qQzCOQ8Smg5YjjZegmOv5
> 					NVxszQoEkHjB//lRR7E7z0D2CqOjgRESgeaI
> 					Voth53CA7nsm+TvT2XviB7yzRw51wrsphKlY
> 					5Y2qLvjQGovZP6GXMC0ldZCnJHvmdlovdiO/
> 					3J7wgeg5z9EGf2mv7A== )
> U1EM83K3Q0K54RUULP79VC465MVDBSVG.example.com. 604800 IN	NSEC3 1 0 10 5B1E2A0938A7120B (
> 					VNETBTCMBLL9MBJLOPMK4N69D1DMI11B
> 					A RRSIG )
> 			604800	RRSIG	NSEC3 7 3 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					hKjN/3buiP/SU2sxU6aXUNcVSBm3NitKvIgK
> 					EXbQbWnzXrqR4bX2aHvOSDnrfFKe+khvF5Ld
> 					8PgmsmAv+/uKI29T0Q0KOS3kGrF6LWvgtRYK
> 					MV7+pk57UzbNctYwdvsaynE0uPlR0nAMNI/K
> 					Z+j37nf+T+uc06Z2KVl1Y4ZTyD0DQvo1Zn8/
> 					Ijx5meEKvX9sfMzoxKESREk4mZjXvBbJ1Gl1
> 					/HLH42ov63Klp5zarVlkJCJircxlJWLFNT3v
> 					INGWCO6SGfbQ/ArsQB500i0tle3/8XQP7nrD
> 					zLA8yMICVHQTicIdeqtvx7RF0g1seYUjS6Um
> 					heDXZKGelLakf3Y6Jg== )
> VNETBTCMBLL9MBJLOPMK4N69D1DMI11B.example.com. 604800 IN	NSEC3 1 0 10 5B1E2A0938A7120B (
> 					13NTQLTAL8GPRJ810B4IBC0PML5JT58O )
> 			604800	RRSIG	NSEC3 7 3 604800 (
> 					20210309100822 20210207100822 59870 example.com.
> 					I6vRt/NJHsZxOMfK/zUBefKKbHmrao584uda
> 					qwiANC4WqKNauXjad1KSfbEvUW3zsuyVUjo8
> 					F7bz8VvDI0KQZ1511n9bdUa25MBoCFL1iwk/
> 					8EOmWhTdJZSJcRoVpXUvPxg1R9M2+KwD7lOa
> 					ZGitwlCNypqVsmnTGAsUsUaQmus28zoQzI98
> 					3APB/OhJrvK/Xz25oPrMTKRUZ1RkrMPunFCH
> 					GiMZrLZzYfCnmLTAcLNSXi4K8OEi1f+1+UGw
> 					tRxJQInCkx5wlyzHyuGlQaRD6ozeBpT7W6ri
> 					BbM9+XWvQavvfSzlvpdx4ksMJMONuZahRvLo
> 					8rysUcz4pZuUQ4xwEQ== )

从上边的文件对比,咱们能够看出对于一条新的DNS资源记录都新增了一个公钥和加密后的域名地址,整个文件的大小横向增加,新生成的 ZONE 文件须要替代以前老的 ZONE 文件,所以须要更改原始的 named.conf.zone 配置来适配新的配置。

/etc/bind/zones$ sudo nano named.conf.local
                        
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "nyc3.example.com" {
    type master;
    file "/etc/bind/zones/db.nyc3.example.com.signed"; # zone file path
    allow-transfer { 172.16.2.12; };           # ns2 private IP address - secon$
};

zone "16.172.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.16.172";  # 10.128.0.0/16 subnet
    allow-transfer { 172.16.2.12; };  # ns2 private IP address - secondary
};

重启 BIND9 服务,这个时候已经配置好了安全设置。

/etc/bind/zones$ sudo systemctl restart BIND9
相关文章
相关标签/搜索