Wie verarbeiten VPN-Server Pakete, die vom VPN-Client empfangen werden?

Wie verarbeiten VPN-Server Pakete, die vom VPN-Client empfangen werden?

Zunächst einmal sind meine Kenntnisse im Bereich Netzwerke recht begrenzt, daher entschuldige ich mich schon jetzt, falls ich die falsche Terminologie verwende.

Situation

Ich versuche, einen Prototyp zu erstellen, der es Clients ermöglicht, mit einem lokalen Webserver in einem anderen Netzwerk zu kommunizieren. Der Webserver wird im selben Netzwerk wie der VPN-Server gehostet. Bisher kann ich das Client-Paket (z. B. SYN) an eine virtuelle Schnittstelle (tun) weiterleiten und das gesamte Paket an den VPN-Server senden. Auf der Serverseite empfange ich diese Pakete, ändere die Quell- und Ziel-IPs und berechne die Prüfsummen in den Headern neu.

Um es noch einmal zu wiederholen: Der Ablauf ist wie folgt:

  1. Der Benutzer versucht, mit einer bestimmten IP-Adresse auf den Webserver zuzugreifen.
  2. Das SYN-Paket wird an die virtuelle Schnittstelle gesendet, da es mit den Routen in der Routing-Tabelle übereinstimmt.
  3. Die VPN-Client-Anwendung sendet das SYN-Paket über eine hergestellte WebSocket-Verbindung an den VPN-Server (die Art der Verbindung sollte dabei keine Rolle spielen).
  4. Der VPN-Server empfängt das Paket und ändert die Quell-/Ziel-IP-Adresse, sodass sie auf den tatsächlichen Webserver verweist, der im selben Netzwerk gehostet wird.
  5. Wie sende ich diese Pakete an den Webserver und erhalte Antworten vom Webserver? Ich möchte, dass der Client über den VPN-Server bzw. eine hergestellte WebSocket-Verbindung mit dem Webserver kommuniziert. Welche Optionen habe ich?

Frage

Wie kann ich diese Pakete an den Webserver senden und Pakete vom Webserver zurückerhalten, um sie an den Client zurückzusenden? „Injeziere“ ich Pakete in die richtige Schnittstelle und stelle sicher, dass meine Anwendung die Antworten an den Client zurücksendet? Ich möchte, dass der Client über den VPN-Server/eine hergestellte WebSocket-Verbindung mit dem Webserver kommuniziert. Welche Optionen habe ich und wie machen aktuelle VPN-Server das im Allgemeinen?

Was ich versucht habe

Ich habe versucht, auf der Serverseite eine virtuelle Schnittstelle (tun) zu erstellen und die vom Client empfangenen Pakete in die Schnittstelle zu schreiben. Diese Pakete werden jedoch nicht an den Webserver gesendet. Der Client und der Server laufen auf macOS und verwenden Netzwerkerweiterungen, falls das von Nutzen ist. Der Webserver läuft auf und ich habe die Quell-IP des Pakets vor dem Schreiben in die Schnittstelle 192.168.1.95auf geändert .100.64.0.77tun

Routing tables

Internet:
Destination        Gateway            Flags        Netif Expire
default            192.168.1.254      UGSc           en0       
default            link#10            UCSI         utun2       
100.64.0.77        100.64.0.77        UH           utun2       
127                127.0.0.1          UCS            lo0       
127.0.0.1          127.0.0.1          UH             lo0       
169.254            link#7             UCS            en0      !
192.168.1          link#7             UCS            en0      !
192.168.1          link#10            UCSI         utun2       
192.168.1.92/32    link#7             UCS            en0      !
192.168.1.99       8c:a9:82:2e:d6:2e  UHLWI          en0    986
192.168.1.254/32   link#7             UCS            en0      !
192.168.1.254      70:f1:96:86:e6:a0  UHLWIir        en0   1196
224.0.0/4          link#7             UmCS           en0      !
224.0.0/4          link#10            UmCSI        utun2       
224.0.0.251        1:0:5e:0:0:fb      UHmLWI         en0       
255.255.255.255/32 link#7             UCS            en0      !
255.255.255.255/32 link#10            UCSI         utun2   

`

Antwort1

Der VPN-Server empfängt das Paket und ändert die Quell-/Ziel-IP-Adresse, sodass sie auf den tatsächlichen Webserver verweist, der im selben Netzwerk gehostet wird.

Dies sollte eigentlich nie nötig sein, da der Client die gewünschte Ziel-IP-Adresse bereits angegeben hat. (VPNseinkapselndas Originalpaket in ein anderes IP-Paket, ohne den ursprünglichen IP-Header zu ändern, sodass der Server es nur erneut entkapseln und das Originalpaket genau so weiterleiten muss, wie es war.)

NAT kann durchgeführt werden (und wird gelegentlich durchgeführt), aber es ist häufiger die Aufgabe der Firewall des Betriebssystems und die Entscheidung des Systemadministrators – es sollte nicht allein von der VPN-Software durchgeführt werden. Und im Allgemeinen sollte die Kommunikation innerhalb eines internen Netzwerks nichtbrauchenNAT; seine Verwendung ist oft ein Hinweis darauf, dass das grundlegende Routing Ihres Netzwerks nicht richtig eingerichtet ist.

Wie sende ich diese Pakete an den Webserver und erhalte Antworten vom Webserver? Ich möchte, dass der Client über den VPN-Server bzw. eine hergestellte WebSocket-Verbindung mit dem Webserver kommuniziert. Welche Optionen habe ich?

Normalerweise hat der VPN-Server genau wie der VPN-Client eine virtuelle Schnittstelle und verwendet genau dieselben Mechanismen zum Erstellen und Empfangen von Paketen. (Einige erstellen dedizierte virtuelle Schnittstellen pro Client, andere haben eine einzige Schnittstelle für alle Clients.) Wenn Ihr Client eine tunSchnittstelle verwendet, kann Ihr Server dasselbe tun.

verwandte Informationen