feat: support split-DNS, infobulles UI et corrections Windows
- Ajout du support complet du split-DNS pour Linux (systemd-resolved) et Windows (NRPT) - Bouton de configuration des permissions ACL pour WireGuard sous Windows - Suppression de tous les appels à sc.exe (remplacés par PowerShell + wireguard.exe) - UAC gérée par wireguard.exe lui-même (pas par WGSecure) - Infobulles ajoutées sur tous les champs de configuration principaux - Correction du blocage du handshake lié au redémarrage de systemd-resolved - Incrémentation de la version à 0.7.3 Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
+23
-3
@@ -61,9 +61,20 @@ def build_client_config(cfg: Config) -> str:
|
||||
# `wg-quick up` en plein milieu de son exécution : l'interface est déjà
|
||||
# créée, le trap de nettoyage laisse un état partiel. Mieux vaut monter le
|
||||
# tunnel sans toucher au DNS système.
|
||||
dns_value = (wg.get("dns") or "").strip()
|
||||
if dns_value and dns_util.has_dns_backend():
|
||||
lines.append(f"DNS = {dns_value}")
|
||||
|
||||
# Split-DNS : si configuré, on ne met pas de DNS dans la config WireGuard
|
||||
# car les règles NRPT (Windows) ou systemd-resolved (Linux) géreront le routage.
|
||||
split_dns_server = (wg.get("split_dns_server") or "").strip()
|
||||
split_dns_domains = wg.get("split_dns_domains") or []
|
||||
|
||||
if split_dns_server and split_dns_domains and is_windows():
|
||||
# Sous Windows avec split-DNS : pas de DNS dans la config, tout sera géré par NRPT
|
||||
pass
|
||||
else:
|
||||
# Cas normal : utiliser le DNS principal
|
||||
dns_value = (wg.get("dns") or "").strip()
|
||||
if dns_value and dns_util.has_dns_backend():
|
||||
lines.append(f"DNS = {dns_value}")
|
||||
mtu = int(wg.get("mtu") or 0)
|
||||
if mtu:
|
||||
lines.append(f"MTU = {mtu}")
|
||||
@@ -222,6 +233,8 @@ def force_cleanup(cfg: Config) -> list[str]:
|
||||
if dns_util.interface_exists(name):
|
||||
cmd = [wireguard_exe(), "/uninstalltunnelservice", name]
|
||||
run_command(cmd, timeout=60)
|
||||
# Nettoyer les règles split-DNS
|
||||
dns_util.cleanup_split_dns(cfg)
|
||||
actions += dns_util.cleanup(name)
|
||||
return actions
|
||||
|
||||
@@ -237,6 +250,9 @@ def force_cleanup(cfg: Config) -> list[str]:
|
||||
# ne disparaît pas avec le lien. C'est la cause du « plus d'internet ».
|
||||
# Sans effet, et sans dialogue d'authentification, si rien ne traîne.
|
||||
actions += dns_util.cleanup(name)
|
||||
|
||||
# Nettoyer les règles split-DNS
|
||||
dns_util.cleanup_split_dns(cfg)
|
||||
|
||||
return actions
|
||||
|
||||
@@ -286,6 +302,8 @@ def connect(cfg: Config) -> tuple[bool, str]:
|
||||
# démarrage effectif du tunnel est asynchrone. Tester l'état
|
||||
# immédiatement conclurait « échec » sur un tunnel qui monte.
|
||||
if code == 0 and _wait_connected(cfg, timeout=15):
|
||||
# Configurer le split-DNS si un serveur dédié est défini
|
||||
dns_util.setup_split_dns(cfg)
|
||||
return True, "Tunnel WireGuard activé"
|
||||
force_cleanup(cfg)
|
||||
return False, err or f"Échec de l'installation du tunnel (code {code})"
|
||||
@@ -302,6 +320,8 @@ def connect(cfg: Config) -> tuple[bool, str]:
|
||||
# Passer le nom d'interface (pas le chemin) : AppArmor autorise /etc/wireguard/ seulement
|
||||
code, _, err = run_privileged(["wg-quick", "up", name], timeout=90)
|
||||
if code == 0:
|
||||
# Configurer le split-DNS si un serveur dédié est défini
|
||||
dns_util.setup_split_dns(cfg)
|
||||
return True, "Tunnel WireGuard activé"
|
||||
|
||||
# Échec : wg-quick a pu s'arrêter après set_dns (ou être tué par le
|
||||
|
||||
Reference in New Issue
Block a user