使用bind, DNS主从服务器集群搭建,并通过javadns来修改zone文件
工作需要,搭建DNS主从服务器,并通过Java程序添加,修改一些主机到DNS服务器中。
使用VMWare建立两台虚拟机,操作系统是CentOS7
准备两台DNS服务器:
DNS-S1 :主服务器,ip地址192.168.203.139
DNS-S2 :从服务器,IP地址192.168.203.140
准备两个测试主机,主机A用于访问DNS服务器,主机B是一台需要新增到DNS中访问的主机。(此处也可以只设置主机A,主机B可以不用设置,这里为了ping通更加直观)
Client-A :访问主机,IP地址192.168.203.133
Client-B:被访问的主机,IP地址192.168.203.134
DNS简介:DNS服务由bind提供,启动后的服务名称为named,安装后主要配置文件是etc/named.conf,主服务器zone文件放在var/named/下
1. 主DNS服务器环境搭建(DNS-S1 192.168.203.139)
(1)关闭SElinux
查看SELinux状态
getenforce
显示Enforcing,表明SeLinux是开启的。这里需要关闭
关闭方法1:命令行输入:
sed -i'/SELINUX/s/enforcing/disabled/' /etc/selinux/config
关闭方法2:修改文件:
etc/selinux/config文件中将SELINUX=enforcing改为SELINUX=disabled
重启机器,使得更改生效。
重启后键入getenforce,显示Disabled,则修改SELinux成功
(2)在chroot环境下安装bind软件
yum install bind-chroot
有提示的地方键入y回车
安装完成后,开启named,并设置为开机启动
systemctl start named
systemctl enable named
查看服务是否正常:
systemctl status named
结果显示DNS服务正常。
(3)打开53端口,用于监听DNS请求
firewall-cmd --zone=public--add-port=53/tcp --permanent
firewall-cmd --zone=public--add-port=53/udp --permanent
firewall-cmd –reload
检查端口状态:
Iptables -L -n |grep 53
(4)配置etc/named.conf文件
为了保险起见,我们备份一下named.conf,以免修改出现问题
这样就不用担心修改named.conf出错了。
具体修改如下:
//
// named.conf
//
// PRovided by Red Hat bind package toconfigure the ISC BIND named(8) DNS
// server as a caching only nameserver (asa localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ forexample named configuration files.
//
// See the BIND Administrator's ReferenceManual (ARM) for details about the
// configuration located in/usr/share/doc/bind-{version}/Bv9ARM.html
options {
listen-on port 53 { any; }; //监听端口
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; //允许访问的IP地址段,这里先设置为所有的吧,以后根据需要在这里限制哪些主机可以访问这个DNS
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enablerecursion.
- If you are building a RECURSIVE (caching) DNS server, you need toenable
recursion.
- If your recursive DNS server has a public IP address, you MUST enableaccess
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes; //这个选项控制是否开启服务器的递归查询功能
dnssec-enable no; //这部分是设置DNSSEC的。把它关掉,默认为yes。
dnssec-validation no; //关掉,默认为yes。
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file"data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
//新增一个自己的域,例如:test.com.cn
zone "test.com.cn" IN {
type master; //指明本服务器是这个域的主DNS服务器
file "test.com.cn.zone"; //该域的配置文件的名字,放在/var/named/test.com.cn.zone
allow-transfer {192.168.203.140;}; //指定从DNS服务器的ip地址
allow-query {any;};//允许任意IP地址来请求解析
};
include"/etc/named.rfc1912.zones";
include "/etc/named.root.key";
并对一些内容作了注释。
(5)建立zone文件。在目录var/named/下建立在named.conf中用到的test.com.cn.zone文件
将下文写入zone文件
$ORIGIN .
$TTL 86400 ; 1 day
test.com.cn IN SOA test.com.cn. aaaaa.163.com. (
201701237 ; serial //serial号,用于主从服务器更新,当主服务器的serial大于从服务器的serial时,从服务器会更新zone文件
10 ; refresh (10 seconds)//设置的更新周期,这里设置为10秒作为测试用
900 ; retry (15 minutes)//更新失败时重试的周期900秒
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS dns.test.com.cn.
$ORIGIN test.com.cn.
$TTL 3600 ; 1 hour
aaa A 192.168.203.134
bbb A 192.168.203.134
dns A 192.168.203.139
写入完成后,重启named服务。
systemctl restart named
如果出现问题,则键入systemctl status named
根据提示,进一步键入named-checkconf -z/etc/named.conf
这样就可以看到错误的提示,根据提示来修改语法错误或者其他错误。
修改正确并重启后,
就可以用aaa.com.cn或者bbb.com.cn来访问192.168.203.134主机了。
(6)测试主DNS服务器是否正常
打开主机A(192.168.203.133)
修改etc/resolv.conf文件,将DNS主服务器的IP加入到其中,用于指定主机A使用的DNS服务器。
开启主机B,保证A主机能ping通。
在主机A上 ping aaa.test.com.cn 看看DNS服务器是否帮我们解析了aaa.test.com.cn
同样我们给134主机也定义了个域名 bbb.test.com.cn 也是可以ping 通
至此,主DNS服务器搭建完成。下面配置从DNS服务器
2. 从DNS服务器环境搭建(DNS-S2 192.168.203.140)
前三步均与主服务器做法相同,这里不再赘述。
(1)关闭Selinux
(2)安装bind-chroot
(3)开启53端口
(4)配置named.conf文件
这里直接将主DNS的配置文件拷贝过来,修改其中test.com.cn即可
zone "test.com.cn" IN {
type slave; //指明本服务器是这个域的主DNS服务器
file "slaves/test.com.cn.zone"; //该域的配置文件的名字,放在/var/named/slaves/test.com.cn.zone
masters {192.168.203.139;}; //指定主DNS服务器的ip地址
allow-query {any;};//允许任意IP地址来请求解析
};
这里只要修改类型、文件地址、主机ip。这样从DNS就配置好了。
(5)这里的zone文件不用自己建立,而是通过主DNS同步过来。这样主从DNS解析的内容就是一致的了。当主DNS挂了,从DNS就可以继续解析域名了。
只需要重启从服务的DNS即可
systemctl restart named
查看一下状态systemctl status named
重启日志显示,重启时,从DNS接收了主DNS发送来的zone文件。
我们进入var/named/slaves目录下
确实zone文件已经同步过来了,说明主从服务器已经同步。
(6)测试
在A主机(192.168.203.133)的etc/resolv.conf中也加上从DNS的ip
这时主从服务器都是开启的状态,测试aaa.test.com.cn
这时是通的,然后关闭主服务器的DNS服务
systemctl stop named
继续ping aaa.test.com.cn
仍然是通的,说明从DNS已经开始工作了。(这里有个问题,如果resolv.conf不加入从DNS的ip,则主DNS关闭后无法ping通,这里的resolv文件并没有被主DNS修改,因此这里可能是因为指定了从DNS,所以也能ping通。而不是主DNS挂了,然后主机会获取到从DNS,从而在主DNS挂掉后继续解析。)这里的resolv.conf 文件在机器重启后都会发生变化,因此需要解决这个问题,并且要求主DNS配置文件变化时,及时能够修改访问主机的resolv.conf文件。
新闻热点
疑难解答