This repository has been archived on 2026-07-30. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
nixos/docs/ip-addressing.md
T
beatzaplentyandClaude Sonnet 4.6 cded77919d
Check NixOS configurations / eval-hosts (pull_request) Successful in 10m31s
refactor: full repo sweep — variables, docs, and comment cleanup
- variables.nix: switch to rec {}, extract giteaDomain/giteaRepoPath,
  extraAdminSshKeys, haLanNfsFqdn, tailscaleResolverIp, ports.dhcp,
  ports.dns; ipaServer now derives from homeDomain ref; section headers
- modules: use new vars throughout (pxe-boot, ts-dns-forwarder,
  cluster-config, configuration.nix, mount-pxe-images) — eval unchanged
- docs: delete ephemeral planning docs (AUDIT_REPORT, ha-network-audit,
  network-cutover); add docs/ha.md; drop migration reference table from
  ip-addressing.md; remove stale server example from beszel.md
- CLAUDE.md/README.md/AGENTS.md: fix build types (tailscale-router,
  ha-server, drop server); document scripts/ha/, scripts/ipa/, and
  all previously undocumented top-level and lib scripts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-30 06:28:52 +10:00

8.5 KiB
Raw Blame History

IP Addressing Scheme

Subnets

Subnet VLAN CIDR Purpose Routed?
LAN 2 (native/untagged) 192.168.2.0/24 General LAN — clients and infrastructure Yes (gateway .254)
Cluster 10 192.168.10.224/29 HA file server DRBD replication + Corosync heartbeat No — internal vmbr1 only, no uplink
Storage client 20 192.168.20.0/24 HA file server NFS (and iSCSI if needed) — docker and swarm nodes mount from VIP here No — internal vmbr2 only, no uplink

The cluster and storage-client subnets never leave pve1. vmbr1 and vmbr2 are Proxmox Linux bridges with no physical port attached; traffic between guests on each bridge stays in-kernel.

VLAN IDs match the third octet of each subnet (VLAN 2 → 192.168.2.x, VLAN 10 → 192.168.10.x, VLAN 20 → 192.168.20.x). The host octet is consistent across all subnets — e.g. ha-node1 is always .228: 192.168.2.228 (LAN), 192.168.10.228 (cluster), 192.168.20.228 (storage client).

Protocol separation (enforced by firewall on HA nodes):

  • NFS (ports 111, 2049, 20048): both subnets, each restricted to its own CIDR
    • VLAN 2 only → vip-lan (192.168.2.229) — pxe-boot and other LAN clients
    • VLAN 20 only → vip-storage (192.168.20.229) — docker, future swarm nodes
  • iSCSI (port 3260): VLAN 20 only — available but not in active use; NFS is preferred for multi-host access (shared volumes across a Docker Swarm require a shared filesystem, not per-host block devices)

DNS Zones

FreeIPA (domain-controller.sweet.home) is authoritative for all zones. Three zones correspond to the three subnets — one per VLAN. All zones are internal only; no external delegation.

sweet.home — VLAN 2 (192.168.2.x)

General LAN zone. All infrastructure hostnames live here.

Hostname A record Notes
domain-controller.sweet.home 192.168.2.253 FreeIPA / KDC / DNS
ha-vip-lan.sweet.home 192.168.2.229 Pacemaker vip-lan — NFS for LAN clients
ha-server-1.sweet.home 192.168.2.228 HA node 1 management NIC
ha-server-2.sweet.home 192.168.2.227 HA node 2 management NIC
server.sweet.home 192.168.2.226 Current ZFS/NFS server (retiring)
docker.sweet.home 192.168.2.225 Docker/Traefik host
nix-cache.sweet.home 192.168.2.224 Nix binary cache + remote builder
pxe-boot.sweet.home 192.168.2.223 PXE / TFTP / HTTP netboot
tailscale-router.sweet.home 192.168.2.222 Tailscale exit node
tor-relay.sweet.home 192.168.2.221 Tor relay
pdm.sweet.home 192.168.2.220 Proxmox Deploy Manager
nixos.sweet.home 192.168.2.39 Bare-metal workstation (DHCP)
pve1.sweet.home 192.168.2.245 Proxmox VE hypervisor
pbs.sweet.home 192.168.2.244 Proxmox Backup Server

PTR records exist for all static hosts. The workstation (nixos.sweet.home) is DHCP-assigned; its PTR is omitted.

cluster.home — VLAN 10 (192.168.10.x)

Internal only — Corosync ring0 heartbeat and DRBD replication between HA nodes. No VIP exists on this subnet (DRBD/Corosync endpoints are static per-node IPs).

Hostname A record Notes
ha-server-1.cluster.home 192.168.10.228 HA node 1 cluster NIC (ens19 / vmbr1)
ha-server-2.cluster.home 192.168.10.227 HA node 2 cluster NIC (ens19 / vmbr1)

PTR records exist for both. DNS here is for debugging convenience — DRBD and Corosync use the IPs from the NixOS config directly, not DNS.

