Cisco, Routage et Switching

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.

Routeur traduisant les adresses privées du réseau interne en une adresse publique avec des ports différents

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.

Traduction d'adresses et de ports par PAT
Traduction d'adresses et de ports par PAT

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 outside sur les interfaces.
  • Oublier overload et é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.

Références