BIND是互联网各大DNS服务机构广泛使用的域名服务应用,当前版本为9.9,除了*nix外还能够支持Windows等多种操作系统平台,在homelab.pub中我将在CentOS7.5上部署BIND并为本地局域网配置域名解析服务。和其他各类服务应用一样,BIND也采用Master/Slave两种角色构建集群提高服务的可靠性,本文将简要介绍两种角色的部署配置和调试验证。为保证服务安全性,BIND将运行在Chroot环境中。
0x0 背景工作
本文核心在于验证DNS服务,并不关注网络和安全等可能影响服务配置部署的因素,因此在此文假设已将IPv6、SELinux等服务关闭,iptables可根据需要自行配置。
0x1 Master Server部署
BIND默认配置文件包含一组名为empty zones的空域配置文件,用以避免递归查询服务向外部发送无效DNS请求。其配置文件位于/etc/目录下,在chroot环境中服务主配置文件/etc/named.conf等仍在原始文件中修改,Zone配置文件则存放着/var/named/目录下。BIND服务在CentOS中默认的服务名为为named,在chroot环境中服务名称为named-chroot。
安装BIND和相关辅助软件
#yum -y install bind bind-utils bind-chroot
启用named-chroot服务
#systemctl enable chroot-named
#systemctl start chroot-named
#systemctl mask named //mask掉named,避免误操作
创建homelab.pub正向解析文件/var/named/homelab.pub.zone
;Author:Haichen
;Date:20180625
$ORIGIN homelab.pub.
$TTL 86400
@ IN SOA master.homelab.pub. xiaomage.homelab.pub. (
2018061802
21600
3600
604800
86400
)
;
;
IN NS master.homelab.pub.
IN NS slave.homelab.pub.
master IN A 192.168.2.250
slave IN A 192.168.2.251
;
;
IN MX 10 mail1.homelab.pub.
IN MX 20 mail2.homelab.pub.
mail1 IN A 192.168.2.200
mail2 IN A 192.168.2.201
www IN A 192.168.2.205
;
;
ftp IN CNAME www
;
;Exsi Server In Homelab
esxi01 IN A 192.168.2.210
esxi02 IN A 192.168.2.211
esxi03 IN A 192.168.2.212
esxi04 IN A 192.168.2.213
创建homelab.pub反向解析文件/var/named/homelab.pub.rr.zone
;Author:Haichen
;Date:20180625
$ORIGIN 2.168.192.in-addr.arpa.
$TTL 86400
@ IN SOA master.homelab.pub. xiaomage.homelab.pub. (
2018061802
21600
3600
604800
86400
)
;
;
@ IN NS master.homelab.pub.
IN NS slave.homelab.pub.
;
;
250 IN PTR master.homelab.pub.
251 IN PTR slave.homelab.pub.
;
;
200 IN PTR mail1.homelab.pub.
201 IN PTR mail2.homelab.pub.
205 IN PTR www.homelab.pub.
;
;
205 IN PTR ftp.homelab.pub.
;
;
210 IN PTR esxi01.homelab.pub.
211 IN PTR esxi02.homelab.pub.
212 IN PTR esxi03.homelab.pub.
213 IN PTR esxi04.homelab.pub.
为便于管理为以上两个zone创建独立的引用文件,当然也可以将以下内容直接写入到/etc/named.conf中,但还是建议为其创建相对独立的引用文件/var/named/chroot/etc/named.homelab.pub.zones
zone "homelab.pub" IN {
type master;
file "homelab.pub.zone";
allow-transfer { 192.168.2.251; };
allow-update { none; };
};
zone "2.168.192.in-addr.arpa" IN {
type master;
file "homelab.pub.rr.zone";
allow-transfer { 192.168.2.251; };
allow-update { none; };
};
然后在主配置文件/etc/named.conf中引用以上文件
#echo -e 'include "/etc/named.homelab.pub.zones";' >> /etc/named.conf
启动named-chroot服务
#systemctl restart named-chroot
向iptables INPUT链插入一条允许本地网络访问UDP 53端口的规则;
#iptables -I INPUT -s 192.168.2.0/24 -p udp --dport 53 -j ACCEPT
0x2 Slave Server部署
和其他Master/Slave架构的服务一样,需要首先保证两台服务器时间同步,否则无法同步数据,NTP Server配置参考SMB TimeServer 时间服务器配置与管理。
Slave Server仅需配置服务配置文件,zone配置将从master同步,基础服务配置如下:
#yum -y install bind bind-utils bind-chroot //安装服务软件包
#systemctl enable chroot-named
#systemctl start chroot-named
#systemctl mask named //mask掉named,避免误操作
创建homelab.pub域的服务配置文件/var/named/chroot/etc/named.homelab.pub.zones
zone "homelab.pub" IN {
type slave;
masters { 192.168.2.250; };
file "homelab.pub.zone";
allow-update { none; };
};
zone "2.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.2.250; };
file "homelab.pub.rr.zone";
allow-update { none; };
};
Tips:注意在此配置文件和master上配置文件的差异,此处通过type slave声明该服务器角色为slave,通过masters声明了master服务器位置。
然后在主配置文件/etc/named.conf中引用以上文件
#echo -e 'include "/etc/named.homelab.pub.zones";' >> /etc/named.conf
启用named-chroot服务
#systemctl restart named-chroot
向iptables INPUT链插入一条允许本地网络访问UDP 53端口的规则;#iptables -I INPUT -s 192.168.2.0/24 -p udp --dport 53 -j ACCEPT
0x3 DNS服务验证
完成以上配置,本地DNS Server已可以提供解析服务了,在Slave Server上通过日志文件/var/log/messages中named服务相关内容可以看到DNS数据同步信息。
在本地任意客户端通过nslookup或dig命令可以对DNS是否生效进行验证,在此我通过dig查询所有RR资源,参考如下: