2022-05-09 12:31:16 +00:00
|
|
|
#jinja2: lstrip_blocks: "True (or False)", trim_blocks: "True (or False)"
|
2022-02-21 20:41:31 +00:00
|
|
|
#
|
|
|
|
# {{ ansible_managed }}
|
|
|
|
#
|
|
|
|
|
|
|
|
{% for view in bind9_views %}
|
|
|
|
view "{{ view.name }}" {
|
|
|
|
|
|
|
|
match-clients {
|
|
|
|
{% for clients in view.match_clients %}
|
|
|
|
{{ clients }};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
|
|
|
|
{% for zone in view.zones %}
|
2024-05-22 18:22:17 +00:00
|
|
|
zone "{{ zone.config.origin }}" {
|
2022-02-21 20:41:31 +00:00
|
|
|
|
|
|
|
# Hosts which are allowed to issue queries to the server. If not specified all
|
|
|
|
# hosts are allowed to make queries (defaults to allow-query {any;};
|
|
|
|
#
|
|
|
|
# NOTE:
|
|
|
|
# - The statements may be used in a zone, view or a global options
|
|
|
|
# clause.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.allow_query is defined and zone.config.allow_query | length > 0 %}
|
2022-02-21 20:41:31 +00:00
|
|
|
allow-query {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for entry in zone.config.allow_query %}
|
2022-02-21 20:41:31 +00:00
|
|
|
{{ entry }};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
{% else %}
|
|
|
|
# allow-query {};
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
# allow-query-on defines the server interface(s) from which queries
|
|
|
|
# are accepted and can be useful where a server is multi-homed,
|
|
|
|
# perhaps in conjunction with a view clause. Defaults to
|
|
|
|
# allow-query-on {any;};) meaning that queries are accepted on any
|
|
|
|
# server interface.
|
|
|
|
#
|
|
|
|
# NOTE:
|
|
|
|
# - The statements may be used in a zone, view or a global options
|
|
|
|
# clause.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.allow_query_on is defined and zone.config.allow_query_on | length > 0 %}
|
2022-02-21 20:41:31 +00:00
|
|
|
allow-query {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for entry in zone.config.allow_query_on %}
|
2022-02-21 20:41:31 +00:00
|
|
|
{{ entry }};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
{% else %}
|
|
|
|
# allow-query-on {};
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
# allow-transfer defines a match list e.g. IP address(es) that are
|
|
|
|
# allowed to transfer (copy) the zone information from the server
|
|
|
|
# (master or slave for the zone). The default behavior is to allow
|
|
|
|
# zone transfers to any host. While on its face this may seem an
|
|
|
|
# excessively friendly default, DNS data is essentially public (that's
|
|
|
|
# why its there) and the bad guys can get all of it anyway. However if
|
|
|
|
# the thought of anyone being able to transfer your precious zone file
|
|
|
|
# is repugnant, or (and this is far more significant) you are
|
|
|
|
# concerned about possible DoS attack initiated by XFER requests, then
|
|
|
|
# use the following policy.
|
|
|
|
#
|
|
|
|
# NOTE:
|
|
|
|
# - This statement may be used in a zone, view or global options clause.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.allow_transfer is defined and zone.config.allow_transfer | length > 0 %}
|
2022-02-21 20:41:31 +00:00
|
|
|
allow-transfer {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for entry in zone.config.allow_transfer %}
|
2022-02-21 20:41:31 +00:00
|
|
|
key {{ entry }};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
{% else %}
|
|
|
|
# allow-transfer {};
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
# allow-update defines an address_match_list of hosts that are allowed
|
|
|
|
# to submit dynamic updates for master zones, and thus this statement
|
|
|
|
# enables Dynamic DNS. The default in BIND 9 is to disallow updates
|
|
|
|
# from all hosts, that is, DDNS is disabled by default. This statement
|
|
|
|
# is mutually exclusive with update-policy and applies to master zones
|
|
|
|
# only. The example shows DDNS for three zones: the first disables
|
|
|
|
# DDNS explicitly, the second uses an IP-based list, and the third
|
|
|
|
# references a key clause. The allow-update in the first zone clause
|
|
|
|
# could have been omitted since it is the default behavior. Many
|
|
|
|
# people like to be cautious in case the default mode changes.
|
|
|
|
#
|
|
|
|
# NOTE:
|
|
|
|
# - This statement may be used in a zone, view or an options clause.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.allow_update is defined and zone.config.allow_update | length > 0 %}
|
2022-02-21 20:41:31 +00:00
|
|
|
allow-update {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for entry in zone.config.allow_update %}
|
2022-02-21 20:41:31 +00:00
|
|
|
key {{ entry }};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
{% else %}
|
|
|
|
# allow-update {};
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
# allow-update-forwarding defines a match list, for instance,
|
|
|
|
# IP address(es) that are allowed to submit dynamic updates to
|
|
|
|
# a 'slave' sever for onward transmission to a 'master'.
|
|
|
|
#
|
|
|
|
# NOTE:
|
|
|
|
# - This statement may be used in zone, view or an options clause.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.allow_update_forwarding is defined and zone.config.allow_update_forwarding | length > 0 %}
|
2022-02-21 20:41:31 +00:00
|
|
|
allow-update-forwarding {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for entry in zone.config.allow_update_forwarding %}
|
2022-02-21 20:41:31 +00:00
|
|
|
{{ entry }};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
{% else %}
|
|
|
|
# allow-update-forwarding {};
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
# Defines the file used by the zone in quoted string format, for
|
|
|
|
# instance, "slave/example.com" - or whatever convention you use. The
|
|
|
|
# file entry is mandatory for master and hint and optional - but
|
|
|
|
# highly recommended - for slave and not required for forward zones.
|
|
|
|
# The file may be an absolute path or relative to directory.
|
|
|
|
#
|
|
|
|
# NOTE:
|
|
|
|
# - If a type Slave has a file statement then any zone transfer
|
|
|
|
# will cause it to update this file. If the slave is reloaded then
|
|
|
|
# it will read this file and immediately start answering queries for
|
|
|
|
# the domain. If no file is specified it will immediately try to
|
|
|
|
# contact the Master and initiate a zone transfer. For obvious
|
|
|
|
# reasons the Slave cannot to zone queries until this zone transfer
|
|
|
|
# is complete. If the Master is not available or the Slave fails to
|
|
|
|
# contact the Master, ffor whatever reason, the zone may be left with
|
|
|
|
# no effective Authoritative Name Servers.
|
2022-05-09 12:31:16 +00:00
|
|
|
{% if zone.file is defined and zone.file | length > 0 and not zone.file.startswith('/') %}
|
2024-05-22 18:22:17 +00:00
|
|
|
file "{{ bind_config_directory }}/{{ zone.config.file }}";
|
2022-05-09 12:31:16 +00:00
|
|
|
{% elif zone.file is defined and zone.file | length > 0 and zone.file.startswith('/')%}
|
2024-05-22 18:22:17 +00:00
|
|
|
file "{{ zone.config.file }}";
|
2022-05-09 12:31:16 +00:00
|
|
|
{% else %}
|
|
|
|
# file "{{ bind_config_directory }}/...";
|
|
|
|
{% endif %}
|
2022-02-21 20:41:31 +00:00
|
|
|
|
2022-05-09 11:24:29 +00:00
|
|
|
# This option is only meaningful if the forwarders list is not empty. A
|
|
|
|
# value of first is the default and causes the server to query the
|
|
|
|
# forwarders first; if that does not answer the question, the server then
|
|
|
|
# looks for the answer itself. If only is specified, the server only queries
|
|
|
|
# the forwarders.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.forward is defined and zone.config.forward | length > 0 %}
|
|
|
|
forward {{ zone.config.forward }};
|
2022-05-09 11:24:29 +00:00
|
|
|
{% else %}
|
|
|
|
# forward first;
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
# This specifies a list of IP addresses to which queries are forwarded. The
|
|
|
|
# default is the empty list (no forwarding). Each address in the list can be
|
|
|
|
# associated with an optional port number and/or DSCP value, and a default
|
|
|
|
# port number and DSCP value can be set for the entire list.
|
|
|
|
# https://bind9.readthedocs.io/en/latest/reference.html#forwarding
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.forwarders is defined and zone.config.forwarders | length > 0 %}
|
2022-05-09 12:31:16 +00:00
|
|
|
forwarders {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for forwarder in zone.config.forwarders %}
|
2022-05-09 12:31:16 +00:00
|
|
|
{{ forwarder }};
|
2022-05-09 11:24:29 +00:00
|
|
|
{% endfor %}
|
2022-05-09 12:31:16 +00:00
|
|
|
};
|
2022-05-09 11:24:29 +00:00
|
|
|
{% else %}
|
|
|
|
# forwarders {};
|
|
|
|
{% endif %}
|
|
|
|
|
2022-02-21 20:41:31 +00:00
|
|
|
# master servers
|
|
|
|
# https://bind9.readthedocs.io/en/latest/manpages.html?highlight=masters#masters
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.masters is defined and zone.config.masters | length > 0 %}
|
2022-02-21 20:41:31 +00:00
|
|
|
masters {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for master in zone.config.masters %}
|
2022-02-21 20:41:31 +00:00
|
|
|
{{ master.ip }} key {{ master.tsigkey}};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
{% else %}
|
|
|
|
# masters {};
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
# notify behavior is applicable to both master zones (with
|
|
|
|
# 'type master;') and slave zones (with 'type slave;') and if
|
|
|
|
# set to 'yes' (the default) then, when a zone is loaded or
|
|
|
|
# changed, for example, after a zone transfer, NOTIFY messages
|
|
|
|
# are sent to the name servers defined in the NS records for
|
|
|
|
# the zone (except itself and the 'Primary Master' name server
|
|
|
|
# defined in the SOA record) and to any IPs listed in any
|
|
|
|
# also-notify statement.
|
|
|
|
#
|
|
|
|
# If set to 'no' NOTIFY messages are not sent.
|
|
|
|
# If set to 'explicit' NOTIFY is only sent to those IP(s) listed
|
|
|
|
# in an also-notify statement.
|
|
|
|
#
|
|
|
|
# NOTE:
|
|
|
|
# - This statement may be specified in zone, view clauses or in a
|
|
|
|
# global options clause.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.notify is defined and zone.config.notify %}
|
2022-05-09 12:31:16 +00:00
|
|
|
notify yes;
|
2024-05-22 18:22:17 +00:00
|
|
|
{% elif zone.config.notify is defined and not zone.config.notify %}
|
2022-05-09 12:31:16 +00:00
|
|
|
notify no;
|
|
|
|
{% else %}
|
|
|
|
# notify yes | no;
|
|
|
|
{% endif %}
|
|
|
|
|
2022-02-21 20:41:31 +00:00
|
|
|
|
|
|
|
# Zones configured for dynamic DNS may use this option to set the
|
|
|
|
# update method to be used for the zone serial number in the SOA
|
|
|
|
# record.
|
|
|
|
#
|
|
|
|
# With the default setting of serial-update-method increment;, the
|
|
|
|
# SOA serial number is incremented by one each time the zone is
|
|
|
|
# updated.
|
|
|
|
#
|
|
|
|
# When set to serial-update-method unixtime;, the SOA serial number
|
|
|
|
# is set to the number of seconds since the Unix epoch, unless the
|
|
|
|
# serial number is already greater than or equal to that value, in
|
|
|
|
# which case it is simply incremented by one.
|
|
|
|
#
|
|
|
|
# When set to serial-update-method date;, the new SOA serial number
|
|
|
|
# is the current date in the form “YYYYMMDD”, followed by two
|
|
|
|
# zeroes, unless the existing serial number is already greater than
|
|
|
|
# or equal to that value, in which case it is incremented by one.
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.serial_update_method is defined %}
|
|
|
|
serial-update-method {{ zone.config.serial_update_method }};
|
2022-02-21 20:41:31 +00:00
|
|
|
{% else %}
|
|
|
|
# serial-update-method [date | increment | unixtime ];
|
|
|
|
{% endif %}
|
|
|
|
|
2024-05-22 18:22:17 +00:00
|
|
|
type {{ zone.config.type }};
|
2022-02-21 20:41:31 +00:00
|
|
|
|
2023-01-18 22:35:36 +00:00
|
|
|
# The update-policy clause allows more fine-grained control over which
|
|
|
|
# updates are allowed. It specifies a set of rules, in which each rule
|
|
|
|
# either grants or denies permission for one or more names in the zone to be
|
|
|
|
# updated by one or more identities. Identity is determined by the key that
|
|
|
|
# signed the update request, using either TSIG or SIG(0).
|
|
|
|
# https://bind9.readthedocs.io/en/v9_16_5/reference.html#dynamic-update-policies
|
2024-05-22 18:22:17 +00:00
|
|
|
{% if zone.config.update_policies is defined and zone.config.update_policies | length > 0 %}
|
2023-01-18 22:35:36 +00:00
|
|
|
update-policy {
|
2024-05-22 18:22:17 +00:00
|
|
|
{% for update_policy in zone.config.update_policies %}
|
2023-01-18 22:35:36 +00:00
|
|
|
{{ update_policy.action }} {{ update_policy.identity }} {{ update_policy.ruletype }} {{ update_policy.name | default('') }} {{ update_policy.types | default('') | join(' ') }};
|
|
|
|
{% endfor %}
|
|
|
|
};
|
|
|
|
{% else %}
|
|
|
|
# update-policy {};
|
|
|
|
{% endif %}
|
|
|
|
|
2022-02-21 20:41:31 +00:00
|
|
|
};
|
2022-05-09 12:31:16 +00:00
|
|
|
|
2022-02-21 20:41:31 +00:00
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
};
|
|
|
|
{% endfor %}
|