refactor(dns): set source of dns domain on fw.yaml

This commit is contained in:
il
2026-06-29 11:46:53 +09:00
parent 5ccb60bd2a
commit 88e85fff56
43 changed files with 606 additions and 406 deletions
@@ -3,8 +3,8 @@ include "/etc/bind/acme.key";
options {
directory "/var/cache/bind";
listen-on port 53 { {{ hostvars['fw']['network4']['bind']['server'] }}; };
listen-on-v6 port 53 { {{ hostvars['fw']['network6']['bind']['server'] }}; };
listen-on port 53 { {{ hostvars['fw']['network']['bind']['ipv4']['server'] }}; };
listen-on-v6 port 53 { {{ hostvars['fw']['network']['bind']['ipv6']['server'] }}; };
// Authoritative DNS setting
allow-recursion { none; };
@@ -16,47 +16,39 @@ options {
check-names master warn;
};
zone "ilnmors.internal." {
zone "{{ domain['internal'] }}." {
type primary;
file "/var/lib/bind/db.ilnmors.internal";
file "/var/lib/bind/db.{{ domain['internal'] }}";
notify yes;
// ACME-01 challenge policy. It allows only TXT record of subdomain update.
update-policy {
grant acme-key subdomain ilnmors.internal. TXT;
grant acme-key subdomain {{ domain['internal'] }}. TXT;
};
};
zone "1.168.192.in-addr.arpa" {
type primary;
file "/var/lib/bind/db.1.168.192.in-addr.arpa";
notify yes;
};
zone "10.168.192.in-addr.arpa" {
type primary;
file "/var/lib/bind/db.10.168.192.in-addr.arpa";
notify yes;
};
zone "0.0.0.0.0.0.0.0.1.0.0.0.0.0.d.f.ip6.arpa" {
type primary;
file "/var/lib/bind/db.1.00df.ip6.arpa";
notify yes;
};
zone "0.0.0.0.0.0.0.0.0.1.0.0.0.0.d.f.ip6.arpa" {
type primary;
file "/var/lib/bind/db.10.00df.ip6.arpa";
notify yes;
};
zone "ilnmors.com." {
zone "{{ domain['public'] }}." {
//split horizon dns
type primary;
file "/var/lib/bind/db.ilnmors.com";
file "/var/lib/bind/db.{{ domain['public'] }}";
notify yes;
};
{% for net, zone in network['reverse_zone']['ipv4'].items() %}
zone "{{ zone }}" {
type primary;
file "/var/lib/bind/db.{{ net }}.ipv4.rev";
notify yes;
};
{% endfor %}
{% for net, zone in network['reverse_zone']['ipv6'].items() %}
zone "{{ zone }}" {
type primary;
file "/var/lib/bind/db.{{ net }}.ipv6.rev";
notify yes;
};
{% endfor %}
logging {
channel default_log {
stderr;
@@ -1,12 +0,0 @@
$TTL 86400
@ IN SOA bind.ilnmors.internal. bind.ilnmors.internal. (
2026021201 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS bind.ilnmors.internal.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR fw.ilnmors.internal.
0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR console.ilnmors.internal.
@@ -1,14 +0,0 @@
$TTL 86400
@ IN SOA bind.ilnmors.internal. bind.ilnmors.internal. (
2026021201 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS bind.ilnmors.internal.
1 IN PTR fw.ilnmors.internal.
2 IN PTR switch.ilnmors.internal.
20 IN PTR console.ilnmors.internal.
101 IN PTR printer.ilnmors.internal.
@@ -1,18 +0,0 @@
$TTL 86400
@ IN SOA bind.ilnmors.internal. bind.ilnmors.internal. (
2026021201 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS bind.ilnmors.internal.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR fw.ilnmors.internal.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR blocky.ilnmors.internal.
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR bind.ilnmors.internal.
9.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR bk.ilnmors.internal.
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR vmm.ilnmors.internal.
1.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR infra.ilnmors.internal.
2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR auth.ilnmors.internal.
3.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR app.ilnmors.internal.
@@ -1,18 +0,0 @@
$TTL 86400
@ IN SOA bind.ilnmors.internal. bind.ilnmors.internal. (
2026021201 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS bind.ilnmors.internal.
1 IN PTR fw.ilnmors.internal.
2 IN PTR blocky.ilnmors.internal.
3 IN PTR bind.ilnmors.internal.
9 IN PTR bk.ilnmors.internal.
10 IN PTR vmm.ilnmors.internal.
11 IN PTR infra.ilnmors.internal.
12 IN PTR auth.ilnmors.internal.
13 IN PTR app.ilnmors.internal.
@@ -1,14 +0,0 @@
$TTL 86400
@ IN SOA bind.ilnmors.internal. bind.ilnmors.internal. (
2026021201 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS bind.ilnmors.internal.
@ IN A 192.168.10.12
@ IN AAAA fd00:10::12
* IN A 192.168.10.12
* IN AAAA fd00:10::12
@@ -1,43 +0,0 @@
$TTL 86400
@ IN SOA bind.ilnmors.internal. bind.ilnmors.internal. (
2026021201 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS bind.ilnmors.internal.
bind IN A 192.168.10.3
bind IN AAAA fd00:10::3
fw IN A 192.168.10.1
fw IN AAAA fd00:10::1
blocky IN A 192.168.10.2
blocky IN AAAA fd00:10::2
bk IN A 192.168.10.9
bk IN AAAA fd00:10::9
vmm IN A 192.168.10.10
vmm IN AAAA fd00:10::10
infra IN A 192.168.10.11
infra IN AAAA fd00:10::11
auth IN A 192.168.10.12
auth IN AAAA fd00:10::12
app IN A 192.168.10.13
app IN AAAA fd00:10::13
switch IN A 192.168.1.2
console IN A 192.168.1.20
console IN AAAA fd00:1::20
printer IN A 192.168.1.101
init.vmm IN CNAME vmm.ilnmors.internal.
ntp IN CNAME fw.ilnmors.internal.
crowdsec IN CNAME fw.ilnmors.internal.
kopia IN CNAME bk.ilnmors.internal.
ca IN CNAME infra.ilnmors.internal.
postgresql IN CNAME infra.ilnmors.internal.
ldap IN CNAME infra.ilnmors.internal.
maddy IN CNAME infra.ilnmors.internal.
prometheus IN CNAME infra.ilnmors.internal.
loki IN CNAME infra.ilnmors.internal.
grafana IN CNAME infra.ilnmors.internal.
authelia IN CNAME auth.ilnmors.internal.
*.app IN CNAME app.ilnmors.internal.
@@ -0,0 +1,50 @@
$TTL 86400
@ IN SOA {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. (
{{ network['dns_serial'] }} ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}.
{%
set hosts = (
network
| dict2items
| rejectattr('key', 'in', ['dns_serial', 'subnet', 'reverse_zone'])
| list
)
%}
{%
set alias_hosts = (
network
| dict2items
| rejectattr('key', 'in', ['dns_serial', 'subnet', 'reverse_zone'])
| selectattr('value.alias', 'defined')
| list
)
%}
{% for item in hosts %}
{% set name = item['key'] %}
{% set host = item['value'] %}
{% if host['ipv4'] is defined %}
{% if host['ipv4']['server'] is defined %}
{{ "%-12s" | format(name) }}IN A {{ host['ipv4']['server'] }}
{% elif host['ipv4']['client'] is defined %}
{{ "%-12s" | format(name) }}IN A {{ host['ipv4']['client'] }}
{% endif %}
{% endif %}
{% if host['ipv6'] is defined %}
{% if host['ipv6']['server'] is defined %}
{{ "%-12s" | format(name) }}IN AAAA {{ host['ipv6']['server'] }}
{% elif host['ipv6']['client'] is defined %}
{{ "%-12s" | format(name) }}IN AAAA {{ host['ipv6']['client'] }}
{% endif %}
{% endif %}
{% endfor %}
{% for item in alias_hosts %}
{% for alias in item['value']['alias'] %}
{{ "%-12s" | format(alias) }}IN CNAME {{ item['key'] }}.{{ domain['internal'] }}.
{% endfor %}
{% endfor %}
@@ -0,0 +1,25 @@
$TTL 86400
@ IN SOA {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. (
{{ network['dns_serial'] }} ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}.
{% set hosts = (
network
| dict2items
| rejectattr('key', 'in', ['dns_serial', 'subnet', 'reverse_zone'])
| list
) %}
{% for item in hosts %}
{% set name = item['key'] %}
{% set host = item['value'] %}
{% if host['ipv4'] is defined and host['ipv4'][reverse_net] is defined and host['ipv4']['reverse'] is defined %}
{{ "%-12s" | format(host['ipv4']['reverse']) }}IN PTR {{ name }}.{{ domain['internal'] }}.
{% endif %}
{% endfor %}
@@ -0,0 +1,24 @@
$TTL 86400
@ IN SOA {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. (
{{ network['dns_serial'] }} ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}.
{% set hosts = (
network
| dict2items
| rejectattr('key', 'in', ['dns_serial', 'subnet', 'reverse_zone'])
| list
) %}
{% for item in hosts %}
{% set name = item['key'] %}
{% set host = item['value'] %}
{% if host['ipv6'] is defined and host['ipv6'][reverse_net] is defined and host['ipv6']['reverse'] is defined %}
{{ "%-36s" | format(host['ipv6']['reverse']) }}IN PTR {{ name }}.{{ domain['internal'] }}.
{% endif %}
{% endfor %}
@@ -0,0 +1,14 @@
$TTL 86400
@ IN SOA {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}. (
{{ network['dns_serial'] }} ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
IN NS {{ services['bind']['domain']['internal'] }}.{{ domain['internal'] }}.
@ IN A {{ network['auth']['ipv4']['server'] }}
@ IN AAAA {{ network['auth']['ipv6']['server'] }}
* IN A {{ network['auth']['ipv4']['server'] }}
* IN AAAA {{ network['auth']['ipv6']['server'] }}
@@ -5,14 +5,14 @@ connectIPVersion: dual
ports:
dns:
- "{{ hostvars['fw']['network4']['blocky']['server'] }}:{{ services['blocky']['ports']['dns'] }}"
- "[{{ hostvars['fw']['network6']['blocky']['server'] }}]:{{ services['blocky']['ports']['dns'] }}"
- "{{ hostvars['fw']['network']['blocky']['ipv4']['server'] }}:{{ services['blocky']['ports']['dns'] }}"
- "[{{ hostvars['fw']['network']['blocky']['ipv6']['server'] }}]:{{ services['blocky']['ports']['dns'] }}"
tls:
- "{{ hostvars['fw']['network4']['blocky']['server'] }}:{{ services['blocky']['ports']['dot'] }}"
- "[{{ hostvars['fw']['network6']['blocky']['server'] }}]:{{ services['blocky']['ports']['dot'] }}"
- "{{ hostvars['fw']['network']['blocky']['ipv4']['server'] }}:{{ services['blocky']['ports']['dot'] }}"
- "[{{ hostvars['fw']['network']['blocky']['ipv6']['server'] }}]:{{ services['blocky']['ports']['dot'] }}"
https:
- "{{ hostvars['fw']['network4']['blocky']['server'] }}:{{ services['blocky']['ports']['https'] }}"
- "[{{ hostvars['fw']['network6']['blocky']['server'] }}]:{{ services['blocky']['ports']['https'] }}"
- "{{ hostvars['fw']['network']['blocky']['ipv4']['server'] }}:{{ services['blocky']['ports']['https'] }}"
- "[{{ hostvars['fw']['network']['blocky']['ipv6']['server'] }}]:{{ services['blocky']['ports']['https'] }}"
log:
level: info
@@ -31,12 +31,12 @@ upstreams:
conditional:
fallbackUpstream: false
mapping:
{{ domain['internal'] }}: "{{ hostvars['fw']['network4']['bind']['server'] }}, {{ hostvars['fw']['network6']['bind']['server'] }}"
{{ domain['public'] }}: "{{ hostvars['fw']['network4']['bind']['server'] }}, {{ hostvars['fw']['network6']['bind']['server'] }}"
1.168.192.in-addr.arpa: "{{ hostvars['fw']['network4']['bind']['server'] }}, {{ hostvars['fw']['network6']['bind']['server'] }}"
10.168.192.in-addr.arpa: "{{ hostvars['fw']['network4']['bind']['server'] }}, {{ hostvars['fw']['network6']['bind']['server'] }}"
0.0.0.0.0.0.0.0.1.0.0.0.0.0.d.f.ip6.arpa: "{{ hostvars['fw']['network4']['bind']['server'] }}, {{ hostvars['fw']['network6']['bind']['server'] }}"
0.0.0.0.0.0.0.0.0.1.0.0.0.0.d.f.ip6.arpa: "{{ hostvars['fw']['network4']['bind']['server'] }}, {{ hostvars['fw']['network6']['bind']['server'] }}"
{{ domain['internal'] }}: "{{ hostvars['fw']['network']['bind']['ipv4']['server'] }}, {{ hostvars['fw']['network']['bind']['ipv6']['server'] }}"
{{ domain['public'] }}: "{{ hostvars['fw']['network']['bind']['ipv4']['server'] }}, {{ hostvars['fw']['network']['bind']['ipv6']['server'] }}"
{{ network['reverse_zone']['ipv4']['client'] }}: "{{ hostvars['fw']['network']['bind']['ipv4']['server'] }}, {{ hostvars['fw']['network']['bind']['ipv6']['server'] }}"
{{ network['reverse_zone']['ipv4']['server'] }}: "{{ hostvars['fw']['network']['bind']['ipv4']['server'] }}, {{ hostvars['fw']['network']['bind']['ipv6']['server'] }}"
{{ network['reverse_zone']['ipv6']['client'] }}: "{{ hostvars['fw']['network']['bind']['ipv4']['server'] }}, {{ hostvars['fw']['network']['bind']['ipv6']['server'] }}"
{{ network['reverse_zone']['ipv6']['server'] }}: "{{ hostvars['fw']['network']['bind']['ipv4']['server'] }}, {{ hostvars['fw']['network']['bind']['ipv6']['server'] }}"
vpn.{{ domain['public'] }}: "tcp-tls:1.1.1.1:853, tcp-tls:1.0.0.1:853, tcp-tls:[2606:4700:4700::1111]:853, tcp-tls:[2606:4700:4700::1001]:853"
blocking:
@@ -1,9 +1,9 @@
# 1. Access Control (IPv4)
allow {{ hostvars['fw']['network4']['subnet']['client'] }}
allow {{ hostvars['fw']['network4']['subnet']['server'] }}
allow {{ hostvars['fw']['network4']['subnet']['wg'] }}
allow {{ hostvars['fw']['network']['subnet']['ipv4']['client'] }}
allow {{ hostvars['fw']['network']['subnet']['ipv4']['server'] }}
allow {{ hostvars['fw']['network']['subnet']['ipv4']['wg'] }}
# 2. Access Control (IPv6)
allow {{ hostvars['fw']['network6']['subnet']['client'] }}
allow {{ hostvars['fw']['network6']['subnet']['server'] }}
allow {{ hostvars['fw']['network6']['subnet']['wg'] }}
allow {{ hostvars['fw']['network']['subnet']['ipv6']['client'] }}
allow {{ hostvars['fw']['network']['subnet']['ipv6']['server'] }}
allow {{ hostvars['fw']['network']['subnet']['ipv6']['wg'] }}
@@ -2,7 +2,7 @@
"Dhcp4": {
"subnet4": [
{
"subnet": "{{ hostvars['fw']['network4']['subnet']['client'] }}",
"subnet": "{{ hostvars['fw']['network']['subnet']['ipv4']['client'] }}",
"pools" : [
{
"pool": "192.168.1.254-192.168.1.254"
@@ -11,11 +11,11 @@
"option-data": [
{
"name": "routers",
"data": "{{ hostvars['fw']['network4']['firewall']['client'] }}"
"data": "{{ hostvars['fw']['network']['fw']['ipv4']['client'] }}"
},
{
"name": "domain-name-servers",
"data": "{{ hostvars['fw']['network4']['blocky']['server'] }}"
"data": "{{ hostvars['fw']['network']['blocky']['ipv4']['server'] }}"
},
{
"name": "domain-name",
@@ -25,17 +25,17 @@
"reservations": [
{
"hw-address": "58:04:4f:18:6c:5e",
"ip-address": "{{ hostvars['fw']['network4']['switch']['client'] }}",
"ip-address": "{{ hostvars['fw']['network']['switch']['ipv4']['client'] }}",
"hostname": "switch"
},
{
"hw-address": "d8:e2:df:ff:1b:d5",
"ip-address": "{{ hostvars['fw']['network4']['console']['client'] }}",
"ip-address": "{{ hostvars['fw']['network']['console']['ipv4']['client'] }}",
"hostname": "console"
},
{
"hw-address": "38:ca:84:94:5e:06",
"ip-address": "{{ hostvars['fw']['network4']['printer']['client'] }}",
"ip-address": "{{ hostvars['fw']['network']['printer']['ipv4']['client'] }}",
"hostname": "printer"
}
],
@@ -43,7 +43,7 @@
"interface": "client"
},
{
"subnet": "{{ hostvars['fw']['network4']['subnet']['user'] }}",
"subnet": "{{ hostvars['fw']['network']['subnet']['ipv4']['user'] }}",
"pools" : [
{
"pool": "192.168.20.2-192.168.20.254"
@@ -52,11 +52,11 @@
"option-data": [
{
"name": "routers",
"data": "{{ hostvars['fw']['network4']['firewall']['user'] }}"
"data": "{{ hostvars['fw']['network']['fw']['ipv4']['user'] }}"
},
{
"name": "domain-name-servers",
"data": "{{ hostvars['fw']['network4']['blocky']['server'] }}"
"data": "{{ hostvars['fw']['network']['blocky']['ipv4']['server'] }}"
},
{
"name": "domain-name",