Ich möchte mehrere LANs verbinden, die sich in entfernten Gebäuden befinden.
Auf der "zentralen" Site befindet sich ein Linux-Computer, auf dem OpenVPN ausgeführt wird. Auf jedem Remote-Standort wird auch OpenVPN ausgeführt.
- Der zentrale Standort verfügt über ein LAN mit der Nummer 192.168.0.0/24
- Mehrere entfernte Standorte sind ebenfalls mit 192.168.0.0/24 nummeriert
- Ich kann / will / will nicht / was auch immer die LAN-Nummerierung ändern
- Ich habe keine Kontrolle über die meisten Remote-OpenVPNs
Ich muss dann:
1. virtuelle LANs definieren
2. ein 1: 1-NAT für jeden Standort konfigurieren
3. das 1: 1-NAT auf dem zentralen Router konfigurieren
.
Jeder Standort verfügt also über ein 10.10.x.0 / 24-LAN.
Wenn ein Computer beispielsweise 192.168.0.44 auf Site 12 erreichen möchte, muss er lediglich ein Paquet an 10.10.12.44 senden
Das Betreiben eines VPN ist für mich kein Problem. Ich verbinde derzeit mehr als 60 Websites. Aber ich finde keinen einfachen Weg, dies 1: 1 NAT zu tun.
Hier ist ein Beispiel für ein Paket, das vom zentralen Standort an einen Remotestandort gesendet wird, und dessen Antwortpaket:
Ich habe einige Tests mit iptables NETMAP durchgeführt, aber ich kann es nicht zum Laufen bringen, da ich nach der Routing-Entscheidung keine Möglichkeit finde, Quelle + Ziel zu ändern.
Ich ziehe es vor, die neue --client-nat
OpenVPN-Funktion zu vermeiden .
Vielleicht muss ich das Routing erzwingen ip route
? Oder zweimal in den Netzwerkstapel mit schleifen veth
?
Hinweis: Ich möchte keine Maskerade verwenden. Nur 1/1 NAT.
BEARBEITEN:
Mit einem regulären openVPN-Setup ist dies nicht möglich. Da ein Paket von einem Remote-Standort nicht von einem Paket von einem anderen Standort zu unterscheiden ist: Beide haben ähnliche Quell- und Zieladressen und beide stammen von derselben Tun- (oder Tap-) Schnittstelle. Es ist also nicht möglich, NAT als Quelle zu verwenden.
Lösung 1: Führen Sie das NAT auf den Remote-Standorten aus. In meinem Fall nicht möglich. Ich muss es nur auf der zentralen Seite tun.
Lösung 2: Richten Sie für jeden Remote-Standort ein VPN ein. Also werde ich für jeden eine Tonne haben. Ich denke das kann ok sein. Nicht sehr speichereffizient, aber ok.
Lösung 3: Richten Sie für jeden Standort einen (unverschlüsselten) Tunnel im VPN ein. Dies gibt jeweils eine Schnittstelle. Einfache Tunnel sind nicht plattformübergreifend (zu meinem Vorteil). Zum Beispiel sind GRE oder ipip oder sit für Linux in Ordnung, aber auf einigen entfernten Sites wird nur ein Windows-Computer ausgeführt, sodass openVPN darauf installiert ist. Es ist also unmöglich, einen einfachen Tunnel einzurichten. Eine andere Möglichkeit ist die Verwendung eines komplizierteren Tunnels (welcher?), Aber der Overhead auf dem System und auf dem Systemadministrator kann größer sein als bei mehreren VPNs
Lösung 4: Kompilieren Sie das neueste openVPN, da es eine 1: 1-NAT-Funktion enthält. Ich teste das diese Woche.
Antworten:
Eine sehr grundlegende Lösung ist:
1. Verwenden Sie OpenVPN 2.3 oder höher (derzeit ist die neueste Version 2.3-alpha) für Server + Clients.
2. Verwenden Sie die unten stehende OpenVPN-Konfigurationsoption.
3. Verwenden Sie nichts anderes (kein ipfilter, keine Tricks).
Auf der Serverseite müssen Sie VPN-Adressen manuell verteilen (also keine
server
Option, die Sie verwenden müssenifconfig
oderifconfig-push
):Die Zeilen
route
undpush route
undclient-nat
sind erforderlich, wenn Sie direkt zwischen Routern kommunizieren möchten (ping 10.99.99.1
von einem entfernten Standort über das VPN). Sonst können Sie sie wegwerfen..
.
Jetzt müssen Sie eine virtuelle Netzwerkadresse auswählen. Ich habe das gleiche beibehalten, das Sie in Ihrem Beispiel verwendet haben: 10.10.0.0/16
Sie erlauben das Routing dafür:
.
.
Sie müssen den Client jetzt anweisen, das 1: 1-NAT zu verwenden:
In der ersten Zeile wird die Adresse des Remote-Routers festgelegt. Beachten Sie, dass für Windows-Treiber spezielle Adressen erforderlich sind.
Die zweite und letzte Zeile ermöglichen es dem entfernten Router, über seine 10.99.99.x-Schnittstelle zu kommunizieren.
Die dritte und vierte Zeile übernehmen die Quell- und Ziel-1: 1-NAT
Die fünfte Zeile teilt OpenVPN mit, was mit den entsprechenden Paketen zu tun ist.
Mit dieser Methode können Sites mit identischen (oder nicht) LAN-Adressen ohne beschatteten Host verbunden werden.
quelle
Ich habe etwas Ähnliches mit echten Schnittstellen gemacht, aber ich kann nicht verstehen, warum es mit VPN-Schnittstellen nicht funktioniert.
Die Idee ist, dass das gleiche Subnetz an verschiedenen Schnittstellen auf diesem Router verfügbar ist, was das Routing kompliziert. Wenn ein Paket für 10.10.13.123 in den Router eingeht, wird es grundsätzlich vor dem Weiterleiten an 192.168.0.123 DNATed, sodass Sie dem Routing mitteilen müssen, dass es für 192.168.0.123 auf der Schnittstelle VPN13 bestimmt war .
Dies kann mithilfe von Firewall-Markierungen und Routing-Regeln erfolgen, die diese Markierungen verwenden. SNAT und DNAT müssen mit dem NETMAP-Firewall-Ziel durchgeführt werden. Für SNAT ist es das gleiche Problem. In POSTROUTING haben Sie die Information verloren, dass das Paket von dieser oder jener Schnittstelle stammt und alle die Quelladresse 192.168.0.x haben. Sie benötigen also auch eine Markierung, um diese Informationen von Mangle-PREROUTING zu Nat-POSTROUTING zu übertragen. Sie können dieselbe Markierung verwenden, aber das würde bedeuten, dass diese Pakete diese alternative Routing-Tabelle verwenden würden, sodass Sie die globale Routing-Tabelle für alle duplizieren müssten.
Für jedes Netzwerk würden Sie Folgendes tun:
Oben verwenden wir die ersten 4 Bits der Markierung , damit bis zu 7 Netzwerke auf diese Weise geroutet werden können.
quelle