Routeur Cisco - NAT et PAT

Écrit par Alexandre Dos Reis
Créé le 2021-4-26, modifié le 2021-6-6.
Cisco IOS Software, Version 15.0(2)SE4

I. Présentation

En réseau informatique, on dit qu'un routeur fait du network address translation (NAT) (« traduction d'adresse réseau » ou « translation d'adresse réseau ») lorsqu'il fait correspondre des adresses IP à d'autres adresses IP. En particulier, un cas courant est de permettre à des machines disposant d'adresses privées qui font partie d'un intranet et ne sont ni uniques ni routables à l'échelle d'Internet, de communiquer avec le reste d'Internet en utilisant vers l'extérieur des adresses externes publiques, uniques et routables.

Ainsi, il est possible de faire correspondre une seule adresse externe publique visible sur Internet à toutes les adresses d'un réseau privé, afin de pallier l'épuisement des adresses IPv4.

La fonction NAT dans un routeur de service intégré (ISR) traduit une adresse IP source interne en adresse IP globale.

Ce procédé est très largement utilisé par les box internet (ou modem routeur) des fournisseurs d’accès pour cacher les ordinateurs personnels derrière une seule identification publique. Il est également utilisé de façon similaire dans des réseaux privés virtuels.

II. Topologie

Voici notre schéma de départ :

Schéma de départ Nat et Pat

Le schéma est découpé en 3 réseaux distincts: 192.168.1.0/24, 200.0.0.0/24 et 192.168.2.0/24 qui sont inter-connectés par les routeurs R1 et R2.

III. Prérequis

Pour que le NAT et le PAT puissent fonctionner, il faut que chaque routeur puissent communiquer à l'autre les réseaux qu'il connait, on va utiliser le protocole RIP car c'est le plus simple à implémenter.

Sur R1 :

R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#passive-interface GigabitEthernet0/0
R1(config-router)#network 192.168.1.0
R1(config-router)#network 200.0.0.0
R1(config-router)#no auto-summary

Sur R2 :

R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#passive-interface GigabitEthernet0/0
R2(config-router)#network 192.168.2.0
R2(config-router)#network 200.0.0.0
R2(config-router)#no auto-summary

IV. NAT statique

L'objectif est de donner une adresse externe au serveur SRV01 sur le routeur R1, ainsi les machines présentes dans le réseau de 192.168.2.0 n'auront pas à connaitre l'adresse IP privée du SRV01 mais seulement son adresse sur le réseau 200.0.0.0 et c'est le routeur R1 qui se chargera de faire la traduction.

a. Configuration de R1

Sur l'interface interne GigabitEthernet0/1 de R1 du réseau 192.168.1.0 :

R1(config)#interface GigabitEthernet 0/0
R1(config-if)#description "interface interne"
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#ip nat inside

Sur l'interface externe Serial0/1/0 de R1 du réseau 200.0.0.0 :

R1(config)#interface Serial0/1/0
R1(config-if)#description "interface externe"
R1(config-if)#ip address 200.0.0.1 255.255.255.0
R1(config-if)#ip nat outside

On déclare l'enregistrement NAT statique pour SRV01 :

R1(config)#ip nat inside source static 192.168.1.11 200.0.0.11

b. Test de ping sur SRV01

On essai de pinger sur l'adresse externe de SRV01 avec la machine 192.168.2.21 sur 200.0.0.11:

C:\>ping 200.0.0.11

Pinging 200.0.0.11 with 32 bytes of data:

Request timed out.
Reply from 200.0.0.11: bytes=32 time=13ms TTL=126
Reply from 200.0.0.11: bytes=32 time=13ms TTL=126
Reply from 200.0.0.11: bytes=32 time=1ms TTL=126

Ping statistics for 200.0.0.11:
Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 13ms, Average = 9ms

V. NAT dynamique

L'objectif est de déclarer une étendue d'adresse qui seront à routable sur le réseau 200.0.0.0 pour les machines du réseau 192.168.2.0.

a. Configuration de R2

Sur l'interface interne GigabitEthernet0/0 de R1 du réseau 192.168.1.0 :

R2(config)#interface GigabitEthernet 0/0
R2(config-if)#description "interface interne"
R2(config-if)#ip address 192.168.2.1 255.255.255.0
R2(config-if)#ip nat inside

Sur l'interface externe Serial0/1/1 de R1 du réseau 200.0.0.0 :

R2(config)#interface Serial0/1/0
R2(config-if)#description "interface externe"
R2(config-if)#ip address 200.0.0.2 255.255.255.0
R2(config-if)#ip nat outside

On déclare via une ACL, une permission pour le réseau 192.168.2.0 sinon le NAT ne fonctionnera pas :

R1(config)#access-list 1 permit 192.168.2.0 0.0.0.255

On déclare une étendue d'adresse pour un NAT dynamique pour les machines du réseau 192.168.2.0 puis on l'affecte :

R2(config)#ip nat pool POOL-SITE02 200.0.0.128 200.0.0.130 netmask 255.255.255.0
R2(config)#ip nat inside source list 1 pool POOL-SITE02

ip nat pool POOL-SITE02 200.0.0.128 200.0.0.130 netmask 255.255.255.0 ip nat inside source list 1 pool POOL-SITE02

b. Test de ping sur SRV01

On essai de pinger sur l'adresse externe de SRV01 avec la machine 192.168.2.21 sur 192.168.1.11:

C:\>ping 200.0.0.11

Pinging 200.0.0.11 with 32 bytes of data:

Request timed out.
Reply from 200.0.0.11: bytes=32 time=13ms TTL=126
Reply from 200.0.0.11: bytes=32 time=13ms TTL=126
Reply from 200.0.0.11: bytes=32 time=1ms TTL=126

Ping statistics for 200.0.0.11:
Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 13ms, Average = 9ms

Pour voir le NAT, on effectue ces commandes sur le routeur R2 :

R2#sh ip nat translations 
Pro  Inside global     Inside local       Outside local      Outside global
icmp 200.0.0.128:15    192.168.2.21:15    192.168.1.11:15    192.168.1.11:15
icmp 200.0.0.128:16    192.168.2.21:16    192.168.1.11:16    192.168.1.11:16
icmp 200.0.0.128:17    192.168.2.21:17    192.168.1.11:17    192.168.1.11:17
icmp 200.0.0.128:18    192.168.2.21:18    192.168.1.11:18    192.168.1.11:18
R2#sh ip nat statistics 
Total translations: 4 (0 static, 4 dynamic, 4 extended)
Outside Interfaces: Serial0/1/1
Inside Interfaces: GigabitEthernet0/0
Hits: 15  Misses: 355
Expired translations: 14
Dynamic mappings:
-- Inside Source
access-list 1 pool POOL-SITE02 refCount 4
 pool POOL-SITE02: netmask 255.255.255.0
   start 200.0.0.128 end 200.0.0.130
   type generic, total addresses 3 , allocated 1 (33%), misses 0

VI. PAT statique

Le serveur web SRV01 sera joignable sur la même adresse que l'interface du routeur R1 mais sur le port 8080, c'est R1 qui se chargera de router les requetes vers l'adresse 192.168.1.11 du port 80.

a. Configuration de R1

Sur l'interface interne GigabitEthernet0/1 de R1 du réseau 192.168.1.0 :

R1(config)#interface GigabitEthernet 0/0
R1(config-if)#description "interface interne"
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#ip nat inside

Sur l'interface externe Serial0/1/0 de R1 du réseau 200.0.0.0 :

R1(config)#interface Serial0/1/0
R1(config-if)#description "interface externe"
R1(config-if)#ip address 200.0.0.1 255.255.255.0
R1(config-if)#ip nat outside

On déclare l'enregistrement PAT statique pour SRV01 :

R1(config)#ip nat inside source static tcp 192.168.1.11 80 200.0.0.1 8080

b. Test de requête HTTP sur SRV01

On test le protocole sur l'adresse externe de SRV01 avec la machine 192.168.2.21 sur 200.0.0.1:8080, puis on regarde sur R1 :

do sh ip nat translation
Pro  Inside global     Inside local       Outside local      Outside global
tcp 200.0.0.1:8080     192.168.1.11:80    200.0.0.2:1027     200.0.0.2:0
R1#sh ip nat stat
Total translations: 2 (1 static, 1 dynamic, 2 extended)
Outside Interfaces: Serial0/1/0
Inside Interfaces: GigabitEthernet0/0
Hits: 129  Misses: 135
Expired translations: 0
Dynamic mappings:
Router(config)#

On peut aussi débugger avec cette commande :

R1#debug ip nat
IP NAT debugging is on

NAT: s=200.0.0.2, d=200.0.0.1->192.168.1.11 [104]

NAT*: s=192.168.1.11->200.0.0.1, d=200.0.0.2 [70]

NAT*: s=200.0.0.2, d=200.0.0.1->192.168.1.11 [105]

NAT*: s=200.0.0.2, d=200.0.0.1->192.168.1.11 [106]

NAT*: s=192.168.1.11->200.0.0.1, d=200.0.0.2 [71]

NAT*: s=200.0.0.2, d=200.0.0.1->192.168.1.11 [107]

NAT*: s=192.168.1.11->200.0.0.1, d=200.0.0.2 [72]

NAT*: s=200.0.0.2, d=200.0.0.1->192.168.1.11 [108]

VII. PAT Dynamique

On veut surcharger R2 en utilisant uniquement l'adresse de l'interface externe du routeur R2 à savoir 200.0.0.2

a. Configuration de R2

Sur l'interface interne GigabitEthernet0/0 de R1 du réseau 192.168.1.0 :

R2(config)#interface GigabitEthernet 0/0
R2(config-if)#description "interface interne"
R2(config-if)#ip address 192.168.2.1 255.255.255.0
R2(config-if)#ip nat inside

Sur l'interface externe Serial0/1/1 de R1 du réseau 200.0.0.0 :

R2(config)#interface Serial0/1/0
R2(config-if)#description "interface externe"
R2(config-if)#ip address 200.0.0.2 255.255.255.0
R2(config-if)#ip nat outside

On déclare via une ACL, une permission pour le réseau 192.168.2.0 sinon le NAT ne fonctionnera pas :

R1(config)#access-list 1 permit 192.168.2.0 0.0.0.255

On déclare une étendue d'adresse pour une étendue de PAT dynamique pour les machines du réseau 192.168.2.0 :

R1(config)#ip nat inside source list 1 interface Serial0/1/1 overload

b. Test HTTP sur SRV01

On test le protocole http sur l'adresse externe de SRV01 avec la machine 192.168.2.21 sur 200.0.0.1 port 8080 :

Pour voir le PAT, on effectue ces commandes sur le routeur R2 :

R2#sh ip nat translations 
Pro  Inside global     Inside local       Outside local      Outside global
tcp 200.0.0.2:1025     192.168.2.21:1025  192.168.1.11:80    192.168.1.11:80
tcp 200.0.0.2:1026     192.168.2.21:1026  192.168.1.11:80    192.168.1.11:80
tcp 200.0.0.2:1027     192.168.2.21:1027  192.168.1.11:80    192.168.1.11:80
tcp 200.0.0.2:1028     192.168.2.21:1028  200.0.0.11:80      200.0.0.11:80
tcp 200.0.0.2:1029     192.168.2.21:1029  200.0.0.11:80      200.0.0.11:80
tcp 200.0.0.2:1030     192.168.2.21:1030  200.0.0.11:80      200.0.0.11:80
tcp 200.0.0.2:1037     192.168.2.21:1037  200.0.0.1:8080     200.0.0.1:8080
Router#sh ip nat stat
Total translations: 8 (0 static, 8 dynamic, 8 extended)
Outside Interfaces: Serial0/1/1
Inside Interfaces: GigabitEthernet0/0
Hits: 112  Misses: 346
Expired translations: 7
Dynamic mappings: