SITE-TechnoLibre/PREMIERE-HEURE.md
Daniel Allaire 2e223f135a Le site de reprise refait sur le modele de SITE-Chezlepro, et sa face publique par relais
- Carte au schema actuel (index 31, zones derivees, publication VLAN 37), equipements reels :
  frontiere requin, noeud maurice, commutateur caillou.
- Neuf machines, memes noms et VMID qu'au site de Chezlepro ; runner des deux locataires.
- maurice : vmbr0 administration (nic0), vmbr1 VLAN-aware pour les VM (nic2) ; stockages nvme
  et miroir (ZFS 2 x 12 To, site-backup-01).
- opnsense.yml : optN mesures (opt1 transit, opt2..opt8 zones, opt9 RELAIS) ; face publique par
  le relais (opt9, RELAIS_GW), adresse du site et pool des locataires ; silence du relais.
- underlay.yml : reseau `relais` (tunnel WireGuard 10.31.60.0/30), hote relais (VPS OVH) et
  cles publiques des deux bouts.
- plan/domaines.yml et plan/mainteneurs.yml ; documentation (README, PREMIERE-HEURE,
  COLLECTE) a jour du releve sur place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:20:04 -04:00

230 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# La première heure — adresses et comptes
> **Pour qui :** l'**exploitant**, devant le matériel de TechnoLibre, avant tout déploiement.
Proxmox et OPNsense sont déjà installés. Ce document ne fait qu'une chose : leur donner les
**bonnes adresses** et les **comptes** dont Set-OPS a besoin pour agir. Rien n'est déployé
ici ; on rend seulement les deux machines joignables et pilotables.
**L'ordre n'est pas indifférent.** La frontière porte la passerelle de chaque zone : si elle
n'est pas posée, le nœud aura des adresses qui ne mènent nulle part, et le diagnostic
parlera de réseau alors qu'il s'agira d'une patte manquante.
---
## 0 · Se poser sur son réseau d'administration
Le poste est branché sur `caillou`, carte filaire en `10.31.0.101/24` — c'est de là que
tout se fait. De cette adresse on atteint la frontière (`.1`), le nœud (`.11`) et, plus
tard, le rebond vers les machines du site.
> À relever avant : l'adresse **actuelle** des deux machines, pour pouvoir y revenir si
> une manœuvre coupe l'accès.
---
## 1 · La frontière — `requin`
### 1.1 Les neuf pattes
Une par zone, plus le plan d'administration et le transit. **Le dernier octet est toujours
`.1`** : c'est l'invariant dont le devis dérive les règles.
| Interface | VLAN | Adresse | Ce qu'elle sert |
|---|---|---|---|
| administration | — | `10.31.0.1/24` | le poste de l'exploitant, le rebond |
| transit | 40 | `10.0.4.1/24` | la sortie des locataires |
| pilotage | 31 | `10.31.31.1/24` | le runner du site |
| autorité | 32 | `10.31.32.1/24` | l'autorité de certification |
| génome | 33 | `10.31.33.1/24` | la forge et le cache |
| service | 34 | `10.31.34.1/24` | les noms |
| sauvegarde | 35 | `10.31.35.1/24` | le dépôt |
| supervision | 36 | `10.31.36.1/24` | le témoin |
| publication | 37 | `10.31.37.1/24` | l'edge et le DNS public du site |
**Le câblage du 2026-10-13** : deux ports, deux rôles.
- **`igc0` (LAN, 2,5G)** : l'administration seule, `10.31.0.1/24`, branchée sur `caillou`
(VLAN 1 non étiqueté). Aucun VLAN de zone n'y est posé.
- **`ix0` (SFP+ 10G, non assigné)** : branché sur un SFP+ de `caillou`, comme `nic2` de `maurice`
(`vmbr1`) — le chemin des zones est `ix0` → `caillou` → `nic2`. Les pattes des zones sont
des **interfaces VLAN posées sur `ix0`** : `vlan031` à `vlan037`, et `vlan040` pour le
transit (OPNsense impose le préfixe `vlan0`). `caillou` porte aussi le VLAN 40. Assignées
le 2026-10-13 : `opt1` = `vlan040`, `opt2` à `opt8` = `vlan031` à `vlan037` ; `ix0`
lui-même n'est plus assigné. Non étiqueté, `ix0`
est dans le VLAN 1 de `caillou`, celui de l'administration : il ne reçoit pas d'adresse.
`caillou` est déjà réglé : on n'y touche pas.
### 1.2 Relever les noms d'interface — le piège du jour
Dans **Interfaces → Assignments**, noter le nom `optN` attribué à **chacune** des neuf,
transit compris.
> Le devis raisonne en **arrivée** : une règle posée sur la mauvaise patte ne correspond
> jamais, et rien ne le signale. Ces dix noms vont dans `opnsense.yml`, et ils doivent
> être exacts.
### 1.3 Le compte d'API
**System → Access → Users** → nouvel utilisateur `ansible`, puis **api keys** → créer.
Le fichier téléchargé contient la clé et le secret.
Ils vont dans la voûte, **jamais** dans un fichier de plan :
```
cd ../Set-OPS-public
ANSIBLE_VAULT_IDENTITY_LIST="$(python3 scripts/voutes.py identites)" \
ansible-vault edit ../SITE-Technolibre/underlay.vault.yml
```
→ `vault_opnsense_api_key` et `vault_opnsense_api_secret`, déjà déclarés vides.
### 1.4 L'accès SSH
Le rebond vers les machines du site passe par la frontière, et `frontiere_pki.py` y lit
`config.xml` par `sudo`. Dans **System → Access → Users**, l'utilisateur `ansible` (le même
que celui de l'API) reçoit :
- **Login shell** : `/bin/sh` ;
- **Group membership** : `admins` ;
- **Authorized keys** : cette clé publique :
```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICf8ecGQ555LuTDaFaqzc3SG+wy0Y8ECqmsIRxemc0dM Cle ansible pour le royaume technolibre
```
Puis, dans **System → Settings → Administration** :
- **Secure Shell** : activé, sur l'interface LAN seulement ; connexion root refusée,
mot de passe refusé (clé seulement) ;
- **Sudo** : `No password`, pour le groupe `admins`.
Vérifier ensuite, depuis le poste :
```
ssh ansible@10.31.0.1 'echo ok; sudo -n true && echo "sudo ok"'
```
---
## 2 · Le nœud — `maurice`
### 2.1 Le nom d'hôte
`maurice` (posé à l'installation) — c'est ce que le plan déclare, et l'API l'utilise comme
identifiant dans ses chemins. Un autre nom oblige à corriger `proxmox-hebergeur.yml`.
### 2.2 Les adresses
Deux ponts, une carte chacun :
| Pont | Carte | Rôle | Adresse |
|---|---|---|---|
| `vmbr0` | `nic0` (1G) | administration seule | `10.31.0.11/24` — passerelle `10.31.0.1` |
| `vmbr1` | `nic2` (10G) | les VLAN des VM (31 à 37) | aucune |
Sur `vmbr1`, plus tard : le transit (VLAN 40, `10.0.4.11/24`) et le transport VXLAN
(VLAN 50, `10.31.50.11/24`).
> `vmbr1` doit être **VLAN aware** : sans cela les VLAN des zones ne traverseront pas, et
> les VM naîtront sur un réseau muet.
### 2.3 Le compte d'API
```
pveum user add ansible@pve
pveum aclmod / -user ansible@pve -role Administrator
pveum user token add ansible@pve set-ops --privsep 0
```
Le **secret n'est affiché qu'une fois**. Il va dans la voûte, sous
`proxmox_api_token_id` et `proxmox_api_token_secret`.
> **Sur `Administrator`, autant le dire franchement.** Le minimum est `VM.Allocate`,
> `VM.Clone`, `VM.Config.*`, `Datastore.AllocateSpace` et les droits SDN. Mais l'outil crée
> aussi des objets réseau et détruit des VM : partir large le premier jour évite de courir
> après des `403` pendant le déploiement. Le resserrer ensuite est un rôle sur mesure, dix
> minutes — et c'est un geste à faire, pas une intention.
### 2.4 Le compte `ansible` du nœud
L'API ne fait pas tout : le SDN, le pare-feu du nœud et ses métriques se posent par SSH.
Même compte qu'au site de Chezlepro — `ansible`, par clé, `sudo` sans mot de passe :
```
apt install -y sudo
useradd -m -s /bin/bash ansible
install -d -m 700 -o ansible -g ansible /home/ansible/.ssh
echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICf8ecGQ555LuTDaFaqzc3SG+wy0Y8ECqmsIRxemc0dM Cle ansible pour le royaume technolibre' \
> /home/ansible/.ssh/authorized_keys
chown ansible:ansible /home/ansible/.ssh/authorized_keys
chmod 600 /home/ansible/.ssh/authorized_keys
echo 'ansible ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/ansible
chmod 440 /etc/sudoers.d/ansible
visudo -cf /etc/sudoers.d/ansible
```
Vérifier depuis le poste :
```
ssh -i ~/.ssh/id_ed25519_ansible_technolibre ansible@10.31.0.11 'hostname; sudo -n true && echo "sudo ok"'
```
Attendu : `maurice`, puis `sudo ok`.
### 2.5 Le gabarit doré
Depuis la clé USB, dossier `gabarits/` :
```
qmrestore vzdump-qemu-9006-*.vma.zst 9006 --storage nvme
qm template 9006
qm config 9006 | grep -E '^(name|machine|bios|template)'
```
Attendu : `name=modeleSetOPS-minimal`, `machine=q35`, `bios=ovmf`, `template=1`.
> `--storage` est **obligatoire** : le disque vient d'un Ceph qui n'existe pas ici.
> Et `qm template` est ce qui rend la VM clonable — sans lui, le clonage refusera.
### 2.6 Mesurer avant de matérialiser
```
vgs ; df -h
```
Les neuf machines du site demandent 816 Go en clones **complets** : 416 Go sur `nvme`, et
les 400 Go de `site-backup-01` sur `miroir`. Chaque locataire repris demande environ 460 Go
de plus — il ne tiendra pas sur le NVMe, et devra aller sur `miroir`.
---
## 3 · Renseigner ce qu'on a relevé
Dans `opnsense.yml` — les dix noms d'interface et les deux adresses de la frontière.
Dans la voûte — les quatre jetons.
Puis, depuis `Set-OPS-public` avec le lien `underlay.yml` pointant sur ce site :
```
make site-intrants # ce que le site exposera à ses locataires
python3 scripts/devis_reseau.py # ce qu'il faut poser sur le commutateur
python3 scripts/devis_sdn.py --verifier
```
---
## Ce qui est déjà décidé, et qu'il suffit de confirmer
| | |
|---|---|
| Index du site | `31` |
| Domaine | `socle.internal` |
| Routage des locataires | `sdn` — EVPN sur le nœud, ASN `65031`, contrôleur `EVPN0031` |
| Ponts | `vmbr0` (administration, `nic0`) ; `vmbr1` (VM, `nic2`), VLAN-aware |
| Stockage | `nvme` (LVM-thin, NVMe 465 Go) pour les VM ; `miroir` (ZFS, 2 × 12 To) pour `site-backup-01` |
| Gabarit | `9006` — `99998` est son précédent, jamais cloné |
Quatorze des dix-huit secrets du site sont déjà engendrés. Les quatre restants sont les
jetons ci-dessus.