# KB-LNX : Transformer une VM Linux en routeur NAT Pour activer le routage sous Debian, assurez-vous de disposer de **deux cartes réseaux** connectées sur **deux segments et plans IP différents**. L'option **ip_forward doit également être activée** dans le noyau Linux à l'aide de la commande `sysctl`. Dans les étapes ci-dessous, nous allons suivre pour atteindre le schéma cible : - [[#Vérifier le statut du transfert IP (ip_forward)]] - [[#Activer le transfert IP (ip_forward)]] - [[#Activer le mode NAT]] ![[_img-kb-lnx-routeur-nat-6.png]] ## Vérifier le statut du transfert IP (ip_forward) Pour vérifier la configuration de l'option `ip_forward` saisissez cette commande : - Pour ipv4 : ```bash sysctl net.ipv4.ip_forward ``` - Si besoin, pour ipv6 : ```bash sysctl net.ipv6.conf.all.forwarding ``` > [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> Par défaut, le noyau Linux n'autorise par le transfert de paquets IP entre différentes cartes réseau.</span> Vous devriez donc obtenir ce résultat `0` (par défaut) si l'option est désactivée ou `1` si l'option `ip_forward` est activée : ```bash net.ipv4.ip_forward = 0 ``` ## Activer le transfert IP (ip_forward) La méthode ci-dessous permet d'activer le transfert IP de façon permanente dans le noyau. Cela signifie que cette modification persistera au prochain redémarrage du système. ### Activer ip_forward sous Debian 13 et ultérieurs Dans **Debian 13 (Trixie)** le fichier `sysctl.conf` est supprimé. Suivez la procédure dédiée dans ce cas : [[kb-lnx-ip-forward|Activer l'IP forwarding dans Debian 13]] ### Activer ip_forward sous Debian 12 et antérieurs Sous **Debian 12**, activez l'option `ip_forward`, pour cela, éditez le fichier `/etc/sysctl.conf` : ```bash sudo nano /etc/sysctl.conf ``` Décommentez la ligne `#net.ipv4.ip_forward = 1` en supprimant le symbole `#`, comme dans l'illustration ci-dessous : ![[_img-kb-lnx-routeur-nat-2.png]] Réactivez la configuration pour prendre en compte les changements avec la commande : ```bash sudo sysctl -p /etc/sysctl.conf ``` Le résultat attendu est `net.ipv4.ip_forward=1` comme dans l'illustration ci-dessous : ![[_img-kb-lnx-routeur-nat-3.png]] ### Vérifier l’activation permanente du transfert IP Pour vérifier que la configuration a persisté, **redémarrez la VM** puis exécutez : ```bash cat /proc/sys/net/ipv4/ip_forward ``` Le résultat attendu est `1` comme dans l'illustration ci-dessous : ![[_img-kb-lnx-routeur-nat-1.png]] > [!done] Félicitations ! <span style="font-weight: normal; color: var(--text-normal)"> Le routage est maintenant activé sur votre machine Debian.</span> ## Activer le mode NAT La configuration du mode **NAT** (Network Address Translation) sous Debian 12 repose sur l’utilisation du pare-feu intégré au noyau Linux. > [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> Le pare-feu du noyau Linux se nomme **Netfilter**. L’outil **iptables** est une interface en ligne de commande permettant de configurer Netfilter.</span> ### Installer iptables Commencez par installer l’utilitaire **iptables** avec la commande suivante : ```bash sudo apt install iptables ``` Ensuite, appliquez la règle de traduction d’adresses NAT. Remplacez le nom de l’interface par celle correspondant à votre configuration réseau. Dans l’exemple ci-dessous, l’interface **ens192** est utilisée : ```bash sudo iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE ``` > [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> De manière générale, l’interface à utiliser correspond à la carte réseau connectée au WAN (Internet), c’est-à-dire la sortie du routeur vers l’extérieur.</span> Pour supprimer cette règle vous pouvez remplacer l'option `-A` (ajouter) par l'option `-D` (delete) utiliser la commande : ```bash sudo iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE ``` Une méthode plus radicale consisterait à supprimer toutes les règles de nat existante avec l'option `-F` (flush) : > [!danger] Attention !<span style="font-weight: normal; color: var(--text-normal)"> Ne pas utiliser cette commande sur un firewall en production.</span> ```bash sudo iptables -t nat -F ``` ### Vérifier que les règles NAT sont opérationnelles La règle `MASQUERADE` doit apparaître sur l’interface WAN (`-o ens192` par exemple) et les compteurs (`pkts/bytes`) doivent s’incrémenter lors d’un ping depuis le LAN vers WAN (`ping 1.1.1.1` depuis une autre machine du LAN par exemple). Pour afficher les règles de la chaîne `POSTROUTING` (appliquée après le routage) exécutez la commande : ```bash sudo iptables -t nat -L -n -v ``` La sortie devrait afficher à minima le résultat suivant : ![[_img-kb-lnx-routeur-nat-4.png]] ## Rendre la configuration NAT persistante > [!danger] Attention !<span style="font-weight: normal; color: var(--text-normal)"> Cette configuration iptables n’est pas encore persistante et ne résiste pas à un redémarrage.</span> ### Sauvegarder les règles iptables Nous allons sauvegarder la configuration courante dans un fichier, puis faire en sorte qu’elle soit automatiquement restaurée à chaque démarrage de l’OS. Passez en mode **root** : ```bash sudo -s ``` Enregistrez les règles actuellement actives dans un fichier : ```bash iptables-save > /etc/iptables.rules ``` Quittez la session root : ```bash exit ``` (Optionnel) Vérifiez le contenu du fichier : ``` sudo cat /etc/iptables.rules ``` Cette commande devrait afficher une sortie du type : ![[_img-kb-lnx-routeur-nat.png]] ### Restaurer la configuration au démarrage Pour recharger automatiquement les règles iptables à chaque redémarrage du système, ouvrez le fichier de configuration des interfaces réseau : ```bash sudo nano /etc/network/interfaces ``` Dans la section correspondant à l’interface **loopback**, ajoutez la ligne suivante : ```bash pre-up iptables-restore < /etc/iptables.rules ``` Cette configuration permet la restauration des paramètres iptables avant activer l'interface `lo` du système. Par exemple l'interface lo devrait ressembler à cela : ```bash auto lo iface lo inet loopback pre-up iptables-restore < /etc/iptables.rules ``` Enregistrez les modifications et quittez l’éditeur.