CentOS 7.x automated setup of bind dns server

From Notes_Wiki

Home > CentOS > CentOS 7.x > DevOps > Automated Configuration > Ansible > Ansible Playbooks > CentOS 7.x automated setup of bind dns server

The ansible script does basic configuration without MX records and does not supports multiple-zones with different hosts.

Variables are as follows:

zone_names
Names of zones. These must end with dot(.).
zone_address
A address of zone. That is if you defining example.com zone, what address should be resolved when you try http://example.com or ping example.com
name_server
You must have a DNS server. Hostname of DNS server from servers list defined later should be mentioned here.
servers
List of servers with name and IP


dns_servers.yaml

---
  - name: Configure DNS using bind
    hosts: dns_servers
    remote_user: root
 
    vars:
      zone_names: 
        - example.com.
      zone_address: 192.168.122.1
      allow_query_from: "10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16;"
      name_server: dns1
      recursion: yes
      servers:
        - { hostname: dns1, ip: 192.168.122.97 }
        - { hostname: mail1, ip: 192.168.122.27 }
        - { hostname: mail2, ip: 192.168.122.233 }

    tasks:
    - name: Install bind and bind-utils package
      yum: name="{{item}}" state=present
      with_items:
        - bind
        - bind-utils

    - name: Create custom named.conf with desired zone
      template: src=named.conf dest=/etc/named.conf owner=root group=named mode=640
      notify:
        - restart bind

    - name: Copy zone forward files for all zones to /var/named
      template: src="zone.forward" dest="/var/named/{{item}}forward" owner=root group=named mode=640
      with_items: "{{zone_names}}"
      notify:
        - restart bind

    - name: Disable IPv6 support
      lineinfile: dest=/etc/sysconfig/named line='OPTIONS="-4"' regexp="^OPTIONS" 
      notify:
        - restart bind

    - name: Start and enable bind service
      service: name=named state=started enabled=yes

    handlers:
    - name: restart bind
      service: name=named state=restarted


named.conf

options {
	listen-on port 53 { 127.0.0.1; 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     { localhost; {{allow_query_from}} };
	recursion {{recursion}};

	dnssec-enable no;
	dnssec-validation no;
	dnssec-lookaside auto;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";

	managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

{% for item in zone_names  %}

zone "{{item}}" IN {
   type master;
   file "{{item}}forward";
};

{% endfor %}


zone "." IN {
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


zone.forward

$TTL 3600 
@ SOA ns.{{item}} root.{{item}} (1 15m 5m 30d 1h) 
		IN	NS	{{name_server}}
		IN	A 	{{zone_address}}

{% for server1 in servers %}

{{server1.hostname}}	IN	A	{{server1.ip}}

{% endfor %}


hosts

[dns_servers]
192.168.122.97   



Home > CentOS > CentOS 7.x > DevOps > Automated Configuration > Ansible > Ansible Playbooks > CentOS 7.x automated setup of bind dns server