Réconcilier le VPN et le NAT

C’est souvent un problème rencontré lorsqu’on met en place du VPN sur des réseaux qui utilisent du NAT pour leur sortie Internet.

Pour rappel :

  • VPN : Virtual Private Network, les VPNs permettent de sécuriser les données transitant d’un point A à un point B en chiffrant et authentifiant les paquets de données désirés.
  • NAT : Network Address Translation, la NAT permet, par exemple, de modifier les adresses IP privées d’un réseau LAN en une ou plusieurs adresses IP publiques afin de pouvoir communiquer avec Internet.

Mais alors pourquoi VPN et NAT ne font pas bon ménage ensemble ?

Et bien la réponse est assez simple en définitive. Lorsqu’un paquet IP passe par un équipement configuré pour appliquer de la NAT, son adresse IP source est remplacée par celle configurée sur l’équipement. De plus, la NAT modifie les valeurs du checksum (qui permet de vérifier si le paquet ne possède pas d’erreurs).

Topologie d'exemple NAT et VPN

Or, un paquet qui passe par des systèmes VPN ne doit pas avoir son adresse IP source modifiée en cours de route. Alors comment résoudre ce problème ? Il suffit tout simplement d’exclure le trafic VPN du NAT. Voici comment procéder sur un routeur Cisco :

Nous avons un VPN qui sécurise les données transitant entre le site de Rouen (192.168.0.0/24) et de Paris (172.16.0.0/24). Nous allons tout simplement interdire le trafic Rouen-to-Paris d’être modifié par la NAT (il sera donc obligé de passer uniquement par le VPN).

ROUEN> enable
ROUEN# configuration terminal
! On créé une ACL qui va interdire les communications Rouen-to-Paris
ROUEN(config) ip access-list extended ACL-NAT
ROUEN(config-acl) deny ip 192.168.0.0 0.0.0.255 172.16.0.0 0.0.0.255
! On autorise ensuite les communications Rouen-to-Any
ROUEN(config-acl) permit ip 192.168.0.0 0.0.0.255 any
ROUEN(config-acl) exit
! On créé une route-map que l'on attachera à la configuration NAT
ROUEN(config) route-map VPN-NAT permit 10
ROUEN(config-map) match ip address ACL-NAT
ROUEN(config-map) exit
! On configure la NAT en utilisant la route-map
ROUEN(config) ip nat inside source route-map VPN-NAT interface fastethernet 0/0 overload
ROUEN(config) end
ROUEN# wr

La même opération devra être effectuée côté Paris (en modifiant les informations réseaux bien entendu).