第一章 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.资源配置
主机名 | FQDN | IP | 服务器配置 | 操作系统 |
---|---|---|---|---|
dns-dg01 | dns-dg01.dns.local | ens192:192.168.111.101/24 ens224:X.X.X.X/28 | 4c、4G、200GB | CentOS 7.7.1908 |
dns-dg02 | dns-dg02.dns.local | ens192:192.168.111.102/24 ens224:XXX.XXX.XX.XX/28 | 4c、4G、200GB | CentOS 7.7.1908 |
dns-hc01 | dns-hc01.dns.local | ens192:192.168.111.103/24 | 4c、4G、200GB | CentOS 7.7.1908 |
dns-hc02 | dns-hc02.dns.local | ens192:192.168.111.104/24 | 4c、4G、200GB | CentOS 7.7.1908 |
虚IP
192.168.111.111(递归VIP)
192.168.111.222(缓存VIP)
2.2.组件规划
组件 | 版本 | dns-dg01 | dns-dg02 | dns-hc01 | dns-hc02 |
---|---|---|---|---|---|
Bind | 9.9.2 | ★ | ★ | ★ | ★ |
KeepAlived | 2.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_name | channel的名称,可以自定义命名以便区分不同的日志信息 |
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