NAT et PAT : traduction d'adresses
Le NAT permet aux réseaux privés d'accéder à Internet et de publier des services. Terminologie Cisco, NAT statique, dynamique, PAT et redirection de ports : configurations complètes et dépannage.
Les adresses privées définies par la RFC 1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) ne sont pas routées sur Internet. Pour qu'un poste en 192.168.1.20 puisse consulter un site web, son adresse doit être traduite en adresse publique à la sortie du réseau : c'est le NAT (Network Address Translation). Sa variante la plus courante, le PAT, permet à des milliers de postes de partager une seule adresse publique.
Objectif : comprendre la terminologie et les types de NAT, les configurer sur un routeur Cisco et diagnostiquer les problèmes de traduction.
Plateforme : routeur Cisco sous IOS XE 17.x / IOS 15.x. Configuration de laboratoire : 203.0.113.0/24 est une plage de documentation (RFC 5737), utilisée ici comme bloc « public ».
Pourquoi le NAT existe
Le NAT est né de la pénurie d'adresses IPv4. Il a permis de prolonger considérablement la vie d'IPv4, au prix d'une entorse au principe de bout en bout : une machine derrière un NAT n'est pas directement joignable depuis l'extérieur, et certains protocoles qui transportent des adresses dans leurs données (FTP actif, SIP, certains VPN) nécessitent des traitements particuliers.
Le NAT n'est pas un mécanisme de sécurité. Il masque l'adressage interne et empêche les connexions entrantes non sollicitées en l'absence de traduction, mais il ne filtre rien par lui-même : c'est le rôle d'un pare-feu. En IPv6, l'espace d'adressage rend le NAT inutile, et la sécurité repose sur le filtrage.
La terminologie Cisco
| Terme | Signification |
|---|---|
| Inside local | Adresse d'un hôte interne, vue depuis l'intérieur (adresse privée réelle) |
| Inside global | Adresse de cet hôte interne, telle que vue depuis l'extérieur (adresse publique après traduction) |
| Outside global | Adresse réelle d'un hôte externe |
| Outside local | Adresse d'un hôte externe telle que vue depuis l'intérieur (généralement identique à l'outside global) |
Les interfaces sont désignées comme inside (côté réseau privé) ou outside (côté Internet). La traduction s'applique au trafic qui traverse ces deux types d'interfaces.
Le scénario
LAN 192.168.10.0/24 ── Gi0/0/1 (inside) [R1] Gi0/0/0 (outside) ── FAI
192.168.10.1 203.0.113.2/29
Bloc public attribué : 203.0.113.0/29 (hôtes .1 à .6 ; .1 = passerelle du FAI)
Serveur web interne : 192.168.10.80
Déclaration des interfaces (commune à tous les exemples) :
R1(config)# interface GigabitEthernet0/0/1
R1(config-if)# ip nat inside
R1(config-if)# interface GigabitEthernet0/0/0
R1(config-if)# ip nat outside
R1(config-if)# exit
R1(config)# ip route 0.0.0.0 0.0.0.0 203.0.113.1
NAT statique : publier un serveur
Une correspondance permanente un pour un entre une adresse privée et une adresse publique. Utilisé pour rendre un serveur interne joignable depuis Internet.
R1(config)# ip nat inside source static 192.168.10.80 203.0.113.3
Le serveur est joignable depuis Internet via 203.0.113.3, et ses connexions sortantes utilisent aussi cette adresse. Toute connexion vers 203.0.113.3 est traduite : un filtrage (ACL ou pare-feu) doit limiter les flux entrants aux seuls ports nécessaires.
Redirection de port (NAT statique avec ports)
Pour publier uniquement un service, en partageant une adresse publique :
R1(config)# ip nat inside source static tcp 192.168.10.80 443 203.0.113.2 443
Les connexions vers 203.0.113.2, port 443, sont redirigées vers le serveur interne. Seul ce port est publié.
NAT dynamique : un groupe d'adresses publiques
Les adresses privées sont traduites à la volée vers un groupe (pool) d'adresses publiques, une adresse publique par hôte interne actif. Si le groupe est épuisé, les nouveaux hôtes ne peuvent plus sortir. Rarement utilisé seul aujourd'hui.
R1(config)# ip access-list standard NAT-LAN
R1(config-std-nacl)# permit 192.168.10.0 0.0.0.255
R1(config-std-nacl)# exit
R1(config)# ip nat pool POOL-PUBLIC 203.0.113.4 203.0.113.6 netmask 255.255.255.248
R1(config)# ip nat inside source list NAT-LAN pool POOL-PUBLIC
L'ACL sélectionne les adresses à traduire ; elle ne filtre pas le trafic.
PAT (NAT overload) : partager une adresse
Le PAT (Port Address Translation), appelé NAT overload chez Cisco, traduit plusieurs adresses privées vers une seule adresse publique, en distinguant les sessions par le port source. C'est la forme de NAT utilisée par quasiment toutes les connexions Internet d'entreprise et domestiques.
R1(config)# ip access-list standard NAT-LAN
R1(config-std-nacl)# permit 192.168.10.0 0.0.0.255
R1(config-std-nacl)# exit
R1(config)# ip nat inside source list NAT-LAN interface GigabitEthernet0/0/0 overload
Le mot-clé overload active le PAT ; interface GigabitEthernet0/0/0 utilise l'adresse de l'interface de sortie (pratique si elle est attribuée dynamiquement par le FAI).
Exemple de table de traduction :
R1# show ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 203.0.113.2:51734 192.168.10.20:51734 198.51.100.10:443 198.51.100.10:443
tcp 203.0.113.2:51735 192.168.10.21:51734 198.51.100.10:443 198.51.100.10:443
udp 203.0.113.2:1024 192.168.10.22:53211 192.0.2.53:53 192.0.2.53:53
tcp 203.0.113.3:443 192.168.10.80:443 --- ---
Deux postes utilisant le même port source (51734) sont distingués par un port global différent (51734 et 51735). La dernière ligne est la traduction statique du serveur.
Une adresse publique dispose d'environ 64 000 ports par protocole : pour de très nombreux utilisateurs simultanés, on utilise un groupe d'adresses avec overload.
Combiner les traductions
Dans une même configuration, on combine généralement :
- un PAT pour l'accès Internet des postes ;
- des traductions statiques (ou redirections de ports) pour les serveurs publiés.
Les traductions statiques sont prioritaires pour les adresses qu'elles concernent.
Temporisations
Les entrées dynamiques expirent après une période d'inactivité (par défaut 24 heures pour le NAT dynamique simple, et des délais plus courts pour les traductions PAT, par exemple quelques minutes pour UDP ou DNS selon les versions). On peut les ajuster :
R1(config)# ip nat translation timeout 3600
R1(config)# ip nat translation udp-timeout 300
Vérifier et dépanner
show ip nat translations
show ip nat translations verbose
show ip nat statistics
clear ip nat translation * ! vide les traductions dynamiques (coupe les sessions en cours)
debug ip nat ! en laboratoire, avec prudence
show ip nat statistics indique les interfaces inside/outside, le nombre de traductions, les correspondances (hits) et les échecs.
| Symptôme | Cause probable |
|---|---|
| Aucune traduction créée | Interfaces inside/outside inversées ou non déclarées ; ACL de sélection incorrecte |
| Traduction créée mais pas de réponse | Route par défaut absente ; FAI ne routant pas le bloc public ; filtrage |
| Groupe épuisé | NAT dynamique sans overload |
| Serveur publié injoignable | Traduction statique absente ou erronée ; ACL entrante bloquante ; passerelle du serveur incorrecte |
| Le serveur publié est injoignable depuis l'intérieur par son adresse publique | Cas du « NAT hairpin » non géré : utiliser un DNS interne qui renvoie l'adresse privée |
Erreurs courantes
- Oublier
ip nat inside/ip nat outsidesur les interfaces. - Oublier
overloadet épuiser l'adresse publique après le premier hôte. - Confondre l'ACL de sélection NAT avec un filtrage.
- Publier un serveur en NAT statique complet au lieu de rediriger uniquement les ports nécessaires.
- Considérer le NAT comme un pare-feu.
Conclusion
PAT pour les postes, NAT statique ou redirection de ports pour les serveurs publiés, interfaces inside/outside correctement déclarées : avec show ip nat translations et show ip nat statistics, le fonctionnement est entièrement observable. Le NAT doit toujours être complété par un filtrage, voir ACL Cisco : contrôle du trafic réseau.


