Migrer le matériel d'une passerelle
Remplacer l’ordinateur d’une passerelle sans perdre sa configuration ni ses données. La différence avec une installation neuve tient en une phrase : la machine est neuve, l’état ne l’est pas.
C’est de là que viennent presque tous les pièges de cette page.
Ce qui suit tout seul, ce qui ne suit pas
Section intitulée « Ce qui suit tout seul, ce qui ne suit pas »| Repris automatiquement | À reprendre à la main |
|---|---|
| DNS et DHCP de la zone | Données des services |
| Registre des services, portail, reverse proxy | Dépôt de sauvegarde |
| Cibles de supervision, tags de déploiement | Identité VPN |
| Destinataires des secrets sops | Propriétaires des fichiers restaurés |
| Clés SSH de déploiement | system.stateVersion |
Les secrets ne sont pas liés au nom d’hôte : le fichier de règles sops ne connaît que la clé d’administration et la clé d’infrastructure. Un renommage n’y change rien.
Relever le nouveau matériel
Section intitulée « Relever le nouveau matériel »Rien n’est modifié à cette étape : on collecte ce qui devra être écrit dans la configuration.
-
Démarrer sur la clé USB (image
just build-iso), carte Wi-Fi USB branchée dans le port qui sera son port définitif. -
Relever interfaces, adresses MAC et disques
Fenêtre de terminal ip -o linklsblk -o NAME,SIZE,MODEL,SERIAL,TYPELa MAC permanente d’une carte Wi-Fi diffère de sa MAC courante, souvent aléatoire. C’est la permanente qui compte, visible dans le champ
permaddr. -
Identifier physiquement quel port sera le WAN et lesquels le LAN, en débranchant et rebranchant. Étiqueter les prises.
Préparer la configuration
Section intitulée « Préparer la configuration »Les interfaces Wi-Fi n’ont pas à figurer dans gateway.lan.interfaces :
hostapd place lui-même son interface dans le pont.
zones: maison: gateway: wan: interface: "eno0" lan: interfaces: ["eno1", "eno2", "eno3"]
hosts: - hostname: "gw" zone: "maison:1.1" profile: "gateway" mac: "00:00:5e:00:53:00" disko: profile: "luks-btrfs-1-disk" devices: main: "/dev/nvme0n1"Renommer l’hôte au passage est le bon moment, la machine étant de toute façon réinstallée. Un alias portant le nouveau nom doit alors être supprimé : le générateur refuse qu’un nom soit à la fois alias et nom d’hôte.
Côté dossier machine, git mv usr/machines/<ancien> usr/machines/gw, puis
importer ./generated-configuration.nix et ./disko.nix dans default.nix.
Installer
Section intitulée « Installer »just install gw nixos <ip>La commande formate, installe et redémarre. Sur un disque chiffré, la
passphrase d’installation est demandée pendant le partitionnement :
la noter, just luks en aura besoin.
Préférer les étapes séparées à just full-install : sur un disque
chiffré, l’attente du retour de la machine suppose un démarrage sans
intervention, ce que la saisie de la passphrase interdit.
Basculer
Section intitulée « Basculer »-
Sauvegarder, sur l’ancienne passerelle
Fenêtre de terminal systemctl stop forgejo postgresqlsystemctl start restic-backups-system-main.serviceNe pas arrêter le résolveur DNS de la zone : la cible de sauvegarde est désignée par son nom, l’arrêter la rend introuvable.
-
Renommer le dépôt, sur le serveur de sauvegarde
Fenêtre de terminal mv /mnt/backup/restic/<ancien> /mnt/backup/restic/gwLe chemin d’un dépôt contient le nom d’hôte. Renommer conserve tout l’historique, alors qu’un nouveau nom repartirait d’un dépôt vide.
-
Échanger le matériel : extinction, déplacement des disques de données, câblage identique, démarrage et déverrouillage du disque.
-
Configurer et déployer
Fenêtre de terminal just configure gwjust apply-verbose gwjust configurepousse la clé d’infrastructure : c’est l’étape qui débloque sops, et donc l’accès console de secours. -
Republier les comptes de sauvegarde sur le serveur qui les héberge
Fenêtre de terminal just apply-local
Restaurer les données
Section intitulée « Restaurer les données »Le serveur de sauvegarde isole les dépôts par hôte : l’utilisateur authentifié doit être égal au premier segment du chemin. Le dépôt renommé reste donc inaccessible tant que le serveur n’a pas republié le nouveau compte.
restic-system-main snapshotsCette vérification est le vrai contrôle : elle doit lister l’historique de l’ancienne machine. Un dépôt vide signale une authentification réussie mais sur un mauvais chemin, ne rien restaurer dans ce cas.
-
Arrêter les services dont l’état va être remplacé.
-
Vider les répertoires d’état avant de restaurer.
-
Restaurer, un mode à la fois
Fenêtre de terminal restic-system-main restore latest --target / \--include /var/lib/forgejo --include /var/lib/postgresql -
Rétablir les propriétaires, par nom.
-
Redémarrer les services et contrôler.
Vérifier avant de conclure
Section intitulée « Vérifier avant de conclure »| Contrôle | Attendu |
|---|---|
systemctl --failed | aucune unité |
ls /var/lib/postgresql | une seule majeure |
| Comptes et dépôts applicatifs | ceux d’avant la migration |
restic-system-main snapshots | historique complet |
| Adresse sur le maillage VPN | inchangée |
| Points d’accès Wi-Fi | présents, clients servis |
| Redémarrage à froid | la machine remonte seule |
Le bloc disko d’etc/config.yaml n’est lu qu’à l’installation, le commenter
une fois la migration terminée. Détail des recettes dans
Justfile et des clés de configuration
dans Le fichier config.yaml.