This commit is contained in:
Mike McFetridge
2026-07-20 09:23:17 -04:00
parent c1315882da
commit 72272e4006
3179 changed files with 562960 additions and 14 deletions
+87
View File
@@ -0,0 +1,87 @@
services:
<< service_name >>:
image: docker.io/ubuntu/bind9:9.20-24.10_edge
restart: << restart_policy >>
<%- if container_hostname %>
hostname: << container_hostname >>
<%- endif %>
environment:
- TZ=<< container_timezone >>
- BIND9_USER=bind
<%- if network_mode == 'host' %>
network_mode: host
<%- elif network_mode == 'bridge' or network_mode == 'macvlan' %>
networks:
<%- if network_mode == 'macvlan' %>
<< network_name >>:
ipv4_address: << network_macvlan_ipv4_address >>
<%- elif network_mode == 'bridge' %>
<< network_name >>:
<%- endif %>
<%- endif %>
<%- if network_mode == '' or network_mode == 'bridge' %>
ports:
- "53:53/tcp"
- "53:53/udp"
<%- endif %>
volumes:
<%- if volume_mode == 'mount' %>
- << volume_mount_path >>/config:/etc/bind:rw
- << volume_mount_path >>/zones:/var/lib/bind:rw
- << volume_mount_path >>/cache:/var/cache/bind:rw
<%- else %>
- << service_name >>_config:/etc/bind
- << service_name >>_zones:/var/lib/bind
- << service_name >>_cache:/var/cache/bind
<%- endif %>
<%- if network_mode == 'bridge' or network_mode == 'macvlan' %>
networks:
<< network_name >>:
<%- if network_external %>
external: true
<%- else %>
<%- if network_mode == 'macvlan' %>
driver: macvlan
driver_opts:
parent: << network_macvlan_parent_interface >>
ipam:
config:
- subnet: << network_macvlan_subnet >>
gateway: << network_macvlan_gateway >>
name: << network_name >>
<%- elif network_mode == 'bridge' %>
driver: bridge
<%- endif %>
<%- endif %>
<%- endif %>
<%- if volume_mode == 'local' %>
volumes:
<< service_name >>_config:
driver: local
<< service_name >>_zones:
driver: local
<< service_name >>_cache:
driver: local
<%- elif volume_mode == 'nfs' %>
volumes:
<< service_name >>_config:
driver: local
driver_opts:
type: nfs
o: addr=<< volume_nfs_server >>,<< volume_nfs_options >>
device: ":<< volume_nfs_path >>/config"
<< service_name >>_zones:
driver: local
driver_opts:
type: nfs
o: addr=<< volume_nfs_server >>,<< volume_nfs_options >>
device: ":<< volume_nfs_path >>/zones"
<< service_name >>_cache:
driver: local
driver_opts:
type: nfs
o: addr=<< volume_nfs_server >>,<< volume_nfs_options >>
device: ":<< volume_nfs_path >>/cache"
<%- endif %>
+67
View File
@@ -0,0 +1,67 @@
// BIND9 Main Configuration File
// Documentation: https://bind9.readthedocs.io/
<%- if tsig_enabled %>
include "/etc/bind/tsig.key";
<%- endif %>
acl "trusted" {
127.0.0.1;
::1;
10.0.0.0/8;
172.16.0.0/12;
192.168.0.0/16;
};
options {
directory "/var/cache/bind";
// DNS forwarders for recursive queries
forwarders {
1.1.1.1;
8.8.8.8;
};
// Allow recursion from trusted networks only
allow-recursion { trusted; };
// Allow queries from any (adjust as needed)
allow-query { any; };
// Disable zone transfers by default (enable per-zone with TSIG)
allow-transfer { none; };
// DNSSEC validation
dnssec-validation auto;
// Listen on all interfaces
listen-on { any; };
listen-on-v6 { any; };
// Disable query logging (enable for debugging)
// querylog yes;
};
// Local zones
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
// Include your custom zones
include "/etc/bind/named.conf.zones";
@@ -0,0 +1,14 @@
zone "<< domain_name >>" {
type master;
file "/var/lib/bind/db.primary.zone";
<%- if tsig_enabled %>
allow-transfer { key "tsig-transfer-key"; };
allow-update { key "tsig-transfer-key"; };
<%- endif %>
<%- if dnssec_enabled %>
dnssec-policy default;
inline-signing yes;
<%- endif %>
};
+6
View File
@@ -0,0 +1,6 @@
<%- if tsig_enabled %>
key "tsig-transfer-key" {
algorithm hmac-sha256;
secret "<< tsig_key_secret >>";
};
<%- endif %>
+11
View File
@@ -0,0 +1,11 @@
$TTL 86400
@ IN SOA ns1.<< domain_name >>. admin.<< domain_name >>. (
2026010101 ; serial
3600 ; refresh
900 ; retry
604800 ; expire
86400 ; minimum
)
@ IN NS ns1.<< domain_name >>.
ns1 IN A 127.0.0.1
+262
View File
@@ -0,0 +1,262 @@
{
"slug": "bind9",
"kind": "compose",
"metadata": {
"name": "BIND9",
"description": "The most widely used authoritative and recursive DNS server. This template includes example zones, TSIG authentication for secure zone transfers, and DNSSEC support.",
"tags": [
"network",
"volume"
],
"icon": {
"provider": "selfhst",
"id": "bind-9"
},
"draft": false,
"version": {
"name": "9.20-24.10_edge",
"source_dep_name": "docker.io/ubuntu/bind9",
"source_dep_version": "9.20-24.10_edge"
}
},
"variables": [
{
"title": "dns_security",
"name": "dns-security",
"items": [
{
"name": "dnssec_enabled",
"type": "bool",
"title": "DNSSEC",
"required": false
}
]
},
{
"title": "dns_zone",
"name": "dns-zone",
"items": [
{
"name": "domain_name",
"type": "str",
"title": "Primary domain name",
"required": false,
"default": "home.arpa",
"config": {
"placeholder": "home.arpa"
}
},
{
"name": "tsig_enabled",
"type": "bool",
"title": "TSIG",
"required": false
},
{
"name": "tsig_key_secret",
"type": "secret",
"title": "TSIG key secret",
"required": false,
"needs": [
"tsig_enabled=true"
],
"config": {
"autogenerated": {
"kind": "base64",
"bytes": 32
}
}
}
]
},
{
"title": "Volume",
"name": "volume",
"items": [
{
"name": "volume_mode",
"type": "enum",
"title": "Volume Mode",
"required": true,
"default": "local",
"config": {
"options": [
"local",
"mount",
"nfs"
]
}
},
{
"name": "volume_mount_path",
"type": "str",
"title": "Volume Mount Path",
"required": true,
"default": "/data",
"needs": [
"volume_mode=mount"
],
"config": {
"placeholder": "/data"
}
},
{
"name": "volume_nfs_server",
"type": "str",
"title": "Volume Nfs Server",
"required": true,
"default": "NFS_SERVER",
"needs": [
"volume_mode=nfs"
],
"config": {
"placeholder": "NFS_SERVER"
}
},
{
"name": "volume_nfs_path",
"type": "str",
"title": "Volume Nfs Path",
"required": true,
"default": "/export",
"needs": [
"volume_mode=nfs"
],
"config": {
"placeholder": "/export"
}
},
{
"name": "volume_nfs_options",
"type": "str",
"title": "Volume Nfs Options",
"required": true,
"default": "rw,nolock,soft",
"needs": [
"volume_mode=nfs"
],
"config": {
"placeholder": "rw,nolock,soft"
}
}
]
},
{
"title": "General",
"name": "general",
"items": [
{
"name": "service_name",
"type": "str",
"title": "Service Name",
"required": false,
"default": "bind9",
"config": {
"placeholder": "bind9"
}
},
{
"name": "container_hostname",
"type": "str",
"title": "Container Hostname",
"required": false
},
{
"name": "container_timezone",
"type": "str",
"title": "Container Timezone",
"required": false,
"config": {
"placeholder": "Europe/Berlin"
}
},
{
"name": "restart_policy",
"type": "enum",
"title": "Restart Policy",
"required": true,
"default": "unless-stopped",
"config": {
"options": [
"unless-stopped",
"always",
"on-failure",
"no"
]
}
},
{
"name": "network_mode",
"type": "enum",
"title": "Network mode",
"required": false,
"default": "bridge",
"config": {
"options": [
"bridge",
"macvlan",
"host"
]
}
},
{
"name": "network_external",
"type": "bool",
"title": "External Network",
"required": false,
"default": false
},
{
"name": "network_macvlan_parent_interface",
"type": "str",
"title": "Parent Interface",
"required": false,
"default": "",
"config": {
"placeholder": "eth0"
}
},
{
"name": "network_macvlan_gateway",
"type": "str",
"title": "Gateway",
"required": false,
"default": "",
"config": {
"placeholder": "10.20.0.1"
}
},
{
"name": "network_name",
"type": "str",
"title": "Network Name",
"required": false,
"default": "bind9_network",
"config": {
"placeholder": "bind9_network"
}
},
{
"name": "network_macvlan_subnet",
"type": "str",
"title": "Subnet",
"required": false,
"default": "",
"config": {
"placeholder": "10.20.0.0/16"
}
},
{
"name": "network_macvlan_ipv4_address",
"type": "str",
"title": "IPv4 Address",
"required": false,
"default": "",
"config": {
"placeholder": "10.20.1.50"
}
}
]
}
]
}