Configure DNS Master Slave replication in PowerDNS like a pro with help from our skilled Support Team.
At Bobcares, we offer solutions to every query that comes our way as a part of our much sought after Server Management Service
Let’s take a look at how our proficient Support Techs configured the DNS Master Slave replication for one of our clients recently.
How to configure DNS Master Slave replication in PowerDNS
In order to configure the DNS Master-Slave replication in PowerDNS, we need to install and configure PowerDNS as a part of the prerequisites. After that, we will make the changes mentioned in this article in the pdns.conf file. Before we proceed, keep the following assumptions in mind:
- ns1 – master – 192.168.250.52
- ns2 – slave – 192.168.250.152
- ns3 – slave – 192.168.250.252
DNS Master Slave replication: Master Configuration
Here, we define two options, namely allow-axfr-ips and master here. allow-axfr-ips option informs PowerDNS about endpoints that can initiate as well as receive zone transfers.
For instance, here ns2.example.com runs on 192.168.250.152 and ns3.example.com runs on 192.168.250.252. In other words, these IPs are cleared for zone transfers.
We can also define complete ranges like 192.168.250.0/25. However, our Support Engineers prefer to keep restrict zone transfers to the minimum.
cp -pv /etc/powerdns/pdns.conf /etc/powerdns/pdns.conf-bkp22; vim /etc/powerdns/pdns.conf allow-axfr-ips=192.168.250.152,192.168.250.252
Next, we will set the master parameter to “yes” as seen below:
master=yes
After these changes, we will restart PowerDNS with this command:
systemctl restart pdns
DNS Master Slave replication: Slave Configuration
On slave servers, we will set slave to yes in pdns.conf. This informs PowerDNS this is a slave server. Furthermore, we can also keep the slave server up to date with its master with the slave-cycle-interval option without waiting for the NOTIFY command as seen below:
cp -pv /etc/powerdns/pdns.conf /etc/powerdns/pdns.conf-bkp23; vim /etc/powerdns/pdns.conf slave=yes slave-cycle-interval=60
Next, we will add the master server to the backend config as well. The data includes the following three values:
- IP address of DNS server, 192.168.250.52 in this scenario
- FQDN of slave server
- Role to be assigned, admin role in this scenario
Our Support Engineers would like to remind you that each slave will have its own FQDN.
Hence, on NS2:
mysql use pdns; insert into pdns.supermasters values ('192.168.250.52', 'ns2.example.com', 'admin');
Similarly on NS3:
mysql use pdns; insert into pdns.supermasters values ('192.168.250.52', 'ns3.example.com', 'admin');
Then, we will restart PowerDNS with this command
systemctl restart pdns
Testing the replication
After adding a new zone to the master server, we will run the following code if nothing happens:
root@master:~# pdnsutil create-zone replicateme.dev Creating empty zone 'replicateme.dev'
In case the domain does not show up on the slave, we will run this code:
root@slave:~# pdns_control list-zones | grep replicateme
Moreover, since the zone does not have NS entries yet, the next step is to NS entries for NS1 and NS2 with the following command:
pdnsutil add-record replicateme.dev @ NS ns1.example.com; pdnsutil add-record replicateme.dev @ NS ns2.example.com;
For instance:
root@master:~# pdnsutil add-record replicateme.dev @ NS ns1.example.com New rrset: replicateme.dev. IN NS 3600 ns1.example.com root@master:~# pdnsutil add-record replicateme.dev @ NS ns2.example.com New rrset: replicateme.dev. IN NS 3600 ns1.example.com replicateme.dev. IN NS 3600 ns2.example.com
After that, we will increase the zone’s serial and then use notify command:
pdnsutil increase-serial replicateme.dev; pdns_control notify replicateme.dev;
For instance:
root@master:~# pdnsutil increase-serial replicateme.dev SOA serial for zone replicateme.dev set to 2019040101 root@master:~# pdns_control notify replicateme.dev Added to queue
This results in the following log entries on the slave server:
Apr 3 11:00:10 slave pdns_server[19627]: Received NOTIFY for replicateme.dev from 192.168.250.52 for which we are not authoritative Apr 3 11:00:10 slave pdns_server[19627]: Created new slave zone 'replicateme.dev' from supermaster 192.168.250.52 Apr 3 11:00:10 slave pdns_server[19627]: 1 slave domain needs checking, 0 queued for AXFR Apr 3 11:00:10 slave pdns_server[19627]: Received serial number updates for 1 zone, had 0 timeouts Apr 3 11:00:10 slave pdns_server[19627]: Domain 'replicateme.dev' is stale, master serial 2019040101, our serial 0 Apr 3 11:00:10 slave pdns_server[19627]: Initiating transfer of 'replicateme.dev' from remote '192.168.250.52' Apr 3 11:00:10 slave pdns_server[19627]: Starting AXFR of 'replicateme.dev' from remote 192.168.250.52:52 Apr 3 11:00:10 slave pdns_server[19627]: AXFR started for 'replicateme.dev' Apr 3 11:00:10 slave pdns_server[19627]: AXFR of 'replicateme.dev' from remote 192.168.250.52:52 done Apr 3 11:00:10 slave pdns_server[19627]: Backend transaction started for 'replicateme.dev' storage Apr 3 11:00:10 slave pdns_server[19627]: AXFR done for 'replicateme.dev', zone committed with serial number 2019040101
Furthermore, this causes the domain to show up on the slave and we can query it as seen below:
pdns_control list-zones | grep replicateme; dig -t NS replicateme.dev @localhost +short;
For instance:
root@slave:~# pdns_control list-zones | grep replicateme replicateme.dev. root@slave:~# dig -t NS replicateme.dev @localhost +short ns1.example.com. ns2.example.com.
Ultimately, the master config in the /etc/powerdns/pdns.conf file will look like this:
allow-axfr-ips=135.181.95.52 allow-dnsupdate-from=127.0.0.0/8,::1 allow-notify-from=0.0.0.0/0,::/0 api=yes api-key=oL7TzKcAGGgmkdkb default-soa-content=pdns1.maxihoster.com. sysadmin.maxihoster.com. 2021101402 21600 3600 1209600 21600 disable-axfr=no disable-syslog=no include-dir=/etc/powerdns/pdns.d launch= log-dns-queries=yes log-timestamp=yes loglevel=5 master=yes primary=yes query-logging=yes
Moreover, the slave config in the /etc/powerdns/pdns.conf file will be similar to this:
api=yes api-key=lgAw2d170Y4mzyQw disable-syslog=no include-dir=/etc/powerdns/pdns.d launch= local-address=0.0.0.0, :: local-port=52 log-dns-queries=yes log-timestamp=yes query-logging=yes slave=yes slave-cycle-interval=60 superslave=yes
[Need further assistance? We are just a click away.]
Conclusion
In brief, the Support Engineers demonstrated how to configure DNS Master Slave replication in PowerDNS with ease.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
0 Comments