storage.home — VLAN 20 (192.168.20.x)

Internal only — NFS (and iSCSI) client access to the HA storage VIP. NFS clients mount from nfs.storage.home (the Pacemaker floating VIP) so mounts survive failover transparently without reconfiguration.

Hostname A record Notes
nfs.storage.home 192.168.20.229 Pacemaker vip-storage — NFS + iSCSI VIP
ha-server-1.storage.home 192.168.20.228 HA node 1 storage-client NIC (ens20 / vmbr2)
ha-server-2.storage.home 192.168.20.227 HA node 2 storage-client NIC (ens20 / vmbr2)
docker.storage.home 192.168.20.225 Docker host storage-client NIC (eth1 / vmbr2)
server.storage.home 192.168.20.226 server VM storage-client NIC (decommissioned — remove DNS record after VM is destroyed)

PTR records exist for all five. Remove server.storage.home, server.sweet.home, and their PTRs from FreeIPA DNS once the server VM is destroyed.


LAN — 192.168.2.0/24

Address map

Range Purpose
.1.9 Reserved, never assign
.10.59 Client DHCP pool (router-assigned)
.60.219 Unallocated buffer
.220.229 Virtual nodes (VMs / LXC containers)
.230.239 Expansion buffer (reserved, unallocated)
.240.249 Physical nodes (bare-metal hosts)
.250.253 Network services
.254 Router / gateway

Network services (.250.253)

IP Hostname Role
192.168.2.254 router Gateway (TP-Link)
192.168.2.253 domain-controller FreeIPA — authoritative DNS for sweet.home, Kerberos, LDAP
192.168.2.250.252 Reserved for future network services

Physical nodes (.240.249)

IP Hostname Role
192.168.2.245 pve1 Proxmox VE hypervisor
192.168.2.244 pbs Proxmox Backup Server
192.168.2.243 nixos Bare-metal workstation (baremetal-gui)
192.168.2.246.249 Reserved — second Proxmox node and associated services
192.168.2.240.242 Reserved

pve1 sits mid-range deliberately so a second Proxmox node can slot in on either side.

Virtual nodes (.220.229)

All VMs and LXC containers run on pve1.

IP Hostname Role Status
192.168.2.229 ha-vip-lan HA file server LAN floating VIP (Pacemaker vip-lan) — LAN iSCSI + NFS Active
192.168.2.228 ha-node1 HA file server node 1 — management NIC Active
192.168.2.227 ha-node2 HA file server node 2 — management NIC Active
192.168.2.226 server Former NFS/ZFS file server — decommissioned Removed from flake
192.168.2.225 docker Docker / Traefik stack Active
192.168.2.224 nix-cache Nix binary cache + remote builder Active
192.168.2.223 pxe-boot PXE / TFTP / HTTP netboot server Active
192.168.2.222 tailscale-router Tailscale exit node / router Active
192.168.2.221 tor-relay Tor relay Active
192.168.2.220 pdm Proxmox Deploy Manager Active

Client DHCP pool (.10.59)

Assigned by the router. DNS option points to 192.168.2.253 (domain-controller).

Devices in this range: phones, laptops, IoT, Canon printer, any non-infrastructure host. No static reservations for infrastructure hosts — all infra uses static IP configuration on the guest itself (not DHCP reservations), so IPs survive VM recreation regardless of MAC address churn.


Cluster network — VLAN 10 — 192.168.10.224/29

Internal to pve1 only. Proxmox bridge vmbr1, no physical NIC attached.

IP Hostname Interface role
192.168.10.228 ha-node1 DRBD replication + Corosync ring0 (primary heartbeat)
192.168.10.227 ha-node2 DRBD replication + Corosync ring0 (primary heartbeat)
no gateway Isolated — not routed to LAN or internet

Corosync ring1 (backup heartbeat only) uses the LAN IPs (192.168.2.228 / 192.168.2.227) over vmbr0 — no additional bridge needed, and DRBD traffic never crosses ring1.


Storage-client network — VLAN 20 — 192.168.20.0/24

Internal to pve1 only. Proxmox bridge vmbr2, no physical NIC attached.

IP Hostname Interface / role
192.168.20.229 ha-vip-storage Pacemaker floating VIP — NFS + iSCSI endpoint
192.168.20.228 ha-node1 Storage-client NIC (ens20 / vmbr2)
192.168.20.227 ha-node2 Storage-client NIC (ens20 / vmbr2)
192.168.20.226 server Storage-client NIC (ens19 / vmbr2) — decommissioned
192.168.20.225 docker Storage-client NIC (eth1 / vmbr2) — NFS client
no gateway Isolated — not routed to LAN or internet

NFS clients mount from 192.168.20.229 (surviving failover transparently via the VIP). Firewall on each HA node restricts NFS and iSCSI ports to 192.168.20.0/24 — LAN hosts cannot reach either service on this VIP. The vip-storage endpoint is not reachable from the workstation directly (internal bridge only); health checks proxy through the active HA node.