From 8509fff746bba316dd08421c4a927f1138c4c428 Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Sun, 19 Apr 2026 01:04:41 -0500 Subject: [PATCH] chore: upgrade from dnsmasq to bind --- flake.nix | 4 ++- hosts/default.nix | 3 +- hosts/unstable/genesis/networking.nix | 50 ++++++++++++++++++++------- lib/default.nix | 24 +++++++++++++ manifests/helm/longhorn.yaml | 6 ++-- manifests/immich/chart.yaml | 2 +- network.json | 5 ++- 7 files changed, 75 insertions(+), 19 deletions(-) create mode 100644 lib/default.nix diff --git a/flake.nix b/flake.nix index d988e51..7b96065 100644 --- a/flake.nix +++ b/flake.nix @@ -65,6 +65,7 @@ }; } ); + lib' = import ./lib { inherit (top.nixunstable) lib; }; in top.flake-parts.lib.mkFlake { inputs = top; } { inherit systems; @@ -76,6 +77,7 @@ nixpkgs = imported_packages.x86_64-linux; specialArgs = { inherit + lib' metadata self top @@ -112,7 +114,7 @@ nixosConfigurations = ( import ./hosts { - inherit top metadata; + inherit top metadata lib'; nixpkgs = imported_packages; } ); diff --git a/hosts/default.nix b/hosts/default.nix index 242a256..eddf4ca 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -1,5 +1,6 @@ { top, + lib', metadata, nixpkgs, }: @@ -18,7 +19,7 @@ let channel.lib.nixosSystem { pkgs = nixpkgs.${system}; specialArgs = { - inherit metadata top; + inherit metadata top lib'; }; modules = [ { diff --git a/hosts/unstable/genesis/networking.nix b/hosts/unstable/genesis/networking.nix index 8de90ed..04ea97e 100644 --- a/hosts/unstable/genesis/networking.nix +++ b/hosts/unstable/genesis/networking.nix @@ -1,7 +1,9 @@ { config, - pkgs, + lib, + lib', metadata, + pkgs, ... }: let @@ -9,7 +11,6 @@ let lanIP = metadata.hosts.${config.networking.hostName}.ip; iot = "enp2s0"; iotIP = "192.168.66.250"; - #routerIP = metadata.infra.gw; extraHosts = builtins.readFile ./net/hosts; proxyPort = 3128; @@ -84,17 +85,42 @@ in ######### # dnsmasq config ######## - dnsmasq = { + bind = { enable = true; - settings = { - domain = "thehellings.lan"; - expand-hosts = true; - log-queries = true; - no-hosts = true; # Do not read /etc/hosts, which makes genesis resolve to 127.0.0.2 - addn-hosts = "/etc/adblock_hosts"; - hostsdir = "/etc/hosts.d/"; - server = dnsServers; - }; + cacheNetworks = [ + metadata.infra.lan + metadata.infra.tailscale + metadata.infra.nebula + ]; + zones = + let + makeZoneFile = + hosts: domain: + let + preamble = [ + "$ORIGIN\t${domain}." + "$TTL\t1h" + "@\tIN\tSOA\t${config.networking.hostName}\tgreg@thehellings.com (1 1m 1m 1m 1m)" + "\tIN\tNS\t${config.networking.hostName}" + ]; + makeHost = host: "${host.name}\tIN\tA\t${host.address}"; + in + pkgs.writeText "${domain}" ( + builtins.concatStringsSep "\n" (preamble ++ (lib.map makeHost hosts) ++ [ "" ]) + ); + in + lib.mapAttrs + (domain: net: { + master = true; + file = makeZoneFile (lib'.hostsByNet net metadata.hosts) domain; + }) + { + "shire-zebra.ts.net" = "tailscale"; + "nebula.thehellings.com" = "nebula"; + nebula = "nebula"; + "thehellings.lan" = "lan"; + lan = "lan"; + }; }; prometheus.exporters = { diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..5ec9cc1 --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,24 @@ +{ lib, ... }: +{ + hostsByNet = + net: hosts: + let + netAttr = + { + lan = "ip"; + nebula = "nebulaIp"; + tailscale = "ts"; + } + .${net}; + in + lib.mapAttrsToList + (name: value: { + inherit name; + address = builtins.getAttr netAttr value; + }) + ( + lib.filterAttrs ( + _host: settings: (builtins.hasAttr netAttr settings) && (builtins.getAttr netAttr settings) != null + ) hosts + ); +} diff --git a/manifests/helm/longhorn.yaml b/manifests/helm/longhorn.yaml index b5c3380..84fa463 100644 --- a/manifests/helm/longhorn.yaml +++ b/manifests/helm/longhorn.yaml @@ -20,14 +20,14 @@ metadata: spec: interval: 10m dependsOn: - - name: tailscale-operator + - name: tailscale namespace: tailscale - name: kyverno - namespace: kyverno + namespace: kyverno-system chart: spec: chart: longhorn - version: "1.10.2" + version: "1.11.1" sourceRef: kind: HelmRepository name: longhorn diff --git a/manifests/immich/chart.yaml b/manifests/immich/chart.yaml index 9f974b2..9b8cad2 100644 --- a/manifests/immich/chart.yaml +++ b/manifests/immich/chart.yaml @@ -32,7 +32,7 @@ spec: containers: main: image: - tag: v2.4.1 + tag: v2.7.5 env: DB_HOSTNAME: immich-rw.db.svc.cluster.local DB_DATABASE_NAME: immich diff --git a/network.json b/network.json index 795d939..96795b9 100644 --- a/network.json +++ b/network.json @@ -2,8 +2,11 @@ "infra": { "dns": "10.42.1.5", "gw": "10.42.1.1", + "lan": "10.42.0.0/16", "netmask": "255.255.0.0", - "prefix": "16" + "nebula": "10.157.0.0/16", + "prefix": "16", + "tailscale": "100.64.0.0/10" }, "hosts": { "chronicles": {