Referenz

DNS-Records

Lab: net/lab/hosts/. Zone: net/dns/groupdir.de.nix. Quellen: lab-ipam.md, dns-records.md.

Quelle

net/lab/hosts/*.nix (Normalisierung zentral in net/lab/hosts.nix) → net/lab/dns-records.nix → gemerged in net/dns/groupdir.de.nix (staticRecords ++ labRecords). Beide bauen Records über die Konstruktoren aus net/dns/records.nix (mkA, mkMultiA, mkReverseProxy, mkRecord). Daraus: öffentlich (tofu/dns) und intern (lab-gateway, Ableitung in net/dns/internal-view.nix).

scope

public     → nur Hetzner
internal   → nur internes DNS   (Lab-Default)
both       → beides

target (intern, A)

direct         → A = Host-IP / value
reverse-proxy  → A = Gateway-IP + Caddy → upstream

Schablonen

# Lab (net/lab/hosts/grafana.nix)
{
  name = "grafana";
  ipv4 = "192.168.200.30";
  dns = {
    name = "grafana.lab";
    target = "reverse-proxy";
    upstream = "http://192.168.200.30:3000";
  };
}

# Lab direct, mehrere Namen (net/lab/hosts/dc1.nix)
{
  name = "dc1";
  ipv4 = "192.168.200.9";
  dns.names = [ "dc1.lab" "ldap.lab" ];
}

# Öffentlich (Zone staticRecords, via net/dns/records.nix Konstruktor)
(mkA {
  name = "vpn";
  value = "x.x.x.x";
  scope = "public";
})

Sonstiges

  • Mehrere IPs: dns.values = [ ... ]
  • Zone / Gateway-IP: Felder zone, internalReverseProxyAddress oben in net/dns/groupdir.de.nix
  • Belegung: just lab-ipam — keine doppelten *.lab-A in der Zone