DNS bind部署记录

第一章 DNS相关知识

1.1.递归与迭代

“递归解析”是最常见也是默认的一种解析方式。在这种解析方式中,如果客户端配置的本地域名服务器(Local DNS服务器)不能解析的话,则后面的查询过程全部由本地域名服务器代替DNS客户端进行查询,直到本地域名服务器从权威域名服务器得到了正确的解析结果,然后由本地域名服务器告诉DNS客户端查询的结果。
在整个递归查询过程中,除一开始客户端向本地域名服务器发起查询请求外,其余各个环节均是以本地域名服务器为中心进行迭代查询,DNS客户端一直处于等待状态,直到本地域名服务器发回最终查询结果。相当于,在整个查询环节中本地域名服务器承担了中介代理的角色。
迭代查询则是指所有查询工作全部由客户端自己进行,除此之外,整个查询路径和步骤与递归查询没有太大区别。
在这里插入图片描述
参考:https://zhuanlan.zhihu.com/p/429336498

1.2.返回值

**A(Address)记录:**指定主机名(或域名)对应的IP地址记录。
**MX(Mail Exchange)记录:**用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操作控制所有的邮箱设置。
**CNAME(Canonical Name)记录:**也称别名解析,可以将注册的不同域名都转到一个域名记录上,由这个域名记录统一解析管理,与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址。
**NS(Name Server)记录:**域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析,可以把一个域名的不同二级域名分别指向到不同的DNS系统来解析。
**AAAA记录:**记录IPV6解析记录,该记录是将域名解析到一个指定的IPV6的IP上。
**SOA(Start Of Authority)记录:**起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中标记哪一台是主服务器。
**TXT记录:**可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录
**PTR(PoinTeR)记录:**逆向查询记录(Pointer Record),只用于从IP地址查询域名FQDN。

1.3.Forward

当设置了forwarders转发器后,所有非本域的和在缓存中无法找到的域名查询都将转发到设置的DNS转发器上,由这台DNS来完成解析工作并做缓存,因此这台转发器的缓存中记录了丰富的域名信息。因而对非本域的查询,很可能转发器就可以在缓存中找到答案,避免了再次向外部发送查询,减少了流量。
**forward first:**设置优先使用forwarders DNS服务器做域名解析,如果查询不到再使用本地DNS服务器做域名解析。
**forward only:**设置只使用forwarders DNS服务器做域名解析,如果查询不到则返回DNS客户端查询失败。

第二章 资源规划

2.1.资源配置

主机名FQDNIP服务器配置操作系统
dns-dg01dns-dg01.dns.localens192:192.168.111.101/24
ens224:X.X.X.X/28
4c、4G、200GBCentOS 7.7.1908
dns-dg02dns-dg02.dns.localens192:192.168.111.102/24
ens224:XXX.XXX.XX.XX/28
4c、4G、200GBCentOS 7.7.1908
dns-hc01dns-hc01.dns.localens192:192.168.111.103/244c、4G、200GBCentOS 7.7.1908
dns-hc02dns-hc02.dns.localens192:192.168.111.104/244c、4G、200GBCentOS 7.7.1908

虚IP
192.168.111.111(递归VIP)
192.168.111.222(缓存VIP)

2.2.组件规划

组件版本dns-dg01dns-dg02dns-hc01dns-hc02
Bind9.9.2
KeepAlived2.0.20

2.3 实验拓扑

在这里插入图片描述

第三章 基础环境准备

3.1.防火墙配置

在两台递归服务器上,将私网网卡ens192从public zone中移除,并将所有开放的服务从public zone中删除,此时从公网IP上没有任何开放端口的服务

firewall-cmd --permanent --zone=public --remove-interface=ens192
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
firewall-cmd --permanent --zone=public --add-rich-rule='rule protocol value=icmp drop'
firewall-cmd --reload
firewall-cmd --zone=public --list-all

接下来将ens192添加到trusted zone,并开放所有的tcp和udp端口服务

