48 votes

Connexion à un serveur distant via un VPN lorsque l'adresse de sous-réseau du réseau local est en conflit avec un réseau distant

Il s'agit d'un Question canonique sur la résolution des conflits de sous-réseaux IPv4 entre le réseau local d'un client VPN et celui qui se trouve de l'autre côté de la liaison VPN.

Après s'être connectés à un site distant via OpenVPN, les clients essaient d'accéder à un serveur sur un réseau qui existe sur un sous-réseau tel que 192.0.2.0/24. Cependant, il arrive que le réseau sur le LAN du client ait la même adresse de sous-réseau : 192.0.2.0/24. En raison de ce conflit, les clients ne peuvent pas se connecter au serveur distant en tapant son adresse IP. Ils ne peuvent même pas accéder à l'internet public lorsqu'ils sont connectés au VPN.

Le problème est que ce sous-réseau 192.0.2.0/24 doit être acheminé par le VPN, mais il doit également être acheminé en tant que réseau local du client.

Quelqu'un sait-il comment atténuer ce problème ? J'ai accès au serveur OpenVPN.

31voto

Aydin K. Points 371

Si vous avez besoin d'une solution de contournement temporaire pour un ou plusieurs serveurs connus, la solution la plus simple est l'option de routage statique côté client.

Dans mon cas, j'ai ajouté le serveur de destination souhaité (192.168.1.100) à ma table de routage sur mon client linux via :

route add 192.168.1.100 dev tun0

Ensuite, supprimez cette route statique à l'aide de la commande route delete.

26voto

ErikE Points 4616

Il est possible de résoudre ce problème en utilisant la NAT, mais ce n'est pas très élégant.

En partant du principe qu'il n'est pas possible de résoudre ce problème en ayant des réseaux internes dont les numéros sont si peu communs qu'ils n'entrent jamais en conflit, voici le principe :

Comme le sous-réseau local et le sous-réseau distant ont des numéros de réseau identiques, le trafic de votre client ne se rendra jamais compte qu'il doit passer par la passerelle du tunnel pour atteindre sa destination. Et même si nous imaginons que c'est le cas, la situation serait la même pour l'hôte distant qui s'apprête à envoyer une réponse.

Restez donc avec moi et faites comme si, pour l'instant, il n'y avait pas de problèmes secondaires, alors que j'écris que pour une connectivité complète, vous devrez faire du NAT aux deux extrémités du tunnel afin de différencier les hôtes et de permettre le routage.

Nous fabriquons des filets ici :

  • Le réseau de votre bureau utilise 192.0.2.0/24
  • Votre bureau distant utilise 192.0.2.0/24
  • La passerelle VPN de votre réseau de bureau cache les hôtes 192.0.2.0/24 derrière le réseau NAT 198.51.100.0/24.
  • La passerelle VPN de votre réseau de bureaux distants cache les hôtes 192.0.2.0/24 derrière le numéro de réseau NAT 203.0.113.0/24

Ainsi, à l'intérieur du tunnel VPN, les hôtes du bureau sont maintenant 198.51.100.x et les hôtes du bureau distant sont 203.0.113.x. Supposons en outre que tous les hôtes sont mappés 1:1 dans le NAT de leurs passerelles VPN respectives. Voici un exemple :

  • L'hôte 192.0.2.5/24 du réseau de votre bureau est statiquement mappé en tant que 198.51.100.5/24 dans la passerelle NAT vpn du bureau.
  • L'hôte 192.0.2.5/24 du réseau de votre bureau distant est statiquement mappé en tant que 203.0.113.5/24 dans la passerelle NAT du bureau distant.

Ainsi, lorsque l'hôte 192.0.2.5/24 du bureau distant veut se connecter à l'hôte ayant la même adresse IP dans le réseau du bureau, il doit le faire en utilisant l'adresse 198.51.100.5/24 comme destination. Il se passe alors ce qui suit :

  • Au bureau distant, l'hôte 198.51.100.5 est une destination distante accessible via le VPN et acheminée à cet endroit.
  • Au bureau distant, l'hôte 192.0.2.5 se fait passer pour 203.0.113.5 lorsque le paquet passe la fonction NAT.
  • Au bureau, l'hôte 198.51.100.5 est traduit en 192.0.2.5 lorsque le paquet passe la fonction NAT.
  • Au bureau, le trafic de retour vers l'hôte 203.0.113.5 suit le même processus dans le sens inverse.

Il existe donc une solution, mais un certain nombre de questions doivent être abordées pour qu'elle puisse fonctionner dans la pratique :

  • L'IP masquée doit être utilisée pour la connectivité à distance ; le DNS devient complexe. En effet, les points d'extrémité doivent avoir une adresse IP unique, vue de l'hôte qui se connecte.
  • Une fonction NAT doit être mise en œuvre aux deux extrémités dans le cadre de la solution VPN.
  • Le mappage statique des hôtes est indispensable pour que l'on puisse les joindre depuis l'autre extrémité.
  • Si le trafic est unidirectionnel, seule la partie réceptrice a besoin d'un mappage statique de tous les hôtes concernés ; le client peut s'en tirer avec un NAT dynamique s'il le souhaite.
  • Si le trafic est bidirectionnel, les deux extrémités ont besoin d'un mappage statique de tous les hôtes concernés.
  • La connectivité Internet ne doit pas être entravée, qu'il s'agisse d'un réseau privé virtuel divisé ou non divisé.
  • Si vous ne pouvez pas établir de correspondance 1 à 1, c'est le désordre qui s'installe ; une comptabilité rigoureuse est nécessaire.
  • Naturellement, on court le risque d'utiliser des adresses NAT qui s'avèrent être des doublons :-)

La résolution de ce problème nécessite donc une conception minutieuse. Si votre bureau à distance se compose en réalité de "guerriers de la route", vous ajoutez une couche de problèmes :

  • ils ne savent jamais à l'avance s'ils se retrouvent sur des identifiants de réseau qui se chevauchent.
  • la passerelle du bureau distant NAT devrait être implémentée sur leurs ordinateurs portables.
  • la passerelle du bureau aurait besoin de deux VPN, l'un sans NAT et l'autre avec NAT, pour couvrir les deux scénarios. Dans le cas contraire, dans le cas où quelqu'un choisirait l'un des sous-réseaux que vous avez sélectionnés pour la méthode NAT, les choses ne fonctionneraient pas .

Selon votre client VPN, vous pouvez être en mesure de sélectionner automatiquement un VPN ou l'autre en fonction de l'adresse réseau du segment local.

Il convient de noter que toute mention de NAT dans ce contexte désigne une fonction NAT qui se déroule pour ainsi dire dans la perspective du tunnel. Du point de vue du processus, le mappage NAT statique doit être effectué avant que le paquet n'"entre" dans le tunnel, c'est-à-dire avant qu'il ne soit encapsulé dans le paquet de transport qui doit l'emmener à travers l'internet jusqu'à l'autre passerelle VPN.

Cela signifie qu'il ne faut pas confondre les adresses IP publiques des passerelles VPN (qui, dans la pratique, peuvent également être NAT:ed, mais en dehors de la perspective du transport vers le site distant via le VPN) avec les adresses privées uniques utilisées comme masques pour les adresses privées dupliquées. Si cette abstraction est difficile à imaginer, une illustration de la façon dont le NAT peut être physiquement séparé de la passerelle VPN à cette fin est donnée ici :
Utilisation de la NAT dans des réseaux qui se chevauchent .

Condenser la même image à une séparation logique à l'intérieur d'une machine, capable d'exécuter à la fois les fonctions de NAT et de passerelle VPN, c'est simplement pousser le même exemple un peu plus loin, mais cela met davantage l'accent sur les capacités du logiciel en question. Le piratage avec, par exemple, OpenVPN et iptables et l'affichage de la solution ici serait un défi digne d'intérêt.

Du point de vue logiciel, c'est certainement possible :
PIX/ASA 7.x et versions ultérieures : Exemple de configuration d'un VPN IPsec LAN-to-LAN avec des réseaux qui se chevauchent
et :
Configuration d'un tunnel IPSec entre des routeurs dont les sous-réseaux LAN sont dupliqués

La mise en œuvre effective dépend donc de nombreux facteurs, notamment des systèmes d'exploitation concernés, des logiciels associés et de leurs possibilités. Mais c'est certainement faisable. Il faut réfléchir et expérimenter un peu.

J'ai appris cela de Cisco, comme le montrent les liens.

7voto

OllowainT Points 51

La réponse d'Aydin K. est pour linux. Si vous voulez la même fonctionnalité pour Windows, vous pouvez taper

route ADD 192.168.1.10 <IP of tunnel adapter>

o

route ADD 192.168.1.10 IF <interface id>

vous pouvez obtenir l'identifiant de l'interface à l'aide de la commande :

route print

5voto

nandoP Points 1961

Oui, c'est le pire. Pour moi, cela arrivait tout le temps depuis des chambres d'hôtel, avant que les administrateurs de vpn ne réalisent qu'ils devraient utiliser des plages d'adresses IP plus obscures. 10.0.0.0/24 et 10.1.1.1/24 sont les pires. Si vous le pouvez, n'utilisez jamais un réseau sans fil de ce type.

la réponse est donc de "réparer" le wap pour qu'il utilise un réseau interne différent (par exemple 10.255.255.0/24) et de vous donner un bail différent (c'est à dire une ip dans une plage qui peut router vers le corp vpn), ou si vous n'avez pas ou ne pouvez pas obtenir l'administration sur le wap, allez simplement au starbucks. ou 20 minutes d'itinérance :)

s'il s'agit d'un laboratoire, il suffit d'utiliser des fourchettes différentes.

4voto

Je suis sur un Mac avec El Capitan. Bien que les suggestions ci-dessus n'aient pas fonctionné pour moi, elles m'ont permis de trouver une solution efficace :

  1. Avant de démarrer le VPN, exécutez ifconfig

  2. démarrer le VPN, faire ifconfig et noter quelle est la nouvelle interface. Dans mon cas, il s'agissait de ppp0 avec une adresse IP de 192.168.42.74

    ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
        inet 192.168.42.74 --> 192.0.2.1 netmask 0xffffff00
  3. type dans :

    sudo route add 192.168.1.79  192.168.42.74

J'ai d'abord testé avec un ping puis j'ai prouvé que cela fonctionnait en accédant au serveur git.

Lorsque j'ai essayé d'utiliser dev ppp0 pour la fin de la commande route comme mentionné ci-dessus, il s'est plaint.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X