DNS Slave with bind and Ansible
Setup your DNS Slave with Ansible
Clone the Ansible repository
~$ git clone https://github.com/resmo/ansible-role-bind.git
~$ cd ansible-role-bind
Create your own playbook, i use a template i found on github named ansible-role-bind. Replace example.com with your domain and 192.168.0.201 with the ipv4 of your DNS Master.
~$ vi dns-slave.yml
---
- hosts: dns_slave
vars:
my_hostname: "dns2"
my_domain: "example.com"
my_nameserver1: "127.0.0.1"
my_nameserver2: "192.168.0.200"
my_nameserver3: "8.8.8.8"
bind_config_slave_zones:
- name: example.com
masters: [ '192.168.0.201' ]
zones:
- example.com
- vm.example.com
- dyn.example.com
tasks:
- name: "Change machine hostname"
hostname: name=
- name: "Set resolvconf nameserver"
blockinfile:
dest=/etc/resolvconf/resolv.conf.d/base
block= |
search
nameserver
nameserver
nameserver
- name: "Restart resolvconf service"
service:
name=resolvconf
enabled=yes
state=restarted
- name: "Restart DNS Service"
service:
name=bind9
enabled=yes
state=restarted
roles:
- ansible-role-bind
~$ vi ansible_hosts
[dns_slave]
dns2.example.com ansible_connection=ssh ansible_ssh_user=root
~$ ansible-playbook -i ansible_hosts dns-slave.yml
Go to your named.conf or your zone files and add ipv4 of the Slave DNS to the line allow-transfer
~# ssh dns@example.com
~# vi /etc/named.conf
allow-query { localhost; 192.168.0.0/24; };
allow-transfer { localhost; 192.168.0.201; }; # Slave DNS ipv4.
recursion no;
Go to your DNS Master, and edit your zone file
~# vi /etc/bind/example.com.zone
$TTL 86400
@ IN SOA dns.example.com. root.example.com. (
2014090401 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
; Name server's
IN NS dns.example.com.
IN NS dns2.example.com.
Check your conf and zone files
~# named-checkconf /etc/bind/named.conf
~# named-checkconf /etc/bind/named.conf.options
~# named-checkzone example.com /etc/bind/example.com.zone
~# named-checkzone vm.example.com /etc/bind/vm.example.com.zone
Restart bind
~# service bind9 restart
Go to Slave DNS
Test if you can tranfer the zone(s), replace dns.example.com by you DNS Master ip in our case is 192.168.0.200
~$ dig axfr example.com @dns.example.com
Open firewall on the Slave DNS Machine
On OpenStack / AWS you need a security group, and add a security rule for port 53 both UDP and TCP.
In case you have iptables do
~# iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
~# iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
~# iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
~# iptables -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
Login on your Laptop
~$ dig foo.example.com @dns2.example.com