feat(wireguard): tower rejoint le wg1 du VPS en pair 10.100.0.3
Le forward de box 77.207.176.170:42070 est mort : tower devient pair client du hub wg1 avec persistentKeepalive. L'alias ssh tower pointe sur 10.100.0.3 et la cle root du VPS est autorisee sur tower. Cle privee dans secrets/wireguard.yml (recipient tower).
This commit is contained in:
@@ -28,12 +28,9 @@
|
||||
User = "hermes";
|
||||
Port = 22;
|
||||
};
|
||||
# tower par le VPN wg1 du VPS (10.100.0.1) : l'ancien forward de la box
|
||||
# (77.207.176.170:42070) est mort, l'IP publique change.
|
||||
"tower" = {
|
||||
HostName = "77.207.176.170";
|
||||
User = "marc";
|
||||
Port = 42070;
|
||||
};
|
||||
"tower-rack" = {
|
||||
HostName = "10.100.0.3";
|
||||
User = "marc";
|
||||
Port = 22;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
...
|
||||
}: let
|
||||
# Client WireGuard vers le VPS (voir la section WIREGUARD CLIENT en bas).
|
||||
wgClientEnable = false;
|
||||
wgClientEnable = true;
|
||||
in {
|
||||
|
||||
imports = [
|
||||
@@ -52,6 +52,13 @@ in {
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdX5m7b8xWL/9ZUeFRxahB4YY0v2rAV5CCFv8xTOlUh marc@Air-de-Marc"
|
||||
];
|
||||
|
||||
# Clé root du VPS anywhere (/root/.ssh/id_ed25519) : donne au VPS l'accès SSH
|
||||
# à tower par le tunnel wg1 (10.100.0.3), donc depuis n'importe où sans
|
||||
# dépendre de l'IP publique de la box. Remplace l'ancien forward 42070.
|
||||
users.users.marc.openssh.authorizedKeys.keys = lib.mkAfter [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAc2f6U09CWD2yQNcyGz6Pz9EN3aJzvdCvr7FrSSgpwx root@anywhere"
|
||||
];
|
||||
|
||||
networking.hostName = "tower";
|
||||
sops.defaultSopsFile = lib.mkForce ../../secrets/tower.yml;
|
||||
|
||||
@@ -409,32 +416,20 @@ in {
|
||||
users.users.hermes.extraGroups = [ "systemd-journal" ];
|
||||
|
||||
# ========================================================================
|
||||
# WIREGUARD CLIENT - Connexion au réseau VPN du VPS RackNerd (anywhere)
|
||||
# WIREGUARD CLIENT - tower pair du VPS anywhere (hub-and-spoke wg1)
|
||||
# ========================================================================
|
||||
# Objectif : tower rejoint le réseau wireguard (10.100.0.0/24) du VPS
|
||||
# pour que macOS (et d'autres pairs) puisse s'y connecter directement
|
||||
# via SSH dans le VPN (alias tower-rack), sans rediriger le trafic
|
||||
# internet de tower via le serveur VPN.
|
||||
#
|
||||
# MANQUE AVANT ACTIVATION :
|
||||
# 1. Générer la paire de clés de tower : `wg genkey | tee privatekey | wg pubkey > publickey`
|
||||
# 2. Insérer le secret dans secrets/tower.yml (sops) :
|
||||
# wireguard:
|
||||
# tower_private_key: ENC[AES256_GCM,...]
|
||||
# 3. Déclarer le secret dans la conf (déjà fait ci-dessous, conditionnel)
|
||||
#
|
||||
# Le peer (serveur anywhere) : publicKey = la clé publique du VPS
|
||||
# (extraite du service wireguard de anywhere, ou via `wg showconf wg1` sur le VPS).
|
||||
# Endpoint : le VPS RackNerd expose wireguard sur le port 443 UDP.
|
||||
# IP attribuée au client tower : 10.100.0.3/32 (cohérente avec le réseau existant).
|
||||
#
|
||||
# ATTENTION : `allowedIPs = [ "10.100.0.0/24" ];` limite le tunnel au réseau
|
||||
# privé du VPN ; le trafic internet de tower ne passe PAS par le VPS.
|
||||
# tower n'a aucune exposition entrante utile (NAT residentiel + IP publique
|
||||
# dynamique) : il rejoint donc en CLIENT le wg1 du VPS (10.100.0.1/24) et y
|
||||
# prend 10.100.0.3. Depuis le VPS : `ssh marc@10.100.0.3` (alias `tower` dans
|
||||
# modules/home/ssh). Le Mac est l'autre pair (10.100.0.2) et passe par le meme
|
||||
# hub. Aucun port a ouvrir sur tower : wg-quick garde une socket source
|
||||
# ephemere et conntrack suit la reponse. persistentKeepalive entretient la
|
||||
# traduction NAT, donc le VPS joint tower a tout moment.
|
||||
# - allowedIPs = 10.100.0.0/24 : seul le reseau du VPN passe par le tunnel,
|
||||
# le trafic Internet de tower reste sur la connexion locale.
|
||||
# - Cle privee dans secrets/wireguard.yml (sops, recipient tower), cle
|
||||
# publique declaree en peer cote VPS (services/wireguard/default.nix).
|
||||
# ========================================================================
|
||||
# DESACTIVE tant que le secret n'existe pas : sops-nix refuse de construire le
|
||||
# manifeste si la cle est absente de tower.yml (« the key 'wireguard' cannot be
|
||||
# found »), ce qui casse tout le build. Passer a true apres les etapes 1 et 2
|
||||
# ci-dessus (et l'ajout de la cle publique de tower comme peer sur le VPS).
|
||||
networking.wg-quick.interfaces = lib.mkIf wgClientEnable {
|
||||
wg1 = {
|
||||
address = [ "10.100.0.3/32" ];
|
||||
@@ -455,15 +450,16 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
# Secret sops nécessaire pour le client wireguard (à créer dans secrets/tower.yml)
|
||||
# Clé privée du pair tower. Fichier sops dédié (recipient tower) pour ne pas
|
||||
# toucher à tower.yml : `sops secrets/wireguard.yml` pour la rotation.
|
||||
sops.secrets."wireguard/tower_private_key" = lib.mkIf wgClientEnable {
|
||||
sopsFile = ../../secrets/tower.yml;
|
||||
sopsFile = ../../secrets/wireguard.yml;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
mode = "0400";
|
||||
};
|
||||
# Aucun port UDP à ouvrir : wg-quick en mode client n'écoute pas de port fixe.
|
||||
|
||||
networking.firewall.allowedUDPPorts = lib.mkIf wgClientEnable [ 443 ];
|
||||
|
||||
# ========================================================================
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
wireguard:
|
||||
tower_private_key: ENC[AES256_GCM,data:18G4AHm2luRoQlp8JojzXuqd/bmHbHz0/m9z9t4NmUg/Px02C+rxHi3XskA=,iv:ciJqkABAhMX7tAAk7mxqXJHOZooOaQgxmUNgZj0lNUc=,tag:u64nDOj+qiOcvVvhUDGUFw==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKdVRzTlhEeG9UaVVyM2ox
|
||||
ZzNmWFFudi9IalhqbkdXSklWTjk0SGcrMlZNCmlMWXk2QnlVeVM5NUt4ZW9DNVVj
|
||||
UUJEN1VUTTZLYzR5dHB1SHV0SDFiL3MKLS0tIDUxdHlNSU9rQytqTlBMbXZFdklQ
|
||||
TDhPNUw5TTFNU0V1Ri9VcFdxQlJuYjAKdK7L6YfMPvzyu2vjJejsgJ+m7LSxhSz5
|
||||
1to756t5BzS42B+maqDMN/xa8hCLf9RksyinvrkrkHBJa1RjiYma5w==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1usm3v0ugducrzcwud60dda7xfnj49fdhecj7kcsfm7dzwzrzeyqq2jc2hm
|
||||
lastmodified: "2026-10-19T05:47:44Z"
|
||||
mac: ENC[AES256_GCM,data:RYzNwpTDd24BWC5BPeJmpDCqh2iGhuknWMv411dMTSaLJYnPKxxG2c2YjpnN7MRU6YcBN1GV5hOXaGaEvoZX5/xSF1cWR0hwZ8WmqGLjqx4MZKW6ZuaZH9OE97VgKlm7wC7Mp4KJfX6lmHVs1QWPnLBhb2bfrkJw4Qmn0YE/5SA=,iv:99db6aRfdux7wrTv5DQgX71HHY3QBQ4/du4wjLja4TM=,tag:w/CQvy7BeyKpnlm2M2fbjQ==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.3
|
||||
@@ -17,6 +17,13 @@
|
||||
publicKey = "WB7Wx7GmjpC1XRDFC74ekC7ROlkPmFzrPgIpn4KEOlM=";
|
||||
allowedIPs = [ "10.100.0.2/32" ];
|
||||
}
|
||||
{
|
||||
# tower (NixOS, NAT residentiel) : pair client, sert au SSH/ET entrant
|
||||
# depuis ce VPS et depuis le Mac. Cle publique issue de
|
||||
# secrets/wireguard.yml (recipient tower) sur tower.
|
||||
publicKey = "Qd0IGtduY3Jq5jxAqx4s2B4QlWEvGG4ACeGmrM9V2W0=";
|
||||
allowedIPs = [ "10.100.0.3/32" ];
|
||||
}
|
||||
];
|
||||
postSetup = ''
|
||||
${pkgs.iptables}/bin/iptables -A FORWARD -i wg1 -j ACCEPT
|
||||
|
||||
Reference in New Issue
Block a user