unbound/templates/unbound/zones.conf.j2

63 lines
2.4 KiB
Django/Jinja

{% for zone in unbound_zones %}
# zone: {{ zone.zone }}
server:
local-zone: "{{ zone.zone }}." {{ zone.type | default('static') }}
{% for record in zone.records %}
{% if record.get('type', 'A') == 'MX' %}
local-data: "{{ record.name }}. IN MX {{ record.priority }} {{ record.value }}"
{% elif record.get('type', 'A') == 'CNAME' %}
local-data: "{{ record.name }}. IN CNAME {{ record.value }}"
{% elif record.get('type', 'A') == 'TXT' %}
local-data: "{{ record.name }}. IN TXT \"{{ record.value }}\""
{% elif record.get('type', 'A') == 'PTR' %}
local-data: "{{ record.name }}. IN PTR {{ record.value }}"
{% else %}
local-data: "{{ record.name }}. IN {{ record.get('type', 'A') }} {{ record.value }}"
{% endif %}
{% endfor %}
{% endfor %}
{# generate reverse dns zones from a records #}
{% set reverse_zones = {} %}
{% for zone in unbound_zones %}
{% for record in zone.records %}
{% if record.get('type', 'A') == 'A' %}
{% set ip_parts = record.value.split('.') %}
{% if ip_parts[0] == '192' and ip_parts[1] == '168' %}
{% set reverse_zone = ip_parts[2] + '.168.192.in-addr.arpa' %}
{% set reverse_record = ip_parts[3] + '.' + reverse_zone %}
{% if reverse_zone not in reverse_zones %}
{% set _ = reverse_zones.update({reverse_zone: []}) %}
{% endif %}
{% set _ = reverse_zones[reverse_zone].append({'ptr': reverse_record, 'hostname': record.name}) %}
{% elif ip_parts[0] == '10' and ip_parts[1] == '8' %}
{% set reverse_zone = '8.10.in-addr.arpa' %}
{% set reverse_record = ip_parts[3] + '.' + ip_parts[2] + '.' + reverse_zone %}
{% if reverse_zone not in reverse_zones %}
{% set _ = reverse_zones.update({reverse_zone: []}) %}
{% endif %}
{% set _ = reverse_zones[reverse_zone].append({'ptr': reverse_record, 'hostname': record.name}) %}
{% elif ip_parts[0] == '10' and ip_parts[1] == '0' %}
{% set reverse_zone = '0.10.in-addr.arpa' %}
{% set reverse_record = ip_parts[3] + '.' + ip_parts[2] + '.' + reverse_zone %}
{% if reverse_zone not in reverse_zones %}
{% set _ = reverse_zones.update({reverse_zone: []}) %}
{% endif %}
{% set _ = reverse_zones[reverse_zone].append({'ptr': reverse_record, 'hostname': record.name}) %}
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
{% for reverse_zone, ptr_records in reverse_zones.items() %}
# reverse dns zone: {{ reverse_zone }}
server:
local-zone: "{{ reverse_zone }}." static
{% for ptr_record in ptr_records %}
local-data: "{{ ptr_record.ptr }}. IN PTR {{ ptr_record.hostname }}."
{% endfor %}
{% endfor %}