# Guide de Correction du Réseau Incus

**Problème**: Les conteneurs ne peuvent pas accéder à Internet malgré NAT activé  
**Cause**: IP forwarding désactivé ou routes mal configurées  
**Solution**: Scripts de diagnostic et correction automatique

## Problème Identifié

Les conteneurs Incus ne peuvent pas accéder à Internet :
```
ping: connect: Network is unreachable
```

**Causes possibles**:
1. IP forwarding désactivé sur l'hôte (requis pour NAT)
2. Routes par défaut manquantes dans les conteneurs
3. Configuration réseau Incus incomplète
4. Bridge réseau non configuré correctement

## Solutions

### Solution Rapide (Recommandée)

```bash
# Corriger immédiatement tous les conteneurs
./config/incus/fix-network-now.sh
```

Ce script :
- ✅ Active IP forwarding sur l'hôte
- ✅ Vérifie et active NAT dans le réseau Incus
- ✅ Corrige la configuration réseau dans tous les conteneurs
- ✅ Teste la connectivité

### Solution Étape par Étape

#### 1. Diagnostiquer le problème

```bash
# Diagnostiquer un conteneur spécifique
./config/incus/diagnose-network.sh veza-infra

# Ou tous les conteneurs
./config/incus/diagnose-network.sh
```

#### 2. Activer IP Forwarding (CRITIQUE)

```bash
# Vérifier l'état
cat /proc/sys/net/ipv4/ip_forward

# Activer (temporaire)
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

# Rendre permanent
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```

#### 3. Vérifier la configuration réseau Incus

```bash
# Vérifier que NAT est activé
incus network show veza-network | grep ipv4.nat

# Si non activé, activer
incus network set veza-network ipv4.nat=true
```

#### 4. Corriger un conteneur spécifique

```bash
# Corriger veza-infra
./config/incus/fix-network.sh veza-infra

# Corriger tous les conteneurs
./config/incus/fix-all-containers-network.sh
```

## Scripts Disponibles

### 1. `fix-network-now.sh` ⚡ (RECOMMANDÉ)
**Usage**: `./fix-network-now.sh`

Corrige immédiatement tous les problèmes réseau :
- Active IP forwarding
- Configure NAT
- Corrige tous les conteneurs
- Teste la connectivité

### 2. `fix-network.sh`
**Usage**: `./fix-network.sh [container-name]`

Corrige le réseau pour un conteneur spécifique ou tous les conteneurs.

### 3. `diagnose-network.sh`
**Usage**: `./diagnose-network.sh [container-name]`

Diagnostique les problèmes réseau sans les corriger.

### 4. `fix-all-containers-network.sh`
**Usage**: `./fix-all-containers-network.sh`

Corrige le réseau dans tous les conteneurs Veza.

## Vérification Post-Correction

```bash
# Tester depuis un conteneur
incus exec veza-infra -- ping -c 2 8.8.8.8
incus exec veza-infra -- ping -c 2 google.com

# Vérifier les routes
incus exec veza-infra -- ip route show

# Vérifier l'IP
incus exec veza-infra -- ip addr show eth0
```

## Prévention

Le script `deploy-service-native.sh` a été amélioré pour :
- ✅ Vérifier IP forwarding avant déploiement
- ✅ Configurer correctement les routes (locale + default)
- ✅ Vérifier la connectivité avant de continuer
- ✅ Échouer si le réseau ne fonctionne pas

## Commandes de Diagnostic Manuelles

### Sur l'hôte
```bash
# Vérifier IP forwarding
cat /proc/sys/net/ipv4/ip_forward

# Vérifier les règles NAT
sudo iptables -t nat -L -n -v

# Vérifier le bridge
ip addr show | grep -A 5 incus
ip link show | grep incus
```

### Dans un conteneur
```bash
# Vérifier l'IP
ip addr show eth0

# Vérifier les routes
ip route show

# Tester la connectivité
ping -c 2 10.10.10.1  # Gateway
ping -c 2 8.8.8.8     # Internet
ping -c 2 google.com  # DNS
```

## Problèmes Courants

### 1. "Network is unreachable"
**Cause**: Route par défaut manquante  
**Solution**: 
```bash
incus exec veza-infra -- ip route add default via 10.10.10.1 dev eth0
```

### 2. "Temporary failure in name resolution"
**Cause**: DNS non configuré  
**Solution**:
```bash
incus exec veza-infra -- bash -c "echo 'nameserver 8.8.8.8' > /etc/resolv.conf"
```

### 3. NAT ne fonctionne pas
**Cause**: IP forwarding désactivé  
**Solution**:
```bash
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
```

## Notes Techniques

- Le NAT Incus nécessite IP forwarding activé sur l'hôte
- Les conteneurs doivent avoir une route par défaut vers 10.10.10.1
- La route locale (10.10.10.0/24) est aussi nécessaire pour la communication inter-conteneurs
- Le DNS doit être configuré à la fois dans Incus et dans les conteneurs
