Port auf VPN Client weiterleiten?

21

Ich bin in ein kleines Rätsel geraten und habe nicht viel Glück gehabt, eine Lösung zu finden. Momentan bin ich (leider) über Verizon 3G mit dem Internet verbunden. Sie filtern den gesamten eingehenden Datenverkehr, sodass ich keine Ports öffnen kann, um Verbindungen anzunehmen.

Ich habe derzeit eine virtuelle Linux-Maschine bei linode.com und der Gedanke kam mir in den Sinn, eine Portweiterleitung zu installieren pptpdund zu versuchen iptables. Ich habe pptpdinstalliert und mein Heimcomputer verbindet sich glücklich. Das heißt, hier sind einige allgemeine Informationen:

Server (Debian) WAN IP: xxxx auf eth0 - pptpd IP: yyy1 auf ppp0 - Client VPN IP: yyy100

Um sicherzustellen, dass ich nicht verrückt geworden bin, habe ich versucht, einige Verbindungen vom Server zu den offenen Ports auf dem Client herzustellen, und der Client akzeptiert die Verbindungen über die VPN-IP.

Was ich erreichen möchte, ist Folgendes:

Internet -> WAN IP: Port -> Weiterleiten an Client VPN IP: Port

Wenn ich zum Beispiel den Port 6000 auf meinem Client geöffnet hätte, könnte eine Person zu xxxx: 6000 telneten, und der Server würde das abfangen und an 192.168.3.100:6000 weiterleiten.

Ich habe mindestens 20 verschiedene Googled-Up- iptablesKonfigurationen ausprobiert und noch keine funktioniert. Hat jemand irgendwelche Ideen oder vielleicht sogar einen ganz anderen Ansatz, den ich vielleicht nicht kenne? Das Ziel hierbei ist es, über eine schrecklich Firewall-Verbindung zu lauschen, vorzugsweise über TCP- und UDP-Verkehr.

Gemeiner Brigandier
quelle

Antworten:

25

Sie müssen drei Dinge auf Ihrem VPN-Server (dem Linode) tun, damit dies funktioniert:

  1. Sie müssen die IP-Weiterleitung aktivieren:

    sysctl -w net.ipv4.ip_forward=1
    
  2. Richten Sie das Ziel-NAT (DNAT) ein, um den Port weiterzuleiten. Sie haben dies wahrscheinlich schon herausgefunden, weil es sich um Standard-Port-Weiterleitungs-Inhalte handelt, aber der Vollständigkeit halber:

    iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 6000 -j DNAT --to-dest y.y.y.100:6000
    
  3. Richten Sie das Quell-NAT (SNAT) so ein, dass die Verbindung aus Sicht Ihres VPN-Clients vom VPN-Server stammt:

    iptables -t nat -A POSTROUTING -d y.y.y.100 -p tcp --dport 6000 -j SNAT --to-source y.y.y.1
    

Der Grund, warum Sie die SNAT benötigen, ist, dass Ihr VPN-Client ansonsten seine Rückpakete direkt an den Host sendet, der die Verbindung (zzzz) über sein Standard-Gateway (dh Verizon 3G) und nicht über das VPN initiiert hat. Daher ist die Quell-IP-Adresse auf den Rückpaketen Ihre Verizon 3G-Adresse und nicht xxxx. Dies verursacht alle möglichen Probleme, da zzzz die Verbindung zu xxxx wirklich initiiert hat

In den meisten Portweiterleitungs-Setups wird die SNAT nicht benötigt, da der Host, der die Portweiterleitung durchführt, auch das Standard-Gateway für den Zielhost ist (z. B. ein Heimrouter).

Beachten Sie auch, dass, wenn Sie Port 6000 an einen anderen Port (z. B. 7000) weiterleiten möchten, die SNAT-Regel mit 7000 und nicht mit 6000 übereinstimmen sollte.

AGWA
quelle
Hallo AGWA, Danke für die Antwort. Ich hatte bereits ip_forwarding aktiviert, und Ihre Regeln funktionierten einwandfrei, wenn auch anfangs nicht. Das Problem war (in meinem iptables Noobness), dass ich nicht realisierte, dass iptables -F die nat-Einträge nicht löschte und iptables -L sie nicht auflistete. Nachdem ich herausgefunden hatte, wie man sie richtig auflistet, bemerkte ich mehrere widersprüchliche Einträge aus früheren Versuchen. Nachdem Sie Ihre Regeln gespült und ausprobiert haben, funktioniert es perfekt. Eine kurze Frage: In Ihren Regeln geben Sie tcp an. Würde es für TCP / UDP-Verkehr funktionieren, dies auf "alle" zu setzen?
Vile Brigandier
Bitte! (Übrigens verwende ich gerne iptables-save, um meine iptables-Regeln anzuzeigen - obwohl die Ausgabe nicht für den menschlichen Verzehr bestimmt ist, ist sie dennoch lesbar und zeigt alle Ihre iptables-Regeln an.) Nein, leider können Sie dort nicht "all" verwenden, weil --dportnur Arbeitet mit Protokollen, die tatsächlich Ports haben ("all" würde z. B. ICMP enthalten, das keine Vorstellung von Ports hat). Sie benötigen separate Regeln für TCP und UDP.
AGWA
Danke für den iptables-save-Tipp. Alles funktioniert wie erwartet für TCP und UDP. Prost.
Vile Brigandier
2
Nur eine Aktualisierung dieser Antwort ist, dass Sie mit iproute2 Ihren VPN-Client so einrichten können, dass er über zwei Gateways verfügt und den DNAT-Verkehr über das VPN zurückleitet. Dies ist nützlich, wenn Sie SNAT nicht verwenden möchten und der gesamte Datenverkehr scheinbar vom VPN-Server kommt. thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System enthält Informationen zur Einrichtung.
PressingOnAlways
Funktioniert für mich, solange ufw deaktiviert ist, obwohl ich 8080 in ufw zugelassen habe, aber sobald ich ufw aktiviere, funktioniert dieses Weiterleitungsmaterial nicht. Irgendeine Idee?
Sudhir N
3

Ich hatte auch dieses Problem und versuchte es stundenlang zu lösen. Hier ist meine Lösung:

  • Ich hatte mehr als einen VPNClientmit dem gleichen IPAddress. Also habe ich jedem eine Statik gegebenIPAddress

Definieren Sie ein Verzeichnis, in dem die Client-Skripte gespeichert werden sollen, z. B. / etc / openvpn / staticclients, und erstellen Sie das Verzeichnis

mkdir /etc/openvpn/staticclients

Fügen Sie dieses Verzeichnis als Option zu Ihrer openvpn-Konfigurationsdatei auf dem Server hinzu:

client-config-dir /etc/openvpn/staticclients

Für jeden Client müssen Sie eine Datei erstellen. Der Dateiname muss mit dem common nameAttribut übereinstimmen, das im Zertifikat des Clients angegeben wurde. Dieser Befehl ruft den CN vom Computerzertifikat ab:

In diesem Beispiel wird die IPAddress10.1.134.110/10.1.134.109 mit dem TESTCLIENT an den Client common name gesendet und es wird auch eine zusätzliche Route für das Subnetz 10.1.135.0 gesendet.

cat /etc/openvpn/staticclients/TESTCLIENT

ifconfig-push 10.1.134.110 10.1.134.109
push "route 10.1.135.0 255.255.255.0 10.1.134.62"
sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp --dport 28006 -j DNAT --to 10.1.134.110
Dominic Jonas
quelle
2

Bei den meisten Servern ist die IP-Weiterleitung in der Standardkonfiguration deaktiviert. Sie müssen es aktivieren, wenn Sie eingehende Verbindungen über Ihr VPN umleiten möchten.

Versuche dies:

sysctl -w net.ipv4.ip_forward = 1

Ich meine neben iptables auch die konfiguration.

Andrey Voitenkov
quelle
0

Was Sie erreichen möchten, ist (wahrscheinlich) sehr gut mit pptpdOpenVPN und iptables möglich. Möglicherweise finden Sie jedoch keinen besseren Kandidaten für diesen Anwendungsfall. Ich habe gerade gelesen das die genau für diesen Anwendungsfall , wie die Einrichtung tinc beschreibt. Es ist eine (möglicherweise einfachere) Alternative zum pptdpoder OpenVPN-Teil. Dann brauchst du genau die gleichen Regeln für iptables.

chmac
quelle