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:
- Der Benutzer versucht, mit einer bestimmten IP-Adresse auf den Webserver zuzugreifen.
- Das SYN-Paket wird an die virtuelle Schnittstelle gesendet, da es mit den Routen in der Routing-Tabelle übereinstimmt.
- 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).
- 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.
- 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.95
auf geändert .100.64.0.77
tun
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 tun
Schnittstelle verwendet, kann Ihr Server dasselbe tun.