firewall-cmd --permanent --zone=trusted --add-interface=ens192
firewall-cmd --permanent --zone=trusted --add-port=1-65535/tcp
firewall-cmd --permanent --zone=trusted --add-port=1-65535/udp
firewall-cmd --reload
firewall-cmd --zone=trusted --list-all

在缓存服务器上,关闭防火墙

systemctl stop firewalld
systemctl status firewalld

3.2.递归服务器路由

查看递归服务器上的路由信息,确保缺省路由指向公网网卡ens224

[root@dns-dg01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         XXX.XXX.XX.XX   0.0.0.0         UG    103    0        0 ens224
192.168.111.0   0.0.0.0         255.255.255.0   U     102    0        0 ens192
XXX.XXX.XX.XX   0.0.0.0         255.255.255.240 U     103    0        0 ens224

如果路由不对,可以

# 临时修改
route add default gw XXX.XXX.XX.XX
# 永久修改
touch /etc/sysconfig/network-scripts/route-ens224
echo "0.0.0.0/0 via XXX.XXX.XX.XX" > /etc/sysconfig/network-scripts/route-ens224

3.3.修改主机名

临时修改

hostname dns-dg01
hostname dns-dg02
hostname dns-hc01
hostname dns-hc02

永久修改

echo "dns-dg01" > /etc/hostname
echo "dns-dg02" > /etc/hostname
echo "dns-hc01" > /etc/hostname
echo "dns-hc02" > /etc/hostname

FQDN修改,在/etc/hosts中增加如下内容

192.168.111.101 dns-dg01.dns.local      dns-dg01
192.168.111.102 dns-dg02.dns.local      dns-dg02
192.168.111.103 dns-hc01.dns.local      dns-hc01
192.168.111.104 dns-hc02.dns.local      dns-hc02

确认结果

hostname
hostname -f

3.4.禁用SELinux

临时禁用SELinux

setenforce 0
getenforce

永久禁用SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

3.5.Yum源配置

dns-hc01挂载镜像,并作为其他服务器的yum源
在dns-hc01上配置CentOS镜像Yum源

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom/
rm -f /etc/yum.repos.d/*

创建repo文件,/etc/yum.repos.d/local.repo

[centos]
name=centos
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1

更新yum源

yum clean all
yum makecache fast

安装httpd服务

yum install -y httpd
systemctl enable --now httpd

配置http服务指向CentOS源

mkdir /var/www/html/centos
mount /dev/cdrom /var/www/html/centos/

在所有服务器上重新配置yum源
删除原有repo文件

rm -f /etc/yum.repos.d/*.repo

新建repo文件,/etc/yum.repos.d/centos.repo

[centos]
name=centos
baseurl=http://dns-hc01.dns.local/centos
gpgcheck=0
enabled=1

更新yum源

yum clean all
yum makecache fast
yum update -y

3.6.安装基础软件

安装如下基础软件

yum install -y pcirutils bash-completion vim chrony net-tools gcc

注:bind安装需要gcc

3.7.NTP时钟

以dns-dg01为时钟源,其余节点从dns-dg01上进行时钟同步
服务端(dns-dg01)
修改配置文件,/etc/chrony.conf

# 修改外部时钟源
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
# 不指定外部NTP源
# 允许本网段其节点作为客户端访问
allow 192.168.111.0/24
# 如果时间服务可不用,则使用本地时间作为标准时间授权,层数为10
local stratum 10

重启服务

systemctl restart chronyd
systemctl status chronyd

客户端(dns-dg02、dns-hc01和dns-hc02)
修改配置文件,/etc/chrony.conf

server dns-dg01.dns.local iburst

重启服务

systemctl restart chronyd
systemctl status chronyd

查看时钟同步情况

[root@dns-dg02 ~]# chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* dns-dg01.dns.local            3   6    17    23    -20us[  -33us] +/-   38ms

第四章 部署安装

4.1.下载安装包

采用离线部署的方式,官网网站:ftp://ftp.isc.org/isc/
选择对应版本下载:ftp://ftp.isc.org/isc/bind9/9.9.2/bind-9.9.2.tar.gz
将下载的安装包上传到/pkg_bak

4.2.编译安装

将安装包解压

tar -zxvf /pkg_bak/bind-9.9.2.tar.gz -C /pkg_bak/

编译安装

cd /pkg_bak/bind-9.9.2/
./configure --enable-largefile --enable-threads --prefix=/usr/local/named
make
make install

确认安装是否成功

[root@dns-dg01 bind-9.9.2]# /usr/local/named/sbin/named -v
BIND 9.9.2

遇到无法找到openssl的报错

checking for OpenSSL library... configure: error: OpenSSL was not found in any of /usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw; use --with-openssl=/path
If you don't want OpenSSL, use --without-openssl

或者如下报错

checking for OpenSSL library... configure: error: "/usr/bin/openssl/include/openssl/opensslv.h" not found

系统中已经安装了openssl,但是已安装的openssl是二进制的可执行程序,而安装bind9则需要的是openssl的源文件程序,比如openssl.h。因此需要补充安装的是openssh.h的开发版,其中包含相关的安装源代码文件。

yum install -y openssl-devel

4.3.生成配置文件

rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作。
生成/usr/local/named/etc/rndc.conf文件

/usr/local/named/sbin/rndc-confgen > /usr/local/named/etc/rndc.conf

通过./etc/rndc.conf文件生成./etc/named.conf文件

cd /usr/local/named/etc/
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf

4.4.conf文件说明

4.4.1.acl

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

4.4.2.logging

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

logging {
   [ channel channel_name {
     ( file path name
         [ versions ( number | unlimited ) ]
         [ size size_spec ]
       | syslog syslog_facility
       | stderr
       | null );
     [ severity (critical | error | warning | notice |
                 info | debug [ level ] | dynamic ); ]
     [ print-category yes | no; ]
     [ print-severity yes | no; ]
     [ print-time yes | no; ]
   }; ]
   [ category category_name {
     channel_name ; [ channel_name ; ... ]
   }; ]
   ...
};

通道channel:用于指定日志数据的流向,如syslog、文件

取值含义
channel_namechannel的名称,可以自定义命名以便区分不同的日志信息
file 是将日志输出到文件的标识符
path name表示日志输出到哪个文件,可以是相对路径或绝对路径
versions指定日志文件保留的历史版本数,可以限制日志文件数量,设置为unlimited表示无限制
size表示日志文件的大小限制,size_spec为数字,可以是bytes、kilo-bytes、mega-bytes等单位
syslog将日志输出到系统日志服务的标识符
syslog_facility表示日志输出到系统日志服务使用的设备类型,通常为auth、cron、daemon、user、local0到local7等
stderr将日志输出到控制台窗口
null表示不进行日志记录
severity指定日志级别,用来决定哪些日志信息应该被记录。可以设置为critical、error、warning、notice、info、debug或dynamic,其中dynamic表示将根据运行时情况动态地调整日志级别
print-category
print-severity
print-time
用于定义日志的元数据信息(例如类别、级别和时间戳),并且指定是否将它们包含在日志信息中

类别categories:用于指定记录哪些日志,如查询日志queries、动态更新日志update、解析器的递归查询处理日志resolver等

取值含义
default匹配未归类的消息类型
general包括所有未明确的bind消息
client客户端的请求消息
config配置文件相关消息
database存储数据和缓存记录
dnssec域名签名日志
lame-servers未授权或者非法
network网络错误
notify异步区的更新消息
queries查询日志
query-errors查询不到
resolver名字解析,包括递归日志
security安全日志
update部分更新日志
cname别名解析
xfer-in从远程域名服务器到本地服务器的数据消息
xfer-out从本地到远程域名服务器的数据消息

4.4.3.options

部分常用到的配置参数如下:
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服务器发出查询请求,得到结果后转交给客户机。此选项有yes和no两个值。这个选项用于设置Failover非常有用;
dnssec-enable:选项用来设置是否启用DNSSEC支持,DNSSEC可以用来验证DNS数据的有效性,该选项有yes和no两个值,默认值为yes。
dnssec-validation:选项用来设置是否启用DNSSEC确认,默认值为yes,可以选择auto。
bindkeys-file:用来设置内置信任的密钥文件,其默认值为/etc/named/iscdlv.key;
managed-keys-directory:选项用于指定目录中的文件存储位置,跟踪管理DNSSEC密钥;
forwarders:DNS转发器。用于设定该DNS解析服务器无法进行当前域名解析的情况下,进行转发解析的DNS地址。当设置了forwarder的转发器之后,所有的非本域的和在缓存中无法查找到的域名查询都转发都设置的DNS转发器,由DNS转发器完成转发操作。因此缓存服务器的缓存中就记录了丰富的域名信息。因此如果遇到非本域的查询,转发器的缓存就可以做到查询,从而减少了向外部的查询流量。
forward:选择默认的IP地址即可;
rrset-order:在BIND 9提供的负载均衡策略建立在一个名称(域名-Name)使用多个资源记录(Records)的情况下,其实现的轮询机制并不是传统的负载均衡服务器实现的轮询机制-即追踪和记录每一次应答的资源顺序;
BIND 9实现了一个类似List的数据结构,将所有的资源记录填入到一个顺序表中,这个填入的次序随机,或者根据设定的参数随机;
格式:[class class_name] [type type_name] [name “domain_name”] order ordering
如果参数没有被赋值,那么默认的赋值为: class: ANY type: ANY Name: *
参数:

  • fixed:根据 zone 文件定义资源记录的顺序按照顺序逐个进行解析;
  • random:根据 zone 文件资源记录随机返回解析记录;
  • cyclic:创建一个循环,循环输出资源记录;
  • none:完全随机的资源返回形式。

4.4.4.controls

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

参考:
https://www2014.aspxhtml.com/post-17188/
https://blog.51cto.com/u_15393883/6273898

4.5.递归服务器配置

4.5.1.配置

dns-dg01上编辑/usr/local/named/etc/named.conf文件,内容如下:

key "rndc-key" {
        algorithm hmac-md5;
        secret "aCcP8BRzBc3vtf0W+DOY1g==";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};
# acl模块
acl hc_servers {
        192.168.111.103;
        192.168.111.104;
        localhost;
};

# options模块
options {
        listen-on port 53 { 192.168.111.101; };
        Directory "/usr/local/named";
        Pid-file "named.pid";
        Allow-query { hc_servers; };
        Dump-file "/usr/local/named/data/cache_dump.db";
        recursion yes;
        };
# 根DNS的zone文件
zone "." in {
        Type hint;
        File "named.root";
        };
# localhost的zone文件
zone "localhost" in {
          Type master;
        File "localhost.zone";
        };
# localhost的反向解析zone文件
zone "0.0.127.in-addr.arpa" in {
            Type master;
        File "localhost.rev";
        };

dns-dg02上编辑/usr/local/named/etc/named.conf文件,内容如下:

key "rndc-key" {
        algorithm hmac-md5;
        secret "aCcP8BRzBc3vtf0W+DOY1g==";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};
# acl模块
acl dnsclients {
        192.168.111.0/24;
        localhost;
};

# options模块
options {
        listen-on port 53 { 192.168.111.102; };
        Directory "/usr/local/named";
        Pid-file "named.pid";
        Allow-query { dnsclients; };
        Dump-file "/usr/local/named/data/cache_dump.db";
        recursion yes;
        max-cache-ttl 3600;
        };
# 根DNS的zone文件
zone "." in {
        Type hint;
        File "named.root";
        };
# localhost的zone文件
zone "localhost" in {
          Type master;
        File "localhost.zone";
        };
# localhost的反向解析zone文件
zone "0.0.127.in-addr.arpa" in {
            Type master;
        File "localhost.rev";
        };

注:递归出去的时候,会根据服务器上的路由表找到对应的公网网卡,然后去互联网上进行迭代查询。

在/usr/local/named/中,创建3个zone文件
①named.root
下载根DNS的zone文件,ftp://ftp.rs.internic.net/domain/named.root

②localhost.zone

$TTL    86400
@              IN SOA  @      root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M            ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                IN NS          @
                IN A            127.0.0.1
                IN AAAA        ::1

③localhost.rev

$TTL    86400
@      IN      SOA    localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      localhost.
 1      IN      PTR    localhost.

创建缓存路径日志

mkdir /usr/local/named/data

4.5.2.日志

在/usr/local/named/etc/named.conf中增加日志配置,在options中增加“querylog yes”和logging部分。

options {
        listen-on port 53 { 192.168.111.101; };
        Directory "/usr/local/named";
        Pid-file "named.pid";
        Allow-query { dnsclients; };
        Dump-file "/usr/local/named/data/cache_dump.db";
        recursion yes;
        querylog yes;
        };

logging {
        channel query_log {
                file "/usr/local/named/log/querylog.log";
                print-time yes;
                print-category no;
                print-severity no;
                severity debug 3;
        };
        category queries {
                query_log;
        };
};

创建日志存储路径

mkdir /usr/local/named/log

重启named服务

systemctl restart named.service
systemctl status named.service

开启querylog(该步为临时开启,可选)

[root@dns-dg01 named]# ln -s /usr/local/named/sbin/rndc /usr/bin/
[root@dns-dg01 named]# rndc status
version: 9.9.2
CPUs found: 4
worker threads: 4
UDP listeners per interface: 4
number of zones: 36
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
[root@dns-dg01 named]# rndc querylog
[root@dns-dg01 named]# rndc status
version: 9.9.2
CPUs found: 4
worker threads: 4
UDP listeners per interface: 4
number of zones: 36
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is ON
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

可以通过观察/usr/local/log/querylog.log日志观察是否配置成功,但是bind日志无法查看域名解析的结果。

附:完整的named.conf如下
递归服务器

key "rndc-key" {
        algorithm hmac-md5;
        secret "aCcP8BRzBc3vtf0W+DOY1g==";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

acl hc_servers {
        192.168.111.103;
        192.168.111.104;
        localhost;
};

options {
        listen-on port 53 { 192.168.111.101; };
        Directory "/usr/local/named";
        Pid-file "named.pid";
        Allow-query { hc_servers; };
        Dump-file "/usr/local/named/data/cache_dump.db";
        recursion yes;
        querylog yes;
        max-cache-ttl 0;
        };

logging {
        channel query_log {
                file "/usr/local/named/log/querylog.log";
                print-time yes;
                print-category no;
                print-severity no;
                severity debug 3;
        };
        category queries {
                query_log;
        };
};

zone "." in {
        Type hint;
        File "named.root";
        };

zone "localhost" in {
          Type master;
        File "localhost.zone";
        };

zone "0.0.127.in-addr.arpa" in {
            Type master;
        File "localhost.rev";
        };

4.5.3.启动

带有调试返回结果的bind启动,如果有问题会打印出报错信息:

/usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf

当调试正常后启动需要去掉g这个参数

/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf

将named配置成系统服务,新建系统服务service文件

touch /usr/lib/systemd/system/named.service

配置系统服务文件内容

[Unit]
Description=Named
After=network.target

[Service]
ExecStart=/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf
Type=forking
Restart=always
ReStartSec=600

[Install]
WantedBy=default.target

启动服务

systemctl daemon-reload
systemctl enable --now named.service
systemctl status named.service

4.5.4.测试

查看53端口是否有服务

[root@dns-dg01 named]# netstat -tunlap | grep 53
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      18906/named
tcp        0      0 192.168.111.101:53      0.0.0.0:*               LISTEN      18906/named
udp        0      0 192.168.111.101:53      0.0.0.0:*                           18906/named

在缓存服务器上分别对两台递归进行dig测试

[root@dns-hc01 ~]# dig @192.168.111.101 www.baidu.com +short
www.a.shifen.com.
39.156.66.18
39.156.66.14
[root@dns-hc01 ~]# dig @192.168.111.102 www.baidu.com +short
www.a.shifen.com.
39.156.66.14
39.156.66.18

4.5.5.KeepAlived

Keepalived官网地址:https://keepalived.org/download.html
将keepalived安装包上传到/pkg_bak/下
https://keepalived.org/software/keepalived-2.0.20.tar.gz
解压安装包并编译安装

tar -zxvf /pkg_bak/keepalived-2.0.20.tar.gz -C /pkg_bak/
cd /pkg_bak/keepalived-2.0.20/
./configure --prefix=/usr/local/keepalived
make
make install

备份配置文件

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /usr/local/keepalived/etc/keepalived/keepalived.conf.bak20231016

修改配置文件,/etc/keepalived/keepalived.conf
dns-dg01配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   router_id dns-dg01
   script_user root
   enable_script_security
}

vrrp_script chk_named {
    script "/etc/keepalived/chk_named.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens192
    virtual_router_id 128
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
    virtual_ipaddress {
        192.168.111.111
    }
    unicast_peer {
        dns-dg02
    }
    track_script {
        chk_named
    }
}

dns-dg02配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   router_id dns-dg02
   script_user root
   enable_script_security
}

vrrp_script chk_named {
    script "/etc/keepalived/chk_named.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 128
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
    virtual_ipaddress {
        192.168.111.111
    }
    unicast_peer {
        dns-dg01
    }
    track_script {
        chk_named
    }
}

创建配置文件路径及软链接

mkdir /etc/keepalived
ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

检测脚本如下,/etc/keepalived/chk_named.sh

#!/bin/bash
counter=$(ps -C named --no-heading | wc -l)
if [ "${counter}" = "0" ]; then
    systemctl start named.service
    sleep 1
    counter=$(ps -C named --no-heading | wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived.service
    fi
fi

启动

systemctl enable --now keepalived.service
systemctl status keepalived.service

在缓存服务器上对VIP 192.168.111.111进行测试

[root@dns-hc01 ~]# dig @192.168.111.111 www.baidu.com +short
www.a.shifen.com.
39.156.66.18
39.156.66.14

4.6.缓存服务器配置

4.6.1.配置

与递归服务器的差别主要是增加forward信息,并去除了zone信息。
dns-hc01上编辑/usr/local/named/etc/named.conf文件,内容如下:

key "rndc-key" {
        algorithm hmac-md5;
        secret "TojPhV5FpZI9NOesiPRBBg==";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

acl dns_clients {
        192.168.111.0/24;
        localhost;
};

options {
        listen-on port 53 { 192.168.111.103;192.168.111.222; };
        Directory "/usr/local/named";
        Pid-file "named.pid";
        Allow-query { dns_clients; };
        Dump-file "/usr/local/named/data/cache_dump.db";
        recursion yes;
        querylog yes;
        max-cache-ttl 3600;
        forward only;
        forwarders {192.168.111.111;};
        };

logging {
        channel query_log {
                file "/usr/local/named/log/querylog.log";
                print-time yes;
                print-category no;
                print-severity no;
                severity debug 3;
        };
        category queries {
                query_log;
        };
};

dns-hc02上编辑/usr/local/named/etc/named.conf文件,内容如下:

key "rndc-key" {
        algorithm hmac-md5;
        secret "J3rjXVnK88K7NLDCRMQ2oA==";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

acl dns_clients {
        192.168.111.0/24;
        localhost;
};

options {
        listen-on port 53 { 192.168.111.104;192.168.111.222; };
        Directory "/usr/local/named";
        Pid-file "named.pid";
        Allow-query { dns_clients; };
        Dump-file "/usr/local/named/data/cache_dump.db";
        recursion yes;
        querylog yes;
        max-cache-ttl 3600;
        forward only;
        forwarders {192.168.111.111;};
        };

logging {
        channel query_log {
                file "/usr/local/named/log/querylog.log";
                print-time yes;
                print-category no;
                print-severity no;
                severity debug 3;
        };
        category queries {
                query_log;
        };
};

创建缓存和日志存储路径

mkdir /usr/local/named/data
mkdir /usr/local/named/log

4.6.2.启动

将named配置成系统服务,新建系统服务service文件

touch /usr/lib/systemd/system/named.service

配置系统服务文件内容

[Unit]
Description=Named
After=network.target

[Service]
ExecStart=/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf
Type=forking
Restart=always
ReStartSec=600

[Install]
WantedBy=default.target

启动服务

systemctl daemon-reload
systemctl enable --now named.service
systemctl status named.service

4.6.3.测试

查看53端口是否有服务

[root@dns-hc01 ~]# netstat -tunalp | grep 53
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      27703/named
tcp        0      0 192.168.111.103:53      0.0.0.0:*               LISTEN      27703/named
udp        0      0 192.168.111.103:53      0.0.0.0:*                           27703/named

在本地电脑上分别对两台缓存进行dig测试

C:\dig>dig @192.168.111.103 www.baidu.com +short
www.a.shifen.com.
39.156.66.14
39.156.66.18

C:\dig>dig @192.168.111.104 www.baidu.com +short
www.a.shifen.com.
39.156.66.14
39.156.66.18

4.6.4.KeepAlived

将keepalived安装包上传到/pkg_bak/下
解压安装包并编译安装

tar -zxvf /pkg_bak/keepalived-2.0.20.tar.gz -C /pkg_bak/
cd /pkg_bak/keepalived-2.0.20/
./configure --prefix=/usr/local/keepalived
make
make install

备份配置文件

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /usr/local/keepalived/etc/keepalived/keepalived.conf.bak20231016

修改配置文件,/etc/keepalived/keepalived.conf
dns-dg01配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   router_id dns-hc01
   script_user root
   enable_script_security
}

vrrp_script chk_named {
    script "/etc/keepalived/chk_named.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens192
    virtual_router_id 128
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.111.222
    }
    unicast_peer {
        dns-hc02
    }
    track_script {
        chk_named
    }
}

dns-dg02配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   router_id dns-hc02
   script_user root
   enable_script_security
}

vrrp_script chk_named {
    script "/etc/keepalived/chk_named.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 128
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
    virtual_ipaddress {
        192.168.111.222
    }
    unicast_peer {
        dns-hc01
    }
    track_script {
        chk_named
    }
}

创建配置文件路径及软链接

mkdir /etc/keepalived
ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

检测脚本如下,/etc/keepalived/chk_named.sh

#!/bin/bash
counter=$(ps -C named --no-heading | wc -l)
if [ "${counter}" = "0" ]; then
    systemctl start named.service
    sleep 1
    counter=$(ps -C named --no-heading | wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived.service
    fi
fi

启动

systemctl enable --now keepalived.service
systemctl status keepalived.service

在本地电脑上对VIP 192.168.111.222进行测试

C:\dig>dig @192.168.111.222 www.baidu.com +short
www.a.shifen.com.
39.156.66.18
39.156.66.14

第五章 其他配置

5.1.开启minimal-response

开启minimal-response功能,关闭DNS sever返回authority section和additional section功能。
在./named.conf中的options语句添加:

options {
        ...
        minimal-responses yes
        ...
        };

开启前测试

C:\dig>dig @192.168.111.222 www.baidu.com

; <<>> DiG 9.16.23 <<>> @192.168.111.222 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18379
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 10

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          1025    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       120     IN      A       39.156.66.18
www.a.shifen.com.       120     IN      A       39.156.66.14

;; AUTHORITY SECTION:
a.shifen.com.           1024    IN      NS      ns4.a.shifen.com.
a.shifen.com.           1024    IN      NS      ns2.a.shifen.com.
a.shifen.com.           1024    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1024    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1024    IN      NS      ns5.a.shifen.com.

;; ADDITIONAL SECTION:
ns1.a.shifen.com.       1024    IN      A       110.242.68.42
ns2.a.shifen.com.       1024    IN      A       220.181.33.32
ns3.a.shifen.com.       424     IN      A       36.155.132.12
ns3.a.shifen.com.       424     IN      A       153.3.238.162
ns4.a.shifen.com.       1024    IN      A       111.20.4.28
ns4.a.shifen.com.       1024    IN      A       14.215.177.229
ns5.a.shifen.com.       1024    IN      A       180.76.76.95
ns5.a.shifen.com.       424     IN      AAAA    240e:940:603:a:0:ff:b08d:239d
ns5.a.shifen.com.       424     IN      AAAA    240e:bf:b801:1006:0:ff:b04f:346b


;; Query time: 839 msec
;; SERVER: 192.168.111.222#53(192.168.111.222)
;; WHEN: Tue Oct 17 11:01:51 中国标准时间 2023
;; MSG SIZE  rcvd: 359

开启后测试

C:\dig>dig @192.168.111.222 www.baidu.com

; <<>> DiG 9.16.23 <<>> @192.168.111.222 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31204
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          906     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       2       IN      A       39.156.66.14
www.a.shifen.com.       2       IN      A       39.156.66.18

;; Query time: 0 msec
;; SERVER: 192.168.111.222#53(192.168.111.222)
;; WHEN: Tue Oct 17 11:03:49 中国标准时间 2023
;; MSG SIZE  rcvd: 101

5.2.添加正向解析授权域名

在递归服务器上操作
在/usr/local/named/etc/named.conf中添加zone信息

zone "abc.com" IN {
        type master;
        file "abc.com.zone";
};

file定义的文件位置为options中指定的Directory,即/usr/local/named
从正向解析模板复制

cp /usr/local/named/localhost.zone /usr/local/named/abc.com.zone

编辑正向解析zone文件,主要域名后面务必要加“.”

$TTL    86400
@              IN SOA  abc.com.      root.abc.com. (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M            ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                IN NS           ns1.abc.com.
ns1             IN A            192.168.111.111
www             IN A         1.1.1.1
N               IN A            2.2.2.2

重启named服务

systemctl restart named.service

测试

C:\dig>dig -t A @192.168.111.222 abc.com +short
2.2.2.2

C:\dig>dig -t A @192.168.111.222 www.abc.com +short
1.1.1.1

5.3.智能解析

view(视图)是bind9的高级功能,能够实现将不同的客户端针对同一个域名发起的解析请求,返回不同的结果。zone形式的解析是客户端无差别式的解析,而view是针对不同客户端的差异化解析。
view可以需要acl配合使用,在缓存服务器上配置

...
acl view_clients {
        192.168.111.254/32;
};
...
view view_test {
        match-clients { view_clients; };
        recursion yes;
        zone "abc.com" IN {
          type master;
          file "abc.com.zone";
        };
};
...

测试

# 在电脑(192.168.111.254)上测试,匹配到view中
C:\dig>dig -t a @192.168.111.103 www.view-test.com

; <<>> DiG 9.16.23 <<>> -t a @192.168.111.103 www.view-test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15539
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.view-test.com.             IN      A

;; ANSWER SECTION:
www.view-test.com.      86400   IN      A       1.1.1.1

;; Query time: 0 msec
;; SERVER: 192.168.111.103#53(192.168.111.103)
;; WHEN: Tue Oct 17 13:56:11 中国标准时间 2023
;; MSG SIZE  rcvd: 62

## 在另外一个缓存服务器上测试,并未匹配到view中
[root@dns-hc02 ~]# dig -t A @192.168.111.103 www.view-test.com

; <<>> DiG 9.9.2 <<>> -t A @192.168.111.103 www.view-test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 58304
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.view-test.com.             IN      A

;; Query time: 0 msec
;; SERVER: 192.168.111.103#53(192.168.111.103)
;; WHEN: Tue Oct 17 13:58:07 2023
;; MSG SIZE  rcvd: 46
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这啥名啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值