# Diagnostic WireGuard — Linux avec NetworkManager (GNOME)

Guide de diagnostic pour les problèmes de connectivité WireGuard sur Linux Ubuntu avec NetworkManager, notamment l'absence d'accès aux services du réseau local du serveur VPN.

---

## Symptômes typiques

- Internet fonctionne via le VPN (`ping 8.8.8.8` OK)
- Le serveur VPN est joignable (`ping 10.13.13.1` OK)
- Les services accessibles uniquement via VPN (ex: `192.168.1.x`, `10.13.13.x`) sont **inaccessibles**
- Le même profil fonctionne sur un autre appareil (téléphone, autre OS)

---

## Étape 1 — Vérifier l'état du tunnel WireGuard

```bash
sudo wg show

```

Vérifier que :

- L'interface est bien active
- Un `latest handshake` récent est visible (tunnel actif)
- `allowed ips` contient bien `0.0.0.0/0, ::/0` ou les plages nécessaires

---

## Étape 2 — Vérifier les routes appliquées

```bash
# Routes globales (le VPN doit apparaître ici)
ip route show

# Routes spécifiques à l'interface WireGuard (remplacer "Home" par le nom de ton interface)
ip route show dev Home

```

**Problème détecté si :** `ip route show dev Home` ne retourne rien malgré un tunnel actif.

Cela indique que NetworkManager n'a pas injecté les routes dans la table de routage principale — bug connu de NetworkManager avec WireGuard.

---

## Étape 3 — Vérifier les règles de routage

```bash
ip rule show

```

Exemple de sortie révélant le problème :

```
0:      from all lookup local
31076:  from all lookup main suppress_prefixlength 0
31077:  not from all fwmark 0xcb8e lookup 52110
32766:  from all lookup main
32767:  from all lookup default

```

La règle `not from all fwmark 0xcb8e lookup 52110` indique que WireGuard utilise une table de routage séparée. Vérifier son contenu :

```bash
ip route show table 52110

```

---

## Étape 4 — Vérifier le DNS

```bash
resolvectl status

```

Vérifier que l'interface WireGuard apparaît avec le bon serveur DNS (ex: `10.13.13.1`).

```bash
# Test de résolution DNS via le tunnel
dig @10.13.13.1 monservice.domaine.local

```

---

## Étape 5 — Tester la connectivité par IP directe

Avant de corriger, tester si le problème est DNS ou routage :

```bash
# Ping du serveur VPN
ping 10.13.13.1

# Accès direct par IP à un service (sans nom de domaine)
curl -v http://IP_DU_SERVICE:PORT

```

- Si ça fonctionne par IP → problème DNS uniquement
- Si ça échoue par IP → problème de routage (continuer ci-dessous)

---

## Correction — Ajouter les routes manquantes

### Cas 1 : Le service est sur le réseau WireGuard (`10.13.13.x`)

```bash
sudo nmcli connection modify <NOM_CONNEXION> +ipv4.routes "10.13.13.0/24 10.13.13.1"
sudo nmcli connection reload

```

### Cas 2 : Le service est sur le LAN du serveur (`192.168.1.x` par exemple)

```bash
sudo nmcli connection modify <NOM_CONNEXION> +ipv4.routes "192.168.1.0/24 10.13.13.1"
sudo nmcli connection reload

```

> ⚠️ **Attention** : si ton PC est lui-même sur `192.168.1.x`, ajouter cette route crée un conflit. Dans ce cas, les services doivent être exposés directement sur l'IP WireGuard du serveur (`10.13.13.1`).

### Cas 3 : Tout le trafic doit passer par le VPN (full tunnel)

```bash
sudo nmcli connection modify <NOM_CONNEXION> +ipv4.routes "0.0.0.0/0 10.13.13.1"
sudo nmcli connection reload

```

> ⚠️ Cette route remplace la route par défaut. Si elle provoque une perte d'internet, la supprimer immédiatement (voir ci-dessous).

---

## Annuler une modification (rollback)

```bash
# Supprimer une route ajoutée par erreur
sudo nmcli connection modify <NOM_CONNEXION> -ipv4.routes "CIDR GATEWAY"

# Exemple
sudo nmcli connection modify Home -ipv4.routes "0.0.0.0/0 10.13.13.1"

sudo nmcli connection reload

```

Puis déconnecter et reconnecter le VPN depuis GNOME.

---

## Vérifier la configuration stockée

Les configs NetworkManager sont dans `/etc/NetworkManager/system-connections/` :

```bash
sudo ls /etc/NetworkManager/system-connections/
sudo cat /etc/NetworkManager/system-connections/<NOM>.nmconnection

```

Exemple de bloc `[ipv4]` correct avec routes :

```ini
[ipv4]
address1=10.13.13.3/32
dns=10.13.13.1;
method=manual
route1=192.168.1.0/24,10.13.13.1

```

---

## Checklist récapitulatif

<table id="bkmrk-v%C3%A9rification-command"><thead><tr><th>Vérification</th><th>Commande</th><th>Résultat attendu</th></tr></thead><tbody><tr><td>Tunnel actif</td><td>`sudo wg show`</td><td>`latest handshake` récent</td></tr><tr><td>Routes VPN présentes</td><td>`ip route show dev <interface>`</td><td>Au moins une route affichée</td></tr><tr><td>Règles de routage</td><td>`ip rule show`</td><td>Table WireGuard présente</td></tr><tr><td>DNS correct</td><td>`resolvectl status`</td><td>DNS = IP du serveur VPN</td></tr><tr><td>Ping serveur VPN</td><td>`ping 10.13.13.1`</td><td>Réponse OK</td></tr><tr><td>Accès service par IP</td><td>`curl -v http://IP:PORT`</td><td>Connexion établie</td></tr></tbody></table>

---

## Causes racines fréquentes

<table id="bkmrk-sympt%C3%B4me-cause-proba"><thead><tr><th>Symptôme</th><th>Cause probable</th></tr></thead><tbody><tr><td>`ip route show dev <iface>` vide</td><td>NetworkManager n'injecte pas les routes (bug NM+WireGuard)</td></tr><tr><td>DNS OK mais IP inaccessible</td><td>Réseau cible absent des `AllowedIPs` ou routes manquantes</td></tr><tr><td>IP accessible mais domaine KO</td><td>DNS mal configuré ou non utilisé par le système</td></tr><tr><td>Internet coupé après modification</td><td>Route `0.0.0.0/0` en conflit avec route par défaut WiFi</td></tr></tbody></table>