From 7d01f776e4305ea6f5cfd9b43e3fdf8f5daa72e2 Mon Sep 17 00:00:00 2001 From: asonix Date: Thu, 4 Jul 2024 15:59:56 -0500 Subject: [PATCH] Add static ipv6 addresses --- flake.nix | 58 ++++++++++++++++++++++++++++++------- modules/network/default.nix | 15 ++++++++-- 2 files changed, 60 insertions(+), 13 deletions(-) diff --git a/flake.nix b/flake.nix index 85018e6..cbf2947 100644 --- a/flake.nix +++ b/flake.nix @@ -76,11 +76,11 @@ }; makeBoardK3sConfig = modules: - { hostname, macAddress ? null, enableK3s ? true, selfIp, serverIp }: + { hostname, macAddress ? null, enableK3s ? true, selfIp, selfIp6, serverIp }: makeGenericK3sConfig { inherit hostname enableK3s serverIp; - extraModules = [ (networkModule { inherit macAddress selfIp; }) ] + extraModules = [ (networkModule { inherit macAddress selfIp selfIp6; }) ] ++ modules; }; @@ -99,6 +99,7 @@ , unlockMounts ? true , mountVolumes ? true , selfIp + , selfIp6 , serverIp ? null }: let @@ -113,7 +114,7 @@ enableK3s = unlockMounts && mountVolumes && enableK3s; extraModules = sd-images.packages.${system}.SoQuartzBlade.modules ++ [ - (networkModule { inherit selfIp; }) + (networkModule { inherit selfIp selfIp6; }) (btrbkModule { instances = [ { @@ -267,6 +268,7 @@ , unlockMounts ? true , mountVolumes ? true , selfIp + , selfIp6 , serverIp ? null }: let @@ -280,7 +282,7 @@ enableK3s = unlockMounts && mountVolumes && enableK3s; extraModules = sd-images.packages.${system}.SoQuartzBlade.modules ++ [ - (networkModule { inherit selfIp; }) + (networkModule { inherit selfIp selfIp6; }) (btrbkModule { instances = [ { @@ -410,7 +412,7 @@ }; makeBuildConfig = system: - { hostname, macAddress ? null, selfIp }: + { hostname, macAddress ? null, selfIp, selfIp6 }: let device = "/btrfs.4G"; mountDir = "/btrfs/loop"; @@ -421,7 +423,7 @@ extraModules = sd-images.packages.${system}.RockPro64v2.modules ++ [ dockerModule - (networkModule { inherit macAddress selfIp; }) + (networkModule { inherit macAddress selfIp selfIp6; }) (btrbkModule { instances = [{ inherit mountDir subvolumes; }]; }) (subvolumesModule { inherit device subvolumes; }) ({ lib, ... }: { @@ -449,6 +451,7 @@ makeBoardBackupConfig = modules: system: { hostname , selfIp + , selfIp6 , unlockMounts ? true , mountVolumes ? true , enableBackups ? true @@ -463,7 +466,7 @@ inherit hostname; extraModules = modules ++ [ - (networkModule { inherit selfIp; }) + (networkModule { inherit selfIp selfIp6; }) (btrbkModule { instances = backupHosts; localMountDir = mountDir; @@ -549,7 +552,7 @@ makeQuartz64ABackupConfig = makeBoardBackupConfig sd-images.packages.${system}.Quartz64A.modules; makeJellyfinConfig = system: - { hostname, selfIp, macAddress ? null, unlockMounts ? true, mountVolumes ? true, enableJellyfin ? true }: + { hostname, selfIp, selfIp6, macAddress ? null, unlockMounts ? true, mountVolumes ? true, enableJellyfin ? true }: let deviceLabel = "RAID"; device = "/dev/disk/by-label/${deviceLabel}"; @@ -560,7 +563,7 @@ inherit hostname; extraModules = sd-images.packages.${system}.RockPro64v2.modules ++ [ - (networkModule { inherit macAddress selfIp; }) + (networkModule { inherit macAddress selfIp selfIp6; }) (if unlockMounts && mountVolumes then (btrbkModule { instances = [{ inherit mountDir subvolumes; name = "jellyfin"; }]; @@ -666,7 +669,7 @@ }; makePostgresConfig = system: - { hostname, selfIp, macAddress, keyFile, primaryIp ? null, unlockMounts ? true, mountVolumes ? true, luksDevice ? "/dev/sda1" }: + { hostname, selfIp, selfIp6, macAddress, keyFile, primaryIp ? null, unlockMounts ? true, mountVolumes ? true, luksDevice ? "/dev/sda1" }: let device = "/dev/mapper/cryptdrive1"; mountDir = "/btrfs/ssd"; @@ -677,7 +680,7 @@ extraModules = sd-images.packages.${system}.Rock64.modules ++ [ dockerModule - (networkModule { inherit macAddress selfIp; }) + (networkModule { inherit macAddress selfIp selfIp6; }) (if unlockMounts && mountVolumes then (btrbkModule { instances = [{ inherit mountDir primaryIp subvolumes; }]; @@ -755,6 +758,7 @@ redtail1 = makePostgresConfig system { hostname = "redtail1"; selfIp = "192.168.20.23"; + selfIp6 = "2001:db8:20::23"; macAddress = "02:fe:30:d8:cf:64"; keyFile = "redtailKeyFile"; primaryIp = "192.168.20.24"; @@ -764,6 +768,7 @@ redtail2 = makePostgresConfig system { hostname = "redtail2"; selfIp = "192.168.20.24"; + selfIp6 = "2001:db8:20::24"; macAddress = "02:8a:70:2a:a8:5e"; keyFile = "redtailKeyFile"; # primaryIp = "192.168.20.23"; @@ -772,6 +777,7 @@ whitestorm1 = makePostgresConfig system { hostname = "whitestorm1"; selfIp = "192.168.20.26"; + selfIp6 = "2001:db8:20::26"; macAddress = "02:71:18:30:fc:0f"; keyFile = "whitestormKeyFile"; # primaryIp = "192.168.20.27"; @@ -780,6 +786,7 @@ whitestorm2 = makePostgresConfig system { hostname = "whitestorm2"; selfIp = "192.168.20.27"; + selfIp6 = "2001:db8:20::27"; macAddress = "02:ff:ce:a9:d3:74"; keyFile = "whitestormKeyFile"; primaryIp = "192.168.20.26"; @@ -788,106 +795,124 @@ build2 = makeBuildConfig system { hostname = "build2"; selfIp = "192.168.20.101"; + selfIp6 = "2001:db8:20::101"; }; k3s1 = makeOldSoQuartzK3sConfig system { hostname = "k3s1"; selfIp = "192.168.20.120"; + selfIp6 = "2001:db8:20::120"; }; k3s2 = makeOldSoQuartzK3sConfig system { hostname = "k3s2"; selfIp = "192.168.20.121"; + selfIp6 = "2001:db8:20::121"; serverIp = "192.168.20.120"; }; k3s3 = makeOldSoQuartzK3sConfig system { hostname = "k3s3"; selfIp = "192.168.20.122"; + selfIp6 = "2001:db8:20::122"; serverIp = "192.168.20.120"; }; k3s4 = makeOldSoQuartzK3sConfig system { hostname = "k3s4"; selfIp = "192.168.20.123"; + selfIp6 = "2001:db8:20::123"; serverIp = "192.168.20.120"; }; k3s5 = makeOldSoQuartzK3sConfig system { hostname = "k3s5"; selfIp = "192.168.20.124"; + selfIp6 = "2001:db8:20::124"; serverIp = "192.168.20.120"; }; k3s6 = makeSoQuartzK3sConfig system { hostname = "k3s6"; selfIp = "192.168.20.125"; + selfIp6 = "2001:db8:20::125"; serverIp = "192.168.20.120"; }; k3s7 = makeSoQuartzK3sConfig system { hostname = "k3s7"; selfIp = "192.168.20.126"; + selfIp6 = "2001:db8:20::126"; serverIp = "192.168.20.120"; }; k3s8 = makeSoQuartzK3sConfig system { hostname = "k3s8"; selfIp = "192.168.20.127"; + selfIp6 = "2001:db8:20::127"; serverIp = "192.168.20.120"; }; k3s9 = makeSoQuartzK3sConfig system { hostname = "k3s9"; selfIp = "192.168.20.128"; + selfIp6 = "2001:db8:20::128"; serverIp = "192.168.20.120"; }; k3s10 = makeSoQuartzK3sConfig system { hostname = "k3s10"; selfIp = "192.168.20.129"; + selfIp6 = "2001:db8:20::129"; serverIp = "192.168.20.120"; }; k3s11 = makeSoQuartzK3sConfig system { hostname = "k3s11"; selfIp = "192.168.20.130"; + selfIp6 = "2001:db8:20::130"; serverIp = "192.168.20.120"; }; k3s12 = makeSoQuartzK3sConfig system { hostname = "k3s12"; selfIp = "192.168.20.131"; + selfIp6 = "2001:db8:20::131"; serverIp = "192.168.20.120"; }; k3s13 = makeSoQuartzK3sConfig system { hostname = "k3s13"; selfIp = "192.168.20.132"; + selfIp6 = "2001:db8:20::132"; serverIp = "192.168.20.120"; }; k3s14 = makeSoQuartzK3sConfig system { hostname = "k3s14"; selfIp = "192.168.20.133"; + selfIp6 = "2001:db8:20::133"; serverIp = "192.168.20.120"; }; k3s15 = makeSoQuartzK3sConfig system { hostname = "k3s15"; selfIp = "192.168.20.134"; + selfIp6 = "2001:db8:20::134"; serverIp = "192.168.20.120"; }; k3s16 = makeSoQuartzK3sConfig system { hostname = "k3s16"; selfIp = "192.168.20.135"; + selfIp6 = "2001:db8:20::135"; serverIp = "192.168.20.120"; }; k3s-rock1 = makeRock64K3sConfig system { hostname = "k3s-rock1"; selfIp = "192.168.20.110"; + selfIp6 = "2001:db8:20::110"; serverIp = "192.168.20.120"; macAddress = "02:36:51:19:8c:5d"; }; @@ -895,6 +920,7 @@ k3s-rock2 = makeRock64K3sConfig system { hostname = "k3s-rock2"; selfIp = "192.168.20.111"; + selfIp6 = "2001:db8:20::111"; serverIp = "192.168.20.120"; macAddress = "02:af:fa:0e:c5:41"; }; @@ -902,6 +928,7 @@ k3s-rock3 = makeRock64K3sConfig system { hostname = "k3s-rock3"; selfIp = "192.168.20.112"; + selfIp6 = "2001:db8:20::112"; serverIp = "192.168.20.120"; macAddress = "02:86:c1:62:77:51"; }; @@ -909,6 +936,7 @@ k3s-rock4 = makeRock64K3sConfig system { hostname = "k3s-rock4"; selfIp = "192.168.20.113"; + selfIp6 = "2001:db8:20::113"; serverIp = "192.168.20.120"; macAddress = "02:7a:2e:2c:bb:99"; }; @@ -916,6 +944,7 @@ k3s-rock5 = makeRock64K3sConfig system { hostname = "k3s-rock5"; selfIp = "192.168.20.114"; + selfIp6 = "2001:db8:20::114"; serverIp = "192.168.20.120"; macAddress = "02:76:67:0f:a0:b7"; }; @@ -923,6 +952,7 @@ k3s-rock6 = makeRock64K3sConfig system { hostname = "k3s-rock6"; selfIp = "192.168.20.115"; + selfIp6 = "2001:db8:20::115"; serverIp = "192.168.20.120"; macAddress = "02:6b:c5:f0:d7:6d"; }; @@ -930,6 +960,7 @@ k3s-rock7 = makeRock64K3sConfig system { hostname = "k3s-rock7"; selfIp = "192.168.20.116"; + selfIp6 = "2001:db8:20::116"; serverIp = "192.168.20.120"; macAddress = "02:5b:c4:cf:25:c2"; }; @@ -937,18 +968,21 @@ k3s-quartza1 = makeQuartz64AK3sConfig system { hostname = "k3s-quartza1"; selfIp = "192.168.20.160"; + selfIp6 = "2001:db8:20::160"; serverIp = "192.168.20.120"; }; k3s-rockpro1 = makeRockPro64K3sConfig system { hostname = "k3s-rockpro1"; selfIp = "192.168.20.180"; + selfIp6 = "2001:db8:20::180"; serverIp = "192.168.20.120"; }; jellyfin = makeJellyfinConfig system { hostname = "jellyfin"; selfIp = "192.168.20.195"; + selfIp6 = "2001:db8:20::195"; }; pinetab2 = makeDesktopConfig { @@ -989,6 +1023,7 @@ makeQuartz64ABackupConfig system { hostname = "backup1"; selfIp = "192.168.20.190"; + selfIp6 = "2001:db8:20::190"; backupHosts = [ (k3sMain { ip = "192.168.20.120"; @@ -1112,6 +1147,7 @@ makeRockPro64BackupConfig system { hostname = "backup2"; selfIp = "192.168.20.191"; + selfIp6 = "2001:db8:20::191"; backupHosts = (builtins.map firestar [ { name = "hdd"; diff --git a/modules/network/default.nix b/modules/network/default.nix index bd5e8f9..76dc93b 100644 --- a/modules/network/default.nix +++ b/modules/network/default.nix @@ -1,4 +1,4 @@ -{ macAddress ? null, selfIp }: +{ macAddress ? null, selfIp, selfIp6 }: { networking = { @@ -8,8 +8,19 @@ address = selfIp; prefixLength = 24; }]; + ipv6.addresses = [{ + address = selfIp6; + prefixLength = 64; + }]; }; defaultGateway = "192.168.20.1"; - nameservers = [ "192.168.20.1" ]; + defaultGateway6 = { + address = "2001:db8:20::1"; + interface = "end0"; + }; + nameservers = [ + "192.168.20.1" + "2001:db8:20::1" + ]; }; }