fix: la clé pré-partagée n'était écrite dans aucune config client L'assistant de génération produisait une PresharedKey affichée à l'écran mais stockée nulle part, et l'import d'un .conf ignorait la ligne. Face à un serveur qui en attend une, le tunnel montait et l'interface existait — sans qu'aucun handshake n'aboutisse jamais. La PSK devient un champ à part entière. fix: options de ligne de commande wireguard.exe incorrectes sous Windows /installtunnel et /uninstalltunnel n'existent pas ; les vrais verbes sont /installtunnelservice et /uninstalltunnelservice. S'y ajoutaient l'absence de résolution du chemin d'installation (WireGuard n'est pas dans le PATH), l'absence totale d'élévation UAC alors que ces commandes l'exigent, et une détection d'installation qui sondait une application graphique avec --help. feat: diagnostic de bout en bout de la chaîne de connexion Le bouton de test s'arrêtait à la joignabilité UDP et concluait « serveur joignable » sur un tunnel qui n'échangeait rien. Il déroule désormais quatorze étapes, de la configuration locale jusqu'au DNS dans le tunnel, et désigne l'étape qui bloque. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
171 lines
10 KiB
Markdown
171 lines
10 KiB
Markdown
# Changelog — WGSecure (WGS)
|
||
|
||
Toutes les modifications notables de ce projet sont documentées ici.
|
||
Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/).
|
||
Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/).
|
||
|
||
---
|
||
|
||
## [0.4.5] — 2026-08-31
|
||
|
||
### Corrigé
|
||
- **Tunnel « connecté » sans jamais négocier de handshake** : la clé pré-partagée (PresharedKey)
|
||
n'était écrite dans aucune configuration client. L'assistant « Générer config serveur + client »
|
||
en produisait une, visible à l'écran, mais impossible à enregistrer ; et l'import d'un fichier
|
||
`.conf` l'ignorait purement et simplement. Face à un serveur qui en attend une, le tunnel montait,
|
||
l'interface existait, l'application affichait « Connecté » — et pas un paquet ne passait. La clé
|
||
pré-partagée est désormais un champ à part entière : saisie, importée, exportée et écrite dans la
|
||
configuration du tunnel.
|
||
- **Latence du serveur jamais mesurée hors système anglophone** : la sortie de `ping` est traduite
|
||
(« temps= » en français), et seule la forme anglaise était reconnue. Un serveur qui répondait
|
||
correctement était rapporté comme injoignable.
|
||
|
||
### Ajouté
|
||
- **Diagnostic complet de la chaîne de connexion** : le bouton « Lancer le test de connexion »
|
||
ne se contentait plus d'un simple test UDP. Il déroule maintenant toute la chaîne et désigne
|
||
l'étape exacte qui bloque : présence de WireGuard, complétude de la configuration, cohérence de
|
||
la paire de clés du client, clé pré-partagée, résolution du nom du serveur, route empruntée,
|
||
cohérence des « IPs autorisées », ping ICMP, port UDP, montage du tunnel, handshake, trafic
|
||
chiffré, joignabilité du pair distant et résolution DNS dans le tunnel.
|
||
- **Détection des deux pièges de routage classiques** : l'adresse du serveur incluse dans les
|
||
« IPs autorisées » (le tunnel se coupe l'herbe sous le pied dès qu'il monte) et le réseau local
|
||
couvert par ces mêmes plages (imprimante, NAS et box basculent dans le VPN).
|
||
- **Champ MTU** : réglable, laissé automatique par défaut, importé et exporté avec les fichiers `.conf`.
|
||
- **Bouton « Appliquer le volet client »** dans l'assistant de génération : reporte clés et clé
|
||
pré-partagée directement dans la configuration, au lieu de les laisser dans une fenêtre à recopier.
|
||
|
||
### Modifié
|
||
- **Statistiques du tunnel** : le dernier handshake est lu via `wg show latest-handshakes`, ce qui
|
||
permet d'en donner l'ancienneté exacte et de signaler un pair qui a cessé de répondre.
|
||
|
||
## [0.4.4] — 2026-08-31
|
||
|
||
### Corrigé
|
||
- **Tunnel impossible à monter sous Windows** : les commandes envoyées à `wireguard.exe`
|
||
utilisaient des options qui n'existent pas (`/installtunnel`, `/uninstalltunnel`). WireGuard
|
||
affichait sa boîte d'aide et sortait sans rien faire : le bouton « Connecter » ne montait jamais
|
||
le tunnel. Les vraies options `/installtunnelservice` et `/uninstalltunnelservice` sont
|
||
désormais utilisées.
|
||
- **WireGuard déclaré absent sous Windows** : l'installateur WireGuard n'ajoute pas son
|
||
répertoire au PATH, et l'application cherchait `wireguard.exe` et `wg.exe` sans chemin. Ils sont
|
||
maintenant localisés dans `C:\Program Files\WireGuard`.
|
||
- **« Accès refusé » silencieux sous Windows** : installer ou retirer un tunnel exige les droits
|
||
administrateur, qui n'étaient jamais demandés. Une invite UAC apparaît désormais au moment
|
||
voulu, et l'annulation de cette invite est signalée clairement.
|
||
- **Détection de WireGuard toujours négative sous Windows** : le test d'installation lançait
|
||
`wireguard --help`, une option inexistante sur une application graphique. La présence du
|
||
logiciel est maintenant vérifiée sur le disque.
|
||
- **Échec annoncé sur un tunnel qui montait** : le service du tunnel démarre de façon asynchrone
|
||
et l'état était vérifié trop tôt. L'application attend désormais son démarrage effectif.
|
||
|
||
### Ajouté
|
||
- **Statistiques du tunnel sous Windows** : volumes envoyés/reçus, pair et dernier handshake,
|
||
jusqu'ici affichés vides.
|
||
|
||
## [0.4.3] — 2026-08-31
|
||
|
||
### Corrigé
|
||
- **Fenêtres noires clignotantes sous Windows** : l'application interroge en continu l'état du
|
||
tunnel et la latence du serveur, et chacune de ces vérifications ouvrait brièvement une fenêtre
|
||
de commande. Des fenêtres DOS apparaissaient et disparaissaient en permanence pendant toute
|
||
l'utilisation du logiciel. Ces appels s'exécutent désormais de façon totalement invisible.
|
||
|
||
## [0.4.2] — 2026-08-31
|
||
|
||
### Corrigé
|
||
- **Binaire Windows qui ne démarrait pas** : le paquetage PyInstaller sous Wine oubliait
|
||
d'embarquer le plugin Qt nécessaire au rendu de l'interface graphique sous Windows, faisant
|
||
échouer l'application dès le lancement avec l'erreur « no Qt platform plugin could be
|
||
initialized ». Le plugin est désormais inclus systématiquement dans le binaire.
|
||
|
||
## [0.4.1] — 2026-08-31
|
||
|
||
### Corrigé
|
||
- **Plus d'accès internet après déconnexion du VPN** : `wg-quick down` refusait de s'exécuter
|
||
quand l'interface avait disparu sans passage par lui (crash, arrêt brutal, veille) et ne
|
||
retirait donc jamais l'entrée DNS posée par `wg-quick up` — la résolution de noms restait
|
||
pointée vers un serveur devenu injoignable. Nettoyage DNS désormais garanti à la connexion,
|
||
la déconnexion, la fermeture de l'application et au démarrage suivant.
|
||
- **Détection de connexion fiabilisée** : `wg show` retourne un code de succès même en cas de
|
||
refus de permission pour un utilisateur non administrateur — l'application se croyait
|
||
déconnectée en permanence et ne démontait donc jamais le tunnel à la fermeture. Détection
|
||
réécrite sans nécessiter de privilèges.
|
||
- **Interface figée pendant la connexion/déconnexion** : les commandes réseau (souvent
|
||
accompagnées d'une demande de mot de passe) tournaient sur le thread graphique et gelaient
|
||
la fenêtre. Déportées en tâche de fond.
|
||
- **Dialogues d'authentification répétés à chaque connexion** : la détection « sudo demande un
|
||
mot de passe » ne fonctionnait pas en session non anglophone ni pour les comptes disposant
|
||
de tous les droits sudo, et l'écriture de la configuration WireGuard n'était couverte par
|
||
aucune règle sudo autorisée. Chaîne de privilèges revue de bout en bout.
|
||
- Restauration garantie de l'état réseau à la fermeture de l'application, sous Linux comme
|
||
sous Windows (fermeture normale, icône système, signal d'arrêt, plantage).
|
||
|
||
### Ajouté
|
||
- Diagnostic des droits d'exécution (`make check-privileges` et bouton dans le panneau Admin)
|
||
pour identifier précisément quelle commande déclenche un dialogue d'authentification.
|
||
- Avertissement lorsqu'un tunnel WireGuard tourne en dehors de WGSecure (autre nom
|
||
d'interface), cause fréquente de coupure DNS non détectée jusqu'ici.
|
||
|
||
---
|
||
|
||
## [0.2.0] — 2026-06-01
|
||
|
||
### Ajouté
|
||
- **Onglet "À propos"** dans le panneau admin : logo bouclier, version, branding JT-Tools by Johnny
|
||
- **Icône bouclier vectorielle** générée par QPainter (7 résolutions : 16→256 px)
|
||
- Vert connecté / Rouge déconnecté / Orange connexion en cours / Bleu app / Violet admin
|
||
- **Icône barre des tâches** : installation automatique de `~/.local/share/icons/wgsecure.png`
|
||
et `~/.local/share/applications/wgsecure.desktop` au premier démarrage
|
||
- **Thème sombre uniforme** sur les 6 onglets du panneau admin (CSS partagé `_TAB_CSS`)
|
||
- Fond `#1c2833`, texte blanc, champs semi-transparents
|
||
- Bandeau coloré par onglet (bleu/navy/teal/bleu/rouge)
|
||
- TabBar cohérente avec onglet actif mis en évidence
|
||
- **Makefile** : compilation binaire Linux (`make linux`) et Windows (`make windows` via Wine)
|
||
- **README** enrichi avec badges shields.io (version, Python, PyQt6, plateformes) et emojis
|
||
|
||
### Corrigé
|
||
- **Bug MDP vide** : `set_admin_password("")` effaçait incorrectement — hashait la chaîne vide,
|
||
forçant une demande de mot de passe vide après suppression
|
||
- **Menu systray incomplet** : `QAction` en variables locales GC'd par Python avant affichage →
|
||
toutes les actions passent désormais `self` comme parent Qt
|
||
- **Section infos invisible** : `QWidget` sans `autoFillBackground` ne peignait pas son fond ;
|
||
remplacé par `QFrame` avec `setAutoFillBackground(True)` et couleurs explicites
|
||
- **Bouton agrandir persistant** : `setWindowFlag` seul ignoré par Mutter/XWayland →
|
||
`setWindowFlags()` complet sans `WindowMaximizeButtonHint`
|
||
|
||
### Amélioré
|
||
- Fenêtre principale agrandie 380×460 → 400×520 pour afficher les 6 lignes d'infos
|
||
- Police des labels infos : 11 → 12 px, couleurs explicites `#2c3e50`
|
||
- Panneau admin : largeur 620 → 700 px pour éviter le débordement des onglets
|
||
- `app.setWindowIcon()` posé sur `QApplication` (multi-tailles) + `setDesktopFileName()`
|
||
- Page About : icône 96 → 86 px (−10 %), texte en blanc sur fond sombre `#1c2833`
|
||
|
||
---
|
||
|
||
## [0.1.0] — 2026-06-01
|
||
|
||
### Ajouté
|
||
- Interface graphique PyQt6 avec icône systray (Linux & Windows)
|
||
- **Mode User** (défaut) : connexion / déconnexion WireGuard en un clic, statut en temps réel
|
||
- **Mode Admin** (`--admin` ou via le menu) protégé par mot de passe
|
||
- Panneau Admin avec 5 onglets :
|
||
- **WireGuard** : configuration serveur (adresse, port UDP, clé publique, DNS, IP client)
|
||
- **Clés** : génération de paires Curve25519 (clé privée / publique), aperçu config exportable
|
||
- **MFA** : génération de secret TOTP, QR Code compatible Google Authenticator / Aegis
|
||
- **Test connexion** : vérification UDP du serveur avant tunnel
|
||
- **Sécurité** : gestion du mot de passe administrateur (SHA-256 + salt)
|
||
- Surcouche MFA : dialogue TOTP avec minuterie de validité (fenêtre glissante ±1)
|
||
- Génération de clés WireGuard via `cryptography` (X25519, sans `wg` binaire)
|
||
- Écriture automatique du fichier `.conf` WireGuard avec permissions `0600`
|
||
- Connexion via `wg-quick` (Linux) ou `wireguard /installtunnel` (Windows)
|
||
- Statut temps réel : trafic RX/TX, dernier handshake
|
||
- Réduction dans le systray à la fermeture de la fenêtre principale
|
||
- Configuration persistante JSON (`~/.wgsecure/config.json`)
|
||
|
||
---
|
||
|
||
*Versions planifiées :*
|
||
- `0.3.0` — Import/export de profils WireGuard (.conf), support multi-profils
|
||
- `0.4.0` — MFA par clé matérielle (FIDO2/YubiKey)
|
||
- `0.5.0` — Paquet installable (Windows .exe / Linux .deb)
|