Leiten Sie TCP-Anfragen über VPN weiter

Leiten Sie TCP-Anfragen über VPN weiter

Ich habe 3 Geräte:

  1. Ein Server, verbunden mit Netzwerk1
  2. Ein Laptop, verbunden mit Netzwerk2
  3. Ein Raspberry Pi, ebenfalls mit Network2 verbunden

Es gibt außerdem einen OpenVPN-Server auf Netzwerk1 sowie eine Portweiterleitung für den VPN-Zugriff.

Ich brauche den Raspi, um TCP-Anfragen (für den Server) vom Laptop zu empfangen und sie über das VPN an den Server zu senden. Anschließend sendet er die Antwort vom Server zurück an den Laptop. Es wird nur ein Port verwendet, aber es wäre auch in Ordnung, wenn alle Ports weitergeleitet würden. Auf dem Laptop darf keine Software installiert werden. Außerdem sollten auf dem Laptop vorzugsweise keine Befehle oder ähnliches vorhanden sein.

Ich brauche eine Art "Portweiterleitung", aber in ein VPN

Antwort1

Verwenden Sie buchstäblich dieselbe „Portweiterleitung“, d. h. DNAT-Regeln in der Firewall des Routers (RasPi); sie funktioniert unabhängig vom Netzwerktyp auf die gleiche Weise.

Das heißt, fügen Sie DNATder RasPi-Firewall für jede benötigte „Portweiterleitung“ iptables- oder nftables-Regeln hinzu. (Vergessen Sie nicht, auch „Weiterleitung zulassen“-Regeln hinzuzufügen – diese sind bei den meisten Routern automatisch, aber nicht bei einfachen iptables oder nftables.)

Ihr Server muss über seine VPN-Verbindung eine Route zurück zu Network2 haben (bei OpenVPN bedeutet das wahrscheinlich eine irouteKonfiguration). Wenn das schwierig einzurichten ist, besteht die Alternative darin, dass der RasPi dies auch SNAToder MASQUERADEzusätzlich zum DNAT-ing durchführt. (Die SNAT/MASQ-Option wäre genau dieselbe Art von Konfiguration wie für „NAT Hairpinning“ in LANs.)

  • Beispiel für nftables:

    table inet filter {
        chain forward {
            type filter hook forward priority filter;
    
            ip daddr <ServerIP> accept
        }
    }
    
    table ip nat {
        chain prerouting {
            type nat hook prerouting priority dstnat;
    
            iifname "eth0" ip daddr <RasPiIP> tcp dport 80 \
              dnat to <ServerIP>:80
        }
    
        chain postrouting {
            type nat hook postrouting priority srcnat;
    
            oifname "tun0" masquerade
        }
    }
    
  • Beispiel für iptables:

    -t filter -I FORWARD -d <ServerIP> -j ACCEPT
    
    -t nat -I PREROUTING -i eth0 -d <RasPiIP> -p tcp --dport 80 \
        -j DNAT --to-destination <ServerIP>:80
    
    -t nat -I POSTROUTING -o tun0 -j MASQUERADE
    

Alternative: Verwenden Sie einen „Reverse-Proxy“ auf dem RasPi. Die meisten Reverse-Proxys sind für HTTP/HTTPS, aber jedes TCP- oder TLS-Protokoll kann als Proxy verwendet werden. Dies funktioniert nicht mit UDP (zumindest nicht so einfach) und erfordert zusätzliche Software, hat aber weniger Routing-Anforderungen.

Für HTTP/HTTPS-Dienste sind Nginx oder Apache httpd gängige Optionen; an anderer Stelle ausführlich dokumentiert. (In beiden Fällen heißt die Option „proxy_pass“ oder „ProxyPass“.)

verwandte Informationen