In this article I'm going to set up a master-slave DNS-Server cluster with bind on CentOS 7.5.
Some key data for this setup:
Master-Server IP-Address: 172.31.0.1
Slave-Server IP-Address: 172.31.0.2
Network: 172.31.0.0/24
Master-Configuration
First install the necessary software.
First install the necessary software.
Some key data for this setup:
Master-Server IP-Address: 172.31.0.1
Slave-Server IP-Address: 172.31.0.2
Network: 172.31.0.0/24
Master-Configuration
First install the necessary software.
[root@ns01 ~]# yum -y install bind bind-utils
OPTIONAL! Create a rndc-key if you want to make updates dynamic: [root@ns01 ~]# rndc-confgen -a -b 512 -r /dev/urandom
chown root:named /etc/rndc.key
chmod 640 /etc/rndc.key
I usually create a directory for the log files and data files (zones) for bind. [root@ns01 ~]# mkdir /var/log/named
[root@ns01 ~]# chown -R named:named /var/log/named
[root@ns01 ~]# mkdir /var/named/data
[root@ns01 ~]# chown -R named:named /var/named/data
Edit the Master's /etc/named.conf file. In my case, the named.conf looks like this: [root@ns01 ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
};
acl "trusted" {
127.0.0.1;
172.31.0.0/24;
};
options {
listen-on port 53 { 127.0.0.1; 172.31.0.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";
version none;
hostname none;
server-id none;
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
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;
allow-recursion { trusted; };
allow-query { localhost; trusted; };
allow-transfer { localhost; 172.31.0.2; };
forward only;
forwarders {
195.46.39.40;
195.46.39.39;
};
auth-nxdomain no;
notify no;
dnssec-enable yes;
dnssec-validation no;
/* 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 "common_log" {
file "/var/log/named/named.log" versions 10 size 10m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
category default { "common_log"; };
category general { "common_log"; };
category queries { "common_log"; };
category client { "common_log"; };
category security { "common_log"; };
category query-errors { "common_log"; };
category lame-servers { null; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "archyslife.lan" {
type master;
file "data/db.archyslife.lan.zone";
notify yes;
};
zone "0.31.172.in-addr.arpa" {
type master;
file "data/db.0.31.172.in-addr.arpa.zone";
notify yes;
};
Now create the zone-files for the forward-zone of your network: [root@ns01 ~]# vim /var/named/data/db.archyslife.lan.zone
$TTL 86400 ; 1 Day
@ IN SOA ns01.archyslife.lan. ns02.archyslife.lan. (
2018062615 ; Serial
3600 ; Refresh (1 Hour)
3600 ; Retry (1 Hour)
604800 ; Expire (1 Week)
3600 ; Minimum (1 Hour)
)
@ NS ns01.archyslife.lan.
@ NS ns02.archyslife.lan.
; A Records
@ A 172.31.0.1
@ A 172.31.0.2
ns01 A 172.31.0.1
ns02 A 172.31.0.2
ldap01 A 172.31.0.5
ldap02 A 172.31.0.10
ansible A 172.31.0.6
; SRV Records
_ldap._tcp IN SRV 0 100 389 ldap01.archyslife.lan.
_ldap._tcp IN SRV 0 100 389 ldap02.archyslife.lan.
And the reverse-zone for your network: [root@ns01 ~]# vim /var/named/data/db.0.31.172.in-addr.arpa.zone
$TTL 86400
@ IN SOA ns01.archyslife.lan. ns02.archyslife.lan. (
2018062616 ; Serial
3600 ; Refresh (1 Hour)
3600 ; Retry (1 Hour)
604800 ; Expire (1 Week)
3600 ; Minimum (1 Hour)
)
@ NS ns01.archyslife.lan.
@ NS ns02.archyslife.lan.
ns01 A 172.31.0.1
ns02 A 172.31.0.2
1 PTR ns01.archyslife.lan.
2 PTR ns02.archyslife.lan.
5 PTR ldap01.archyslife.lan.
10 PTR ldap02.archyslife.lan.
6 PTR ansible.archyslife.lan.
Set the appropriate SELinux-Contexts for your zone-files: [root@ns01 ~]# semanage fcontext -a -t named_zone_t /var/named/data/db.archyslife.lan.zone
[root@ns01 ~]# semanage fcontext -a -t named_zone_t /var/named/data/db.0.31.172.in-addr.arpa.zone
[root@ns01 ~]# restorecon -Rv /var/named
[root@ns01 ~]# setsebool -P named_write_master_zones 1
Restart and enable the named.service [root@ns01 ~]# systemctl restart named.service
[root@ns01 ~]# systemctl enable named.service
Allow named to communicate through the firewall [root@ns01 ~]# firewall-cmd --add-port={53/tcp,53/udp,953/tcp,953/udp} --permanent
[root@ns01 ~]# firewall-cmd --reload
Slave-ConfigurationFirst install the necessary software.
[root@ns01 ~]# yum -y install bind bind-utils
Edit the Slave's /etc/named.conf file. In my case, it looks like this: [root@ns02 ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
acl "trusted" {
127.0.0.1;
172.31.0.0/24;
};
options {
listen-on port 53 { 127.0.0.1; 172.31.0.2; };
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";
version none;
hostname none;
server-id none;
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
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;
allow-recursion { trusted; };
allow-query { localhost; trusted; };
allow-transfer { none; };
auth-nxdomain no;
notify no;
dnssec-enable yes;
dnssec-validation no;
/* 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 "common_log" {
file "/var/log/named/named.log" versions 10 size 10m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
category default { "common_log"; };
category general { "common_log"; };
category queries { "common_log"; };
category client { "common_log"; };
category security { "common_log"; };
category query-errors { "common_log"; };
category lame-servers { null; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "archyslife.lan" {
type slave;
file "data/db.archyslife.lan.zone";
masters { 172.31.0.1; };
allow-notify { 172.31.0.2; };
};
zone "0.31.172.in-addr.arpa" {
type slave;
file "data/db.0.31.172.in-addr.arpa.zone";
masters { 172.31.0.1; };
allow-notify { 172.31.0.2; };
};
Allow named to write it's zones through SELinux: [root@ns02 ~]# setsebool -P named_write_master_zones=1
Restart and enable the named.service on the slave: [root@ns02 ~]# systemctl restart named.service
[root@ns02 ~]# systemctl enable named.service
Allow bind to communicate through the firewall [root@ns02 ~]# firewall-cmd --add-port={53/tcp,53/udp,953/tcp,953/udp} --permanent
[root@ns02 ~]# firewall-cmd --reload
Feel free to comment and / or suggest a topic.
Comments
Post a Comment