Platform Services

DNS VMs (Technitium)

Architecture reference for the four Technitium DNS VMs: placement, addresses, zone replication, RFC 2136 updates, and firewall rules.

Four Technitium DNS Server v14+ VMs serve the core.aorxi.io internal zone across both sites. Their placement, authority, replication, dynamic updates, and firewall boundaries are defined here. Installation and client migration follow the DNS deployment and cutover runbook.

VM Inventory

All four VMs sit on VLAN 30 (VM Services) and are sized identically: 2 vCPU, 1 GB RAM, 8 GB disk. Technitium runs as a Proxmox LXC container (Ubuntu 22.04) or VM. DNS listens on port 53; the web UI and cluster API listen on port 5380.

VMSiteProxmox HostIPRole
sa-dns-01Site Asa-stor-0110.10.30.10Primary
sa-dns-02Site Asee caution below10.10.30.11Secondary
sb-dns-01Site Bsb-cmp-0110.20.30.10Secondary
sb-dns-02Site Bsb-cmp-0210.20.30.11Secondary

Tentative: sa-dns-02 Host Not Confirmed

The Proxmox host for sa-dns-02 is sa-cmp-01 or sa-cmp-02. The choice has not been finalized.

Replication and Cluster

sa-dns-01 is the authoritative primary. All zones are authored there; the other three nodes are read-only secondaries. sa-dns-01 sends DNS NOTIFY to all secondaries on every zone change. Zone transfers are secured with the TSIG key opnsense-ddns (HMAC-SHA256). Default zone TTL is 300 s.

Replication pathTransportPortAuth
sa-dns-01sa-dns-02AXFR (TCP)53TSIG opnsense-ddns
sa-dns-01sb-dns-01AXFR (TCP) over WireGuard53TSIG opnsense-ddns
sa-dns-01sb-dns-02AXFR (TCP) over WireGuard53TSIG opnsense-ddns

Zone transfer is restricted to specific IPs only: 10.10.30.11, 10.20.30.10, 10.20.30.11.

WireGuard Dependency for Site B

sb-dns-01 and sb-dns-02 pull zone updates over the WireGuard tunnel. If the tunnel is down, Site B nodes serve their last replicated copy: stale but functional for resolution. New or changed records do not appear at Site B until the tunnel recovers.

Technitium Cluster

The Technitium cluster synchronizes server settings, apps, and catalog zone membership from sa-dns-01 to all secondaries. This process is separate from AXFR zone replication. All four nodes are managed from the sa-dns-01 web panel at http://10.10.30.10:5380.

Zone Design

Forward Zone

One primary forward zone: core.aorxi.io. Hosted as Primary on sa-dns-01, replicated as Secondary to the other three nodes. SOA primary NS: sa-dns-01.core.aorxi.io. NS records are added for all four VMs.

Recursion is enabled with full root-server resolution: no upstream forwarders configured.

Reverse Zones

All reverse zones are created as Primary on sa-dns-01 and replicated identically. The zone name is formed by reversing the network octets and appending .in-addr.arpa. Each /24 VLAN gets one zone; /22 VLANs (40 and 100) each produce four /24 zones.

Site A reverse zones (representative set):

VLANSubnetReverse zone
1010.10.10.0/2410.10.10.in-addr.arpa
2010.10.20.0/2420.10.10.in-addr.arpa
2510.10.25.0/2425.10.10.in-addr.arpa
3010.10.30.0/2430.10.10.in-addr.arpa
4010.10.40.0/2240.10.10.in-addr.arpa, 41.10.10.in-addr.arpa, 42.10.10.in-addr.arpa, 43.10.10.in-addr.arpa
6010.10.60.0/2460.10.10.in-addr.arpa
9010.10.90.0/2490.10.10.in-addr.arpa
10010.10.100.0/22100.10.10.in-addr.arpa, 101.10.10.in-addr.arpa, 102.10.10.in-addr.arpa, 103.10.10.in-addr.arpa

Site B follows the same pattern with 10.20.xx.20.10.in-addr.arpa. The WireGuard transit subnet (10.255.0.0/24) gets a single zone: 0.255.10.in-addr.arpa.

DHCP DNS Assignment

At Site A cutover, OPNsense serves client VLANs 100/110/120 and initially advertises its local VLAN interface as DNS. After Technitium is authoritative, it advertises the Site A pair below. Site B DHCP remains on OPNsense.

SiteDNS Server 1DNS Server 2
Site A10.10.30.10 (sa-dns-01)10.10.30.11 (sa-dns-02)
Site B10.20.30.10 (sb-dns-01)10.20.30.11 (sb-dns-02)

RFC 2136 Dynamic Updates

Dynamic DNS registration is enabled for three VLANs. All other VLANs (10, 20, 25, 60, 65, 80, 90, 253) use static records managed manually in the Technitium UI on sa-dns-01.

VLANDirectionNotes
30 (VM Services)A + PTRNew VMs auto-register
40 (Kubernetes Nodes)A + PTRKubernetes node VMs
100 (Lab / Trusted Client)A + PTRDev and admin devices

All dynamic updates are signed with the opnsense-ddns TSIG key. The Site A client-VLAN DDNS path remains on OPNsense and must be validated during A8.

OPNsense DDNS

OPNsense-managed scopes send RFC 2136 updates to sa-dns-01. This is the path for Site A client VLANs 100/110/120 as well as the Site B scopes.

Update Server:  10.10.30.10   # sa-dns-01 — both sites point here
Protocol:       RFC 2136
Zone:           core.aorxi.io (forward) / <reverse-zone> (PTR)
Key name:       opnsense-ddns
Key algorithm:  hmac-sha256
Key secret:     <generated on sa-dns-01>
TTL:            300

Site B DHCP DDNS updates travel over WireGuard to reach sa-dns-01. New DHCP leases on Site B do not auto-register until the tunnel is up: acceptable for an infra-change workflow.

Kubernetes External-DNS

external-dns pushes Kubernetes Ingress and Service hostnames into Technitium via RFC 2136. The same opnsense-ddns TSIG key is reused. Deployment args:

- --source=ingress
- --source=service
- --provider=rfc2136
- --rfc2136-host=10.10.30.10           # sa-dns-01 primary
- --rfc2136-port=53
- --rfc2136-zone=core.aorxi.io
- --rfc2136-tsig-secret=<opnsense-ddns-secret>
- --rfc2136-tsig-secret-alg=hmac-sha256
- --rfc2136-tsig-keyname=opnsense-ddns
- --rfc2136-tsig-axfr=true
- --domain-filter=core.aorxi.io
- --txt-owner-id=k8s-site-a            # use k8s-site-b for Site B cluster
- --policy=upsert-only

The txt-owner-id prevents the two site clusters from clobbering each other's TXT ownership records.

Firewall Rules

Rules are applied on OPNsense at each site on the WireGuard interface.

Site A: WireGuard Inbound

ProtoSourceDestPortPurpose
TCP10.20.30.10, 10.20.30.1110.10.30.1053AXFR pull (sb-dns-01/02)
UDP10.20.30.10, 10.20.30.1110.10.30.1053DDNS updates (OPNsense-B)
TCP10.255.0.210.10.30.105380Technitium cluster API

Site B: WireGuard Inbound

ProtoSourceDestPortPurpose
UDP10.10.30.1010.20.30.10, 10.20.30.1153NOTIFY from sa-dns-01
TCP10.10.30.1010.20.30.10, 10.20.30.115380Technitium cluster API
UDPany Site B client VLAN10.20.30.10, 10.20.30.1153Client queries
TCPany Site B client VLAN10.20.30.10, 10.20.30.1153Client queries (large responses)
  • DNS Deployment & Cutover Runbook: installation, clustering, zone creation, TSIG, validation, and client migration
  • DNS: DNS architecture, zone design rationale, and infrastructure record tables
  • WireGuard: site-to-site VPN that carries cross-site AXFR and DDNS traffic
  • VLAN Reference: VLAN 30 (VM Services) where all DNS VMs reside
  • Kubernetes Planning: external-dns and Kubernetes service DNS integration
  • CA & Certificates: Let's Encrypt DNS-01 certificate strategy via Cloudflare