Le Network Address Translation (NAT) est une technique essentielle en réseau, rencontrée dans divers environnements tels que VMware, Docker, KVM et le framework Netfilter. Son émergence est principalement due à la pénurie mondiale d'adresses IP.
Le processus de distribution des adresses IP implique des organisations comme l'APNIC (pour la région Asie-Pacifique), l'ICANN (gestion globale) et les fournisseurs d'accès à Internet. Même les connexions mobiles 4G utilisent des adresses IP privées qui correspondent géographiquement à leur point d'origine de connexion. Sans NAT, la communication Internet serait compromise car les routeurs intermédiaires ne pourraient pas acheminer correctement les paquets de retour vers les adresses IP privées.
Les avantages du NAT incluent:
- Sécurité améliorée : Il agit comme une barrière, protégeant les réseaux internes des accès non autorisés depuis l'extérieur.
- Contrôle d'accès : Il permet de gérer et de restreindre l'accès des hôtes internes à Internet et des hôtes externes au réseau interne.
Problèmes de Performance des Routeurs Domestiques
Les ralentissements observés sur les routeurs domestiques, particulièrement lors d'activités gourmandes en bande passante comme le streaming ou les jeux en ligne, sont souvent liés au NAT. Les informations de session NAT sont stockées en mémoire. Un nombre excessif de connexions simultanées peut saturer cette mémoire, entraînant des performances dégradées. C'est pourquoi les fabricants de routeurs mettent désormais l'accent sur la capacité mémoire de leurs appareils.
Bien que les "box" internet fournies par les opérateurs intègrent des fonctionnalités de routage, il est généralement déconseillé de s'en remettre exclusivement pour les petites et moyennes entreprises. Leurs performances, notamment en termes de gestion des sessions NAT, peuvent être limitées. L'utilisation d'un routeur dédié avec une mémoire plus importante, capable de gérer efficacement le NAT, est recommandée pour une meilleure expérience utilisateur.
NAT Statique
Le NAT statique établit une correspondance un à un entre une adresse IP privée et une adresse IP publique.
Configuration de base (exemple hypothétique) :
# Sur l'interface de sortie (globale)
interface GigabitEthernet0/0/0
# Activation de la fonction NAT statique
nat static enable
# Association d'une IP publique inutilisée (du même sous-réseau que l'interface globale)
# à une IP privée interne spécifique.
net static global <IP_Publique_Non_Utilisee> inside <IP_Privee_Interne>
# Visualisation de la configuration NAT statique
display nat static
Points importants :
- N'utilisez pas une adresse IP publique déjà assignée à l'interface globale pour la configuration statique NAT.
- L'adresse IP publique spécifiée n'a pas besoin d'être configurée directement sur l'interface ; la configuration NAT l'active.
- La commande
display nat staticaffiche les informasions de mappage.
Exemple de session NAT (ICMP) :
[R1]display nat session protocol icmp
Protocol : ICMP(1)
SrcAddr Vpn : 192.168.0.1 # IP source originale
DestAddr Vpn : 9.9.9.9
Type Code IcmpId : 0 8 12611
NAT-Info
New SrcAddr : 12.1.1.2 # Nouvelle IP source après NAT
Note : Ces sessions sont mises en cache et visibles uniquement lorsque le NAT est actif. Un ping continu vers la destination 9.9.9.9 permet de visualiser ces sessions.
Cas d'utilisation : Le NAT statique est rarement utilisé, sauf dans des scénarios spécifiques nécessitant une redirection univoque, par exemple lorsqu'une entreprise dispose d'un bloc d'adresses IP publiques et souhaite dédier certaines d'entre elles à des services spécifiques nécessitant une redirection de port persistante.
NAT Dynamique
Le NAT dynamique utilise un pool d'adresses IP publiques disponibles. Lorsqu'un hôte interne a besoin d'accéder à Internet, une adresse IP publique est allouée dynamiquement depuis ce pool et libérée une fois la connexion terminée. Si le pool est épuisé, les nouvelles requêtes doivent attendre qu'une adresse se libère.
Configuration :
# Définition d'un pool d'adresses IP publiques
nat address-group 1 58.57.50.51 58.57.50.55
# Configuration d'une liste de contrôle d'accès (ACL) pour identifier le trafic interne
acl 2000
rule 0 permit source 192.168.0.0 0.0.0.255
# Sur l'interface de sortie
interface GigabitEthernet0/0/0
# Application du NAT sortant, utilisant le pool défini par l'ACL 2000,
# sans translation de port (no-pat).
nat outbound 2000 address-group 1 no-pat
# Visualisation des configurations
display nat address-group
display nat outbound
display nat session all
Détail important : L'option no-pat désactive la translation de port. Sans elle, plusieurs hôtes internes partageant le même port source pourraient être mappés à la même adresse IP publique. Avec no-pat, chaque paquet peut potentiellement utiliser une nouvelle adresse IP publique du pool, ce qui peut rapidement épuiser les adresses disponibles, surtout si plusieurs hôtes accèdent simultanément à Internet.
NAPT / PAT (Network Address Port Translation)
Le NAPT, ou PAT (Port Address Translation), est une évolution du NAT dynamique conçue pour pallier l'épuisement des adresses IP. Il permet à plusieurs hôtes internes de partager une seule adresse IP publique en utilisant des numéros de port différents pour chaque connexion.
Configuration : La configuration est similaire au NAT dynamique, mais sans l'option no-pat. La différenciation des flux se fait par le numéro de port (pour les protocoles comme TCP/UDP) ou par un identifiant unique (comme l'ID ICMP pour le protocole ICMP).
Principe :
- ICMP : Utilise l'identifiant ICMP.
- HTTP/HTTPS : Utilise les numéros de port source et destination.
Easy-IP
Easy-IP simplifie le NAT en permettant l'utilisation directe de l'adresse IP configurée sur l'interface de sortie pour la traduction NAT, éliminant ainsi le besoin de créer un pool d'adresses distinct. Cette méthode est particulièrement utile pour les connexions à adressage dynamique (comme les connexions PPPoE des fournisseurs d'accès grand public), où une adresse IP publique fixe n'est pas garantie.
Configuration :
-
Définir une ACL : Créez une ACL pour spécifier le trafic interne à traduire. L'ACL ici sert uniquement de filtre, et non de contrôle d'accès strict. ```
[R1]acl 2000 [R1-acl-basic-2000]rule permit source 192.168.0.0 0.0.0.255
-
Appliquer le NAT sur l'interface de sortie : Associez l'ACL à l'interface de sortie pour que le NAT s'applique au trafic correspondant. ```
[R1]interface GigabitEthernet0/0/1 [R1-GigabitEthernet0/0/1]nat outbound 2000
Principe de fonctionnement : Lorsqu'un paquet provenant du réseau interne (identifié par l'ACL) atteint l'interface de sortie GigabitEthernet0/0/1, le routeur lui attribue un identifiant interne. Le routeur maintient une table associée à ces identifiants. Pour les paquets ICMP, cet identifiant est l'ID ICMP. Pour le trafic TCP/UDP, le port source sert d'identifiant. Lorsqu'un paquet de réponse revient, le routeur utilise cet identifiant pour retrouver la correspondance interne et réacheminer le paquet vers l'hôte d'origine.
NAT Server (Redirection de Port)
Le NAT Server permet de rendre des services hébergés sur des adresses IP privées accessibles depuis Internet en redirigeant le trafic d'une adresse IP publique et d'un port spécifiques vers une adresse IP privée et un port enternes.
Configuration :
interface GigabitEthernet0/0/1
# Redirection du trafic TCP sur le port 80 (HTTP) de l'adresse IP publique de l'interface
# vers l'adresse IP privée 192.168.0.2 sur le port 80.
# 'current-interface' utilise l'IP de l'interface G0/0/1 comme adresse IP publique.
nat server protocol tcp global current-interface www inside 192.168.0.2 www
# Vérification de la configuration du NAT Server
display nat server
Exemple de sortie de vérification :
Nat Server Information:
Interface : GigabitEthernet0/0/0
Global IP/Port : current-interface/80(www) (Real IP : 0.0.0.0)
Inside IP/Port : 192.168.0.2/80(www)
Protocol : 6(tcp)
VPN instance-name : ----
Acl number : ----
Description : ----
Note : L'adresse IP publique utilisée pour la redirection (global) ne doit pas être l'adresse IP de l'interface elle-même, sauf si spécifié par des commandes comme current-interface.