Herstellen einer Verbindung zu einem Remoteserver über ein VPN, wenn die Subnetzadresse des lokalen Netzwerks mit einem Remotenetzwerk in Konflikt steht

35

Dies ist eine kanonische Frage zum Lösen von IPv4-Subnetzkonflikten zwischen dem lokalen Netzwerk eines VPN-Clients und einem über die VPN-Verbindung verbundenen Netzwerk.

Nach dem Herstellen einer Verbindung zu einem Remotestandort über OpenVPN versuchen Clients, auf einen Server in einem Netzwerk zuzugreifen, das in einem Subnetz wie 192.0.2.0/24 vorhanden ist. Manchmal hat das Netzwerk im LAN des Clients jedoch dieselbe Subnetzadresse: 192.0.2.0/24. Clients können aufgrund dieses Konflikts keine Verbindung zum Remote-Server herstellen, indem sie dessen IP eingeben. Sie können nicht einmal auf das öffentliche Internet zugreifen, während sie mit dem VPN verbunden sind.

Das Problem ist, dass dieses Subnetz 192.0.2.0/24 vom VPN geroutet werden muss, aber es muss auch als LAN des Clients geroutet werden.

Weiß jemand, wie man dieses Problem mildert? Ich habe Zugriff auf den OpenVPN-Server.

John Russell
quelle
3
Sie können versuchen, eine statische Route für die / 32-Adresse des Hosts festzulegen, den Sie erreichen möchten, und den VPN-Peer als Gateway verwenden, um zu sehen, was passiert.
SpacemanSpiff
Wenn der VPN-Konzentrator Client-Routen berücksichtigt, ist möglicherweise für die Sicherheit Ihres Umkreises eine gewisse Hilfe erforderlich. Ich erhalte Zugang zum Buchhaltungs-LAN, füge Route zum technischen Bereich hinzu und kann dann problemlos eine Verbindung herstellen. beschissene firewalls wie sonicwall tun dies
nandoP
@SpacemanSpiff: Während dies das Problem auf der Clientseite lösen könnte , kann der Server immer noch nicht antworten, da die Verbindung von seinem eigenen Netzwerk und nicht von einem VPN-Client stammt.
Massimo

Antworten:

18

Es ist möglich, dies mit NAT zu lösen. es ist einfach nicht sehr elegant.

Unter der Annahme, dass Sie dieses Problem nicht lösen können, indem Sie interne Netze verwenden, deren Netzwerknummern so ungewöhnlich sind, dass sie nie in Konflikt geraten, gilt das folgende Prinzip:

Da sowohl das lokale als auch das entfernte Subnetz identische Netzwerknummern haben, wird der Datenverkehr von Ihrem Client niemals erkennen, dass er das Tunnel-Gateway passieren muss, um sein Ziel zu erreichen. Und selbst wenn wir uns das vorstellen könnten, wäre die Situation für den Remote-Host dieselbe, da er eine Antwort senden wird.

Bleiben Sie also bei mir und tun Sie so, als ob es bis jetzt keine Nebenprobleme gibt, da ich schreibe, dass Sie für eine vollständige Konnektivität beide Enden innerhalb des Tunnels NAT benötigen würden, um die Hosts zu unterscheiden und das Routing zuzulassen.

Hier ein paar Netze basteln:

  • Ihr Büronetzwerk verwendet 192.0.2.0/24
  • Ihr Remote-Büro verwendet 192.0.2.0/24
  • Das VPN-Gateway Ihres Büronetzwerks verbirgt 192.0.2.0/24 Hosts hinter der NATed-Netzwerknummer 198.51.100.0/24
  • Das VPN-Gateway Ihres Remote-Office-Netzwerks verbirgt 192.0.2.0/24 Hosts hinter der NATed-Netzwerknummer 203.0.113.0/24

Innerhalb des VPN-Tunnels sind die Office-Hosts jetzt 198.51.100.x und die Remote-Office-Hosts 203.0.113.x. Nehmen wir weiterhin an, alle Hosts sind 1: 1 im NAT ihrer jeweiligen VPN-Gateways zugeordnet. Ein Beispiel:

  • Ihr Büronetzwerkhost 192.0.2.5/24 ist statisch als 198.51.100.5/24 im NAT des Office-VPN-Gateways zugeordnet
  • Ihr Remote-Office-Netzwerkhost 192.0.2.5/24 ist im Remote-Office-VPN-Gateway NAT statisch als 203.0.113.5/24 zugeordnet

Wenn der Host 192.0.2.5/24 im Remote-Büro eine Verbindung zum Host mit derselben IP im Office-Netzwerk herstellen möchte, muss er die Adresse 198.51.100.5/24 als Ziel verwenden. Folgendes passiert:

  • In der Remote-Niederlassung ist Host 198.51.100.5 ein Remote-Ziel, das über das VPN erreicht und dort weitergeleitet wird.
  • In der Remote-Niederlassung wird Host 192.0.2.5 als 203.0.113.5 maskiert, wenn das Paket die NAT-Funktion besteht.
  • Im Büro wird Host 198.51.100.5 in 192.0.2.5 übersetzt, wenn das Paket die NAT-Funktion durchläuft.
  • Im Büro wird der Rückverkehr zum Host 203.0.113.5 in umgekehrter Richtung durchgeführt.

Während es also eine Lösung gibt, gibt es eine Reihe von Problemen, die angegangen werden müssen, damit dies in der Praxis funktioniert:

  • Die maskierte IP-Adresse muss für die Remoteverbindung verwendet werden. DNS wird komplex. Dies liegt daran, dass Endpunkte eine eindeutige IP-Adresse haben müssen, wie vom verbindenden Host aus gesehen.
  • Eine NAT-Funktion muss beidseitig im Rahmen der VPN-Lösung implementiert werden.
  • Die statische Zuordnung von Hosts ist ein Muss für die Erreichbarkeit vom anderen Ende.
  • Wenn der Datenverkehr unidirektional ist, muss nur das empfangende Ende alle beteiligten Hosts statisch zuordnen. Der Client kann davonkommen, dynamisch NAT-fähig zu sein, wenn dies gewünscht wird.
  • Wenn der Datenverkehr bidirektional ist, müssen auf beiden Seiten alle beteiligten Hosts statisch zugeordnet werden.
  • Die Internetverbindung darf unabhängig von Split- oder Non-Split-VPN nicht beeinträchtigt werden.
  • Wenn Sie nicht 1-zu-1 abbilden können, wird es chaotisch. Sorgfältige Buchführung ist eine Notwendigkeit.
  • Natürlich läuft man Gefahr, NAT-Adressen zu verwenden, die sich auch als Duplikate herausstellen :-)

Um dies zu lösen, ist sorgfältiges Design erforderlich. Wenn Ihr Remote-Büro wirklich aus Straßenkämpfern besteht, fügen Sie eine Reihe von Problemen hinzu:

  • Sie wissen nie im Voraus, wann sie auf überlappende Netz-IDs stoßen.
  • Das NAT des Remote-Office-Gateways muss auf den Laptops implementiert werden.
  • Das Office-Gateway benötigt zwei VPNs, ein NAT-freies und ein NAT-fähiges, um beide Szenarien abzudecken. Andernfalls würde es nicht funktionieren , wenn jemand eines der Subnetze auswählt, die Sie für die NAT-Methode ausgewählt haben .

Abhängig von Ihrem VPN-Client können Sie abhängig von der Netzwerkadresse des lokalen Segments möglicherweise automatisch das eine oder das andere VPN auswählen.

Beachten Sie, dass jede Erwähnung von NAT in diesem Zusammenhang eine NAT-Funktion bedeutet, die sozusagen in der Tunnelperspektive stattfindet. Die statische NAT-Zuordnung muss prozessbedingt erfolgen, bevor das Paket in den Tunnel "eintritt", dh bevor es in das Transportpaket eingekapselt wird, das es über das Internet zum anderen VPN-Gateway bringen soll.

Dies bedeutet, dass man die öffentlichen IP-Adressen der VPN-Gateways (und die in der Praxis auch NAT-Adressen sein können, aber dann ganz außerhalb der Perspektive des Transports zum Remote-Standort über VPN) nicht mit den eindeutigen privaten Adressen verwechseln darf, die als Maskeraden verwendet werden für die doppelten privaten Adressen. Wenn sich diese Abstraktion nur schwer vorstellen lässt, wird hier veranschaulicht, wie NAT zu diesem Zweck physisch vom VPN-Gateway getrennt sein kann:
Verwenden von NAT in überlappenden Netzwerken .

Das gleiche Bild auf eine logische Trennung innerhalb eines Computers zu komprimieren, auf dem sowohl die NAT- als auch die VPN-Gateway-Funktionalität ausgeführt werden kann, führt dasselbe Beispiel lediglich einen Schritt weiter, wobei jedoch die Fähigkeiten der jeweiligen Software stärker betont werden. Es wäre eine Herausforderung, es zusammen mit OpenVPN und iptables zu hacken und die Lösung hier zu veröffentlichen.

Softwaremäßig ist es sicherlich möglich:
PIX / ASA 7.x und höher: LAN-zu-LAN-IPsec-VPN mit überlappenden Netzwerken Konfigurationsbeispiel
und:
Konfiguration eines IPSec-Tunnels zwischen Routern mit doppelten LAN-Subnetzen

Die tatsächliche Implementierung hängt daher nicht zuletzt von vielen Faktoren, den beteiligten Betriebssystemen, der zugehörigen Software und deren Möglichkeiten ab. Aber es ist durchaus machbar. Sie müssten ein bisschen nachdenken und experimentieren.

Ich habe das von Cisco gelernt, wie die Links zeigen.

ErikE
quelle
Könnte NAT auch mit vielen VPN-Verbindungen und deren Übersetzungen funktionieren? Ich habe den Fall hier nicht ganz verstanden. Ich habe hier einen Thread unter unix.stackexchange.com/q/284696/16920 darüber, wie Site-to-Site-VPN mit überlappenden Subnetzen in Unix-Weise durchgeführt wird.
Léo Léopold Hertz 준영
17

Wenn Sie eine temporäre fehlerhafte Problemumgehung für einen einzelnen oder eine Handvoll bekannter Server-IPS benötigen, sollte die einfachste Lösung die Option für statisches clientseitiges Routing sein.

In meinem Fall habe ich meinen gewünschten Zielserver (192.168.1.100) zu meiner Routing-Tabelle auf meinem Linux-Client hinzugefügt:

route add 192.168.1.100 dev tun0

Entfernen Sie anschließend diese statische Route mit dem Befehl route delete.

Aydin K.
quelle
2
Dies ist eine perfekte Lösung und sogar ein perfektes Timing! :)
Yuval A
Wie lange dauert das an? Bis Sie die Verbindung trennen? Bis zum Neustart?
Carbocation
1
Auf meinem Linux-System (xfce mit Ubuntu / Mint) gehen die Einstellungen nach einer VPN-Trennung und auch nach einem Neustart "verloren". Sie können mit dem Befehl route überprüfen, ob die Einstellung aktiv ist (es wird einen Eintrag geben, bei dem sich die IP-Adresse und das tun0-Gerät normalerweise unten befinden)
Aydin K.
Die OSX-Version von route verwendet die Benutzeroberfläche anders, als dev tun0Sie es brauchen-interface tun0
Sirenen
5

yup das ist das schlimmste. für mich passierte es die ganze zeit von hotelzimmern, bevor vpn admins erkannten, dass sie dunkelere ip-bereiche verwenden sollten. 10.0.0.0/24 und 10.1.1.1/24 sind die schlechtesten. Wenn Sie helfen können, ipen Sie niemals ein drahtloses Netzwerk wie dieses.

die antwort lautet also "fix" the wap, um ein anderes internes netzwerk zu verwenden (dh 10.255.255.0/24) und dann eine diff lease zu geben (dh ip in einem bereich, der zurück zur corp vpn leiten kann), oder wenn sie keine haben Ich kann den Admin nicht auf Wap kriegen, gehe einfach zu Starbucks. oder 20 Minuten Wardriving :)

Wenn dies nur in einer Laborumgebung geschieht, verwenden Sie einfach andere Bereiche.

nandoP
quelle
Dang wirklich? Gibt es keine bessere Option?
John Russell
1
nicht, dass ich wüsste ... das war schon immer ein Problem ... sieht aus, als hätte jemand meine Antwort herabgestimmt, aber tatsächlich keine Lösung vorgeschlagen ... ha kill the messenger!
nandoP
3

Ich bin auf einem Mac mit El Capitan. Obwohl die obigen Vorschläge für mich nicht funktionierten, führten sie mich zu einer funktionierenden Lösung:

  1. Bevor Sie VPN starten, führen Sie Folgendes aus ifconfig
  2. Starten Sie das VPN, ifconfigund notieren Sie sich, welches die neue Schnittstelle ist. In meinem Fall war es ppp0 mit einer IP-Adresse von 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. eintippen:

    sudo route add 192.168.1.79  192.168.42.74
    

Ich habe zuerst mit a getestet pingund dann bewiesen, dass es funktioniert, indem ich auf den Git-Server zugegriffen habe.

Als ich versuchte, dev ppp0 wie oben erwähnt für das Ende des Routenbefehls zu verwenden, beschwerte es sich.

Robert Chapman III
quelle
2
Was 192.168.1.79kommt aus diesem Austausch?
Carbocation
Der Zielserver, zu dem Sie eine Verbindung herstellen. Dieser Server befindet sich im selben Netzwerk wie Ihr VPN und nicht in Ihrer lokalen Verbindung.
Carlo del Mundo
1

Ich habe eine einfache Lösung, die ich in einem Arbeitsbereich verwende, in dem ein IP-Bereich in Konflikt steht (10.x).

Ich habe mit meinem Handy eine Verbindung zum Netzwerk hergestellt und dann die Netzwerkverbindung über Bluetooth mit meinem Laptop geteilt. Ich kann das VPN jetzt für meinen entfernten Arbeitgeber verwenden.

Ich bin sicher, dass dies auch über USB funktioniert, wenn Sie eine schnellere Verbindung benötigen.

Aaron Ramirez
quelle
1
Hey, das ist eigentlich eine ziemlich clevere Lösung.
Nathan Osman
1

Wenn Sie nur ein paar IP-Adressen eingeben müssen, fügen Sie der ovpn-Konfigurationsdatei die folgende route-Anweisung hinzu:

route 192.168.1.10 255.255.255.255

route 192.168.1.11 255.255.255.255

Es wird eine Route für nur diese IPs hinzugefügt, wenn Sie Ihren VPN verbinden, und diese Route wird entfernt, wenn der VPN getrennt wird.

Arbeitete für mich auf jeden Fall unter Windows.

Jesse Regier
quelle
1

Die Antwort von Aydin K. ist für Linux. Wenn Sie die gleiche Funktionalität für Windows wünschen, können Sie eingeben

route ADD 192.168.1.10 <IP of tunnel adapter>

oder

route ADD 192.168.1.10 IF <interface id>

Sie können die Schnittstellen-ID mit dem folgenden Befehl abrufen:

route print
OllowainT
quelle
0

Zur Erinnerung: Dieses gesamte Problem ist auf die jahrelange Verknappung von IPv4-Adressen und die umfassende Nutzung des privaten IP-Bereichs hinter NAT zurückzuführen, um diesen Mangel zu beheben.

Die ideale und endgültige Lösung für dieses Problem ist recht unkompliziert (obwohl die globale Einführung einige Zeit in Anspruch nehmen kann und wird): IPv6 ...

In einer IPv6-Welt gibt es keinen öffentlichen IP-Mangel (und es wird kein Ereignis in ein paar Jahrzehnten geben). Es gibt also keinen Grund, nicht auf jedem Gerät jedes Netzwerks eine öffentliche IP zu haben. Und wenn Sie eine Netzwerkisolation benötigen, filtern Sie weiter mit einer Firewall, aber ohne hässliches NAT ...

CuriousFab
quelle