NAT et PAT
Comment des milliers de machines privées partagent une poignée d'adresses publiques — et pourquoi ça devait arriver.
Résumé flash
La NAT traduit une adresse IPv4 privée en adresse publique, sur le routeur de frontière. Trois formes : statique (1 pour 1, fixe), dynamique (plusieurs pour plusieurs, via un pool) et PAT (plusieurs pour une seule, en distinguant par les ports). La PAT est de très loin la plus utilisée — c'est ce que fait votre box.
🔑
#NAT #PAT #overload #RFC1918
#inside-local #inside-global #pool
#ACL #ip-nat-inside #ip-nat-outside
#translations
01Pourquoi la NAT existe
Il existe deux catégories d'adresses IPv4, et comprendre la différence explique tout le chapitre.
| Type | Plages (RFC 1918) | Utilisation | Routable sur Internet |
|---|---|---|---|
| Privées | 10.0.0.0/8172.16.0.0/12192.168.0.0/16 |
Réseaux internes — maison, entreprise | Non |
| Publiques | Tout le reste, attribué par les RIR | Connexions Internet | Oui |
La NAT (Network Address Translation) est un processus visant à traduire une adresse réseau IPv4. Son objectif principal : la conservation des adresses IPv4 publiques. Elle se configure au niveau du routeur de frontière, celui qui sépare le réseau interne d'Internet.
Il n'existe qu'environ 4,3 milliards d'adresses IPv4 — 232. Dès les années 1990, il est devenu évident qu'elles allaient manquer. La NAT est une solution temporaire, mais toujours massivement utilisée, qui permet à des millions de machines de partager quelques adresses publiques.
La solution définitive est IPv6, avec ses 3,4 × 1038 adresses. « Temporaire » dure depuis trente ans.
Un immeuble de bureaux a une seule adresse postale. À l'intérieur, chaque service porte un numéro connu du seul standard. Le courrier sortant part avec l'adresse de l'immeuble ; le courrier entrant est redistribué par le standard, qui tient un registre de qui attend quoi.
La NAT est ce standard : elle tient une table de traduction et se souvient de qui a envoyé quoi, pour savoir à qui remettre la réponse.
02Le vocabulaire
La NAT emploie quatre termes précis. Ce tableau est à mémoriser : il tombe systématiquement, et c'est lui qui permet de lire la table de traduction.
| Terme | Ce que c'est | Exemple |
|---|---|---|
| Inside Local | Adresse privée de l'hôte interne, vue depuis le réseau interne | 192.168.1.20 |
| Inside Global | Adresse publique qui représente l'hôte interne vu depuis Internet | 209.165.200.225 |
| Outside Local | Adresse de l'hôte externe, vue depuis le réseau interne. Souvent identique à l'Outside Global | 192.31.7.1 |
| Outside Global | Adresse réelle de l'hôte externe sur Internet | 192.31.7.1 |
Local = adresse privée · Global = adresse publique
Il suffit de croiser les deux axes. Et retenez l'essentiel : la NAT traduit principalement Inside Local → Inside Global.
03Les trois types
| Type | Rapport | Principe | Usage |
|---|---|---|---|
| NAT statique | 1 pour 1 | Une adresse privée ↔ une adresse publique fixe. Mappage permanent, configuré manuellement | Un serveur interne accessible depuis Internet |
| NAT dynamique | Plusieurs pour plusieurs | Les adresses privées sont traduites vers un pool d'adresses publiques. Premier arrivé, premier servi | On dispose de quelques adresses publiques pour plus de postes |
| PAT (surcharge) | Plusieurs pour 1 | Plusieurs adresses privées partagent une seule adresse publique, différenciées par le port TCP/UDP | La forme la plus utilisée aujourd'hui |
04NAT statique
Elle crée une correspondance permanente et fixe entre une adresse privée et une adresse publique. Configurée manuellement, elle ne change jamais.
Cas d'usage typique : un serveur web interne qui doit être accessible depuis Internet à une adresse publique constante.
! ─── Étape 1 : le mappage statique privée → publique ───
R2(config)# ip nat inside source static 192.168.10.254 209.165.201.5
! ─── Étape 2 : déclarer les interfaces ───
R2(config)# interface serial 0/1/0
R2(config-if)# ip nat inside ← côté RÉSEAU INTERNE
R2(config-if)# exit
R2(config)# interface serial 0/1/1
R2(config-if)# ip nat outside ← côté INTERNET
R2(config-if)# endR2# show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- 209.165.201.5 192.168.10.254 --- ---
Total number of translations: 1En NAT statique, l'entrée dans la table est toujours présente, même quand personne ne communique. C'est la différence essentielle avec la NAT dynamique, où les entrées n'apparaissent que pendant une session active.
Voir une table vide sur une NAT dynamique n'est donc pas un symptôme de panne — c'est normal si personne ne navigue.
ip nat inside ou ip nat outsideLe mappage peut être parfait : sans la déclaration des interfaces, la NAT ne s'applique jamais. Le routeur ne sait pas dans quel sens traduire.
Et l'inversion des deux est tout aussi fatale : inside va sur l'interface
tournée vers le réseau local, outside sur celle tournée vers
Internet. C'est l'erreur la plus fréquente du chapitre, et elle ne produit
aucun message — seulement une table de traduction désespérément vide.
05NAT dynamique
Elle attribue automatiquement une adresse publique disponible, prise dans un pool, à chaque machine interne qui veut accéder à Internet. Le routeur gère lui-même les correspondances, selon le principe du premier arrivé, premier servi : si toutes les adresses du pool sont utilisées, la machine suivante doit attendre qu'une se libère.
Une plage d'adresses publiques disponibles. Si votre fournisseur d'accès
vous attribue 209.165.200.226 à 209.165.200.240, vous créez un pool
avec ces 15 adresses. Chaque machine interne en emprunte une pour sortir, et la libère quand
elle a fini.
Les cinq étapes
! ─── 1. Définir le pool d'adresses publiques ───
R2(config)# ip nat pool NAT-POOL1 209.165.200.226 209.165.200.240 netmask 255.255.255.224
! ─── 2. Une ACL pour désigner les hôtes internes à traduire ───
R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255
! ─── 3. Lier l'ACL au pool ───
R2(config)# ip nat inside source list 1 pool NAT-POOL1
! ─── 4 et 5. Déclarer les interfaces ───
R2(config)# interface serial 0/1/0
R2(config-if)# ip nat inside
R2(config-if)# exit
R2(config)# interface serial 0/1/1
R2(config-if)# ip nat outside
R2(config-if)# endSi vous créez NAT-POOL1 et écrivez nat-pool1 dans la commande
ip nat inside source list, la correspondance échoue et la NAT ne
fonctionne pas. IOS accepte la commande sans broncher : il croit que vous
référencez un autre pool, qui n'existe pas.
access-list 1 permit 192.168.0.0 0.0.255.255 — ce n'est
pas un masque de sous-réseau, c'est un masque générique
(wildcard), et il fonctionne à l'envers :
- 0 = ce bit doit correspondre exactement ;
- 1 = ce bit est indifférent.
0.0.255.255 signifie donc « les deux premiers octets doivent valoir 192.168, les
deux derniers n'importe quoi ». C'est le complément du masque
255.255.0.0 — on l'obtient en soustrayant chaque octet à 255.
Gérer et vérifier
R2# show ip nat translations ← les traductions actives
R2# show ip nat translations verbose ← avec date et durée
R2# show ip nat statistics ← compteurs, dont les « Hits »
R2# clear ip nat translation * ← effacer les entrées DYNAMIQUES (pas les statiques)
R2# clear ip nat statistics ← remettre les compteurs à zéroclear ip nat statistics— repartir de zéro ;- faire passer du trafic depuis un poste interne ;
show ip nat statistics— les Hits comptent les paquets traduits avec succès.
Si les Hits augmentent, la NAT fonctionne. S'ils restent à zéro alors que le trafic passe, c'est que le trafic ne traverse pas les interfaces déclarées, ou que l'ACL ne le sélectionne pas.
Par défaut, une entrée NAT dynamique expire au bout de 24 heures sans
activité. Pour modifier ce délai :
ip nat translation timeout <secondes>. Pour effacer avant expiration :
clear ip nat translation *.
En TP, si une adresse du pool semble « bloquée », c'est souvent une entrée résiduelle d'un
test précédent : un clear règle le problème.
06PAT — la surcharge
La PAT (Port Address Translation), aussi appelée surcharge NAT ou NAT overload, est la forme la plus utilisée aujourd'hui. Elle permet à des milliers de machines internes de partager une seule adresse IP publique.
Elle ajoute un niveau de différenciation : en plus des adresses IP, elle utilise les numéros de port TCP/UDP pour distinguer les sessions de chaque machine.
Un immeuble a une seule adresse — l'adresse IP publique. Mais chaque appartement a un numéro — le port. Le facteur sait à qui remettre le courrier grâce au numéro d'appartement.
La PAT fait exactement cela : une seule adresse publique, mais des milliers de ports pour identifier chaque connexion.
Quand deux machines utilisent le même port source — 1444 par exemple — la PAT incrémente celui de la seconde en 1445, afin de maintenir une entrée unique dans sa table.
! ACL pour désigner les hôtes internes à traduire
R2(config)# access-list 1 permit 192.168.0.0 0.0.255.255
! Lier l'ACL à l'interface externe avec le mot-clé « overload » = PAT
R2(config)# ip nat inside source list 1 interface serial 0/1/0 overload
! Interfaces
R2(config)# interface serial 0/1/0
R2(config-if)# ip nat outside
R2(config-if)# exit
R2(config)# interface fastethernet 0/0
R2(config-if)# ip nat insideR2(config)# ip nat pool PAT-POOL 209.165.200.226 209.165.200.226 netmask 255.255.255.224
R2(config)# ip nat inside source list 1 pool PAT-POOL overload
! └── le mot-clé qui change toutoverload — un mot, deux comportementsLa commande ip nat inside source list 1 pool P et
ip nat inside source list 1 pool P overload sont presque
identiques à l'écrit, mais radicalement différentes :
- Sans
overload— NAT dynamique. Une adresse publique par machine. Le pool épuisé, plus personne ne sort. - Avec
overload— PAT. Toutes les machines partagent les adresses, distinguées par les ports. Le pool ne s'épuise pratiquement jamais.
C'est le mot-clé à ne pas oublier — et la question la plus fréquente sur ce chapitre.
Les ports source vont de 1024 à 65535, soit environ 64 000 sessions simultanées par adresse publique. Comme un poste ouvre en moyenne quelques dizaines de connexions, une seule adresse publique suffit largement à un réseau de plusieurs centaines de machines.
C'est ce qui explique que la pénurie d'IPv4, annoncée pour les années 2000, ne se soit jamais traduite par une panne visible pour l'utilisateur.
07Avantages et inconvénients
| Avantages | Inconvénients |
|---|---|
|
|
« Fonctionnalité de bout en bout » — le principe fondateur d'Internet veut que deux machines puissent se joindre directement. Avec la NAT, une machine interne n'est pas joignable de l'extérieur : c'est gênant pour la visioconférence, les jeux en ligne, le pair-à-pair. D'où les mécanismes de contournement, comme la redirection de ports.
« Perte de la traçabilité IP » — vu d'Internet, toutes les machines du réseau ont la même adresse. En cas d'incident de sécurité, impossible de désigner la machine responsable sans consulter les journaux de la NAT. C'est un vrai problème d'imputabilité, notamment sur le plan légal.
Le cours l'affirme, et c'est vrai partiellement : les machines internes ne sont pas directement joignables depuis Internet, ce qui bloque les analyses de ports et les attaques directes.
Mais la NAT n'est pas un pare-feu. Elle ne filtre rien, n'inspecte rien, ne bloque aucun contenu malveillant. Un poste interne qui télécharge un logiciel malveillant n'est pas protégé — la NAT laissera passer sans broncher toute la communication qu'il initiera ensuite.
Si la question tombe : « la NAT apporte une sécurité par obscurité, elle ne remplace pas un pare-feu ».
08Vérifier et dépanner
| Commande | Ce qu'elle montre |
|---|---|
show ip nat translations | La table de traduction active — la commande de référence |
show ip nat translations verbose | Avec date de création et durée de vie |
show ip nat statistics | Nombre de traductions, Hits, Misses, interfaces déclarées |
show running-config | include nat | Toutes les lignes de configuration NAT d'un coup |
clear ip nat translation * | Efface les entrées dynamiques |
debug ip nat | Chaque traduction en direct — puis
undebug all |
Lire une table de traduction
R2# show ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 209.165.200.225:1444 192.168.1.10:1444 192.31.7.1:80 192.31.7.1:80
tcp 209.165.200.225:1445 192.168.1.11:1444 192.31.7.1:80 192.31.7.1:80
└── l'adresse publique └── le vrai poste └── le serveur distant
+ le port attribué + son port
↑ ports IDENTIQUES ici :
la PAT n'a traduit que le côté interne| Symptôme | Cause probable | Vérification |
|---|---|---|
| La table de traduction est vide | ip nat inside ou ip nat outside manquant, ou
inversés |
show ip nat statistics → les interfaces déclarées |
| Les Hits restent à zéro | L'ACL ne sélectionne pas le trafic, ou le trafic ne traverse pas les bonnes interfaces | show access-lists → les compteurs de correspondance |
| Certains postes sortent, d'autres non | Pool épuisé en NAT dynamique — il manque overload |
show ip nat statistics → adresses allouées / disponibles |
| Le nom du pool n'est pas reconnu | Casse différente entre création et référence | show running-config | include nat pool |
| Une adresse reste bloquée | Entrée dynamique résiduelle — expire au bout de 24 h | clear ip nat translation * |
Une entreprise dispose de 3 adresses publiques et de 80 postes. Le technicien a configuré une NAT dynamique avec un pool de ces 3 adresses. Les trois premiers utilisateurs sortent sur Internet, les 77 autres non. Que s'est-il passé, et comment corriger ?
Ce qui s'est passé : la NAT dynamique attribue une adresse publique par machine, selon le principe du premier arrivé, premier servi. Avec 3 adresses, seuls 3 postes peuvent sortir simultanément. Les autres attendent qu'une adresse se libère — c'est-à-dire jusqu'à 24 heures, durée d'expiration par défaut.
La correction : ajouter le mot-clé overload, pour passer en
PAT.
R2(config)# no ip nat inside source list 1 pool NAT-POOL1
R2(config)# ip nat inside source list 1 pool NAT-POOL1 overload
R2# clear ip nat translation * ← purger les entrées bloquéesLes 80 postes partagent alors les 3 adresses, distingués par leurs ports. En pratique, une seule aurait suffi : environ 64 000 sessions simultanées par adresse.
Le diagnostic qui mène là : show ip nat statistics affiche
« allocated 3, misses N » — trois adresses allouées et un compteur de
misses qui grimpe. Un miss signifie « j'aurais dû traduire, je n'ai pas
pu ».