mgmt init

This commit is contained in:
asyncnomi 2025-07-21 20:41:54 +02:00
parent 0a9aa08cd6
commit a4fd96a197
8 changed files with 121 additions and 3 deletions

View file

@ -1,2 +1,4 @@
# nix
bastion.mtz.lasuite.federez: nePNA6RDzgNeSC7deXqeoK2rGGei65tBNnCEN6ZKkEI=
bastion.ren.lasuite.federez: tSnZQM0s1EaN2uvCgYP8xkLXt+NccBBPJj5UBzV3h2Y=

View file

@ -0,0 +1,15 @@
age-encryption.org/v1
-> ssh-ed25519 AoNqxQ knbcHLEYnoQjMfF+ZNck0wpAceeb8ooq3A8bzoLgFy8
W+CESgJr8Ck3JQ61I2G7vPpycfIcWp/gUt1pIk2XaWE
-> ssh-ed25519 Ql/wMw a7yY5Jvs6n//AiCDnPX19jjlmvZKXivO33Cg0aMjQ08
2I0uy0Nk2w1Kg7CYu3lyOJUqZNbb3WaQudwviXlZB4A
-> ssh-ed25519 Ecp4NA cn8KR9O3a/DXUt5nwCvNBToAbClwvb5P7AYpey11dTs
Xg7veR9JMgjSzBf4dfqmJdJ/byZADiiwBvUzOkQb/+A
-> ssh-ed25519 vHebMw pgh2K90AbukQANSsagUTpHWBJUCcBVPIRXNhiUFS7Sw
3QaFQ6DkZq9UhK6/l2nu5IOESN6VRnxoRgSkIWBFLqk
-> ssh-ed25519 um7xWA y1cegmPgkhOFFML7ZgMvXqV2ZCx44LyxHbgga6wDkg8
qDoj0U0Ky0V5S3dSUIahsjkB7y2VFROtK3CoLog/VUY
-> ssh-ed25519 oRtTqQ 06JdS8UUfhneHp7NE2vAVde0uwcwirgFDy2QFTPdPxE
3JaKSODSeWx59iCv8b1THvUY8kH7KPE6BNPuAS28E6o
--- Q/FVLEXjSsvWbtq29gvNrXKS0CmFgHay48x5PvT5vOM
ËBÝÍ:îA×Ö˜bäõ˜h­<™öp`özj<7A>`¶ÔG@¦Ù¼WcghêÊæú»²³TÆˆÉ ãÓÝúYöÖu…Öþó_N™<4E>˜ºIhn

View file

@ -0,0 +1,15 @@
age-encryption.org/v1
-> ssh-ed25519 AoNqxQ 70DTIbXzMPbLII1tQzjnPSVcSnPL7DeRO2OhSQkZIQ8
EOnW7swnuwE+FXcnMAE9xbhqwmV/PAhrKqnZEnvn80g
-> ssh-ed25519 Ql/wMw abCAkodTVDy0q4WZS9OzEpGnLa0tB9cW4jpk9nwslx8
1OEMzTHAjEbv03UH5HNFPQ0Wp6G8WegAsEBZaZWY5O0
-> ssh-ed25519 Ecp4NA 4sCVyiIkgsEJkZbTJIBYSAIR6Ya8YcfHAkDkadpP6ng
ubYW2caWfDZg9KDasuVYZg+VlKPl1d7ajlb/XKMREb0
-> ssh-ed25519 vHebMw 2WWQ6SmwdWIyDZVvPVQQVyRf1tI1Em46DbiTbwTCaTg
8+aGXKlD27AVCDRBJVt1AaOKcKhfe5N61Zcx+43qEak
-> ssh-ed25519 um7xWA 09ho4VI2L9LlPiOXP9U60fiWRWTJWOHN9bISD9KGZyk
qB0wZoAfxSxd/2V+4TiyqF8qLaITntMV9L7Qdaz8JrQ
-> ssh-ed25519 oRtTqQ M7/+Ny2J6DH+1Y2kEa/OuvkL51sclCg7IyBiezmOO18
Scdi37jHccwVU7tyIv8i2GYrvqbbelGt6rwC70iZ3Jc
--- RC4WIZOZChP56Jz+PQiQp1w4v7ylmB0HgUN+Rd/x/84
Ä®¼_+þªt4ܰJ< sËÅc¼Ò€-±¼Ñä\Ya:_¡à tRG7ï:À›¢ë¯;r*!W¯2ÛçÁj„§X—e  À ^î<>˜

View file

@ -27,6 +27,11 @@ let
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHZC+1P5nIJwsPA39OF4LYEqRYZVE0jDFQxu9nSr5nF0 root@auth-ren-lasuite-federez"
];
system-bastion = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICqc0bjLqkfLXrt1eZNdZiEvUbOyWD6fluyx/nDGf9Rh root@bastion-mtz-lasuite-federez"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFg7cpJC6sUc8Gt8VnGZ/BpojEp/dbRdVjpOBf2NO5Rg root@bastion-ren-lasuite-federez"
];
asyncnomi = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIENo/g3BZ1bJViYE6EY4VZO96a4q8U4nWKjTprQJtjEH asyncnomi" ];
gamma = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhuKmuBPLAtQSjy4E4UaEmf8Qj56414r+adAJ6BgmO8 gamma" ];
jeltz = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHabXDr/vrx361yaxKK58jHJB77TNVZvqhkIiaTB7ECI jeltz" ];
@ -64,4 +69,9 @@ in
"wireguard/wg-private-zone-2-id-10.age".publicKeys = system-wg ++ users;
"wireguard/wg-private-zone-2-id-11.age".publicKeys = system-wg ++ users;
"wireguard/wg-private-zone-2-id-12.age".publicKeys = system-wg ++ users;
# Bastion secrets
"bastion/wg-private-zone-1.age".publicKeys = system-bastion ++ users;
"bastion/wg-private-zone-2.age".publicKeys = system-bastion ++ users;
}

View file

@ -0,0 +1,14 @@
{ ... }:
{
# Enable packet forwarding and pack logging
boot.kernel.sysctl = {
# Ipv4
"net.ipv4.conf.all.forwarding" = true;
# Ipv6
"net.ipv6.conf.all.forwarding" = true;
# NF
"net.netfilter.nf_conntrack_acct" = 1;
"net.netfilter.nf_conntrack_log_invalid" = 255;
};
}

View file

@ -1,5 +1,55 @@
{ ... }:
{ config, lib, pkgs, ... }:
let
# Import users wireguard sessions
users-wg = import ./../users-wg.nix;
# Import nodes
nodes = import ./../../nodes.nix;
myPeer = nodes."${config.hostName}";
myZone = myPeer.zone;
buildSecret = zone: {
"wg-private-zone-${toString zone}" = {
file = ./../../secrets/bastion + ( "/wg-private-zone-" + toString zone + ".age" );
owner = "root";
group = "root";
};
};
peers = map (peerConfig: {
name = "${peerConfig.name}";
publicKey = peerConfig.publicKey;
allowedIPs = [
"172.19..${toString (myZone + 128)}${toString peerConfig.id}/32"
"fc00:f::${toString (myZone + 128)}:${toString peerConfig.id}/128"
];
persistentKeepalive = 25;
}) users-wg;
interface = {
"mgmt" = {
ips = [
"172.19.${toString (myZone + 128)}.254/24"
"fc00:f::${toString (myZone + 128)}:254/96"
];
privateKeyFile = config.age.secrets."wg-private-zone-${toString myZone}".path;
listenPort = 51920;
peers = peers;
};
};
in
{
# TODO
age.secrets = buildSecret myZone;
# Networkd backend introduce in 25.05
# No independant target are generated
# when using networkd as a backend
# If custom systemd ordering is needed
# between wg interface and the rest of
# networking: switch to false here
networking.wireguard.useNetworkd = true;
# Return all WireGuard interfaces for each node
networking.wireguard.interfaces = interface;
}

View file

@ -35,7 +35,7 @@ let
interface = {
"mesh" = {
ips = [
"172.19.${toString myZone}.${toString myId}/16"
"172.19.${toString myZone}.${toString myId}/17"
"fc00::${toString myZone}:${toString myId}/96"
];
privateKeyFile = config.age.secrets."wg-private-zone-${toString myZone}-id-${toString myId}".path;

12
shared/users-wg.nix Normal file
View file

@ -0,0 +1,12 @@
[
{
id = 1;
name = "asyncnomi";
publicKey = "bj79Gbb4vIv4/fFFANtr8BwjADDQtrZfZg85sZpCuRM=";
}
{
id = 2;
name = "gamma";
publicKey = "hrYk9spPai3X2bxtZXvwE35MGKUr/G60ZZ4ahgPeZhs=";
}
]