Ich besitze einen VPS mit CentOS 7, mit dem ich mich über SSH verbinde. Ich möchte einen OpenVPN-Client auf dem VPS ausführen, damit der Internetverkehr über das VPN geleitet wird, aber ich kann trotzdem über SSH eine Verbindung zum Server herstellen. Wenn ich OpenVPN starte, wird meine SSH-Sitzung getrennt und ich kann keine Verbindung mehr zu meinem VPS herstellen. Wie kann ich den VPS so konfigurieren, dass eingehende SSH-Verbindungen (Port 22) auf der tatsächlichen IP-Adresse des VPS (104.167.102.77) geöffnet sind, aber ausgehender Datenverkehr (wie von einem Webbrowser auf dem VPS) über das VPN weitergeleitet wird?
Der von mir verwendete OpenVPN-Dienst ist PrivateInternetAccess. Eine Beispieldatei für config.ovpn lautet:
Klient dev tun proto udp remote nl.privateinternetaccess.com 1194 Resolv-Retry unendlich nobind persist-key persist-tun ca ca.crt tls-client Remote-Zertifikatserver Auth-User-Pass comp-lzo Verb 1 Reneg-Sek. 0 crl-verify crl.pem
VPS's IP-Adresse:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN link / loopback 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 :: 1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link / ether 00: 50: 56: be: 16: f7 brd ff: ff: ff: ff: ff: ff inet 104.167.102.77/24 brd 104.167.102.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80 :: 250: 56ff: febe: 16f7 / 64 scope link valid_lft forever preferred_lft forever 4: tun0: mtu 1500 qdisc pfifo_fast state UNBEKANNT qlen 100 link / none inet 10.172.1.6 peer 10.172.1.5/32 scope global tun0 valid_lft forever preferred_lft forever
IP-Route von VPS:
0.0.0.0/1 über 10.172.1.5 dev tun0 Standard via 104.167.102.1 dev ens33 proto static metric 1024 10.172.1.1 über 10.172.1.5 dev tun0 10.172.1.5 dev tun0 proto kernel scope link src 10.172.1.6 104.167.102.0/24 dev ens33 proto kernel scope link src 104.167.102.77 109.201.154.177 über 104.167.102.1 dev ens33 128.0.0.0/1 über 10.172.1.5 dev tun0
route
oder hinzugefügt habe, nicht sehenip route show
) und sie löschen?Das mag etwas spät sein, aber ...
Das Problem ist, dass das Standardgateway von OpenVPN geändert wird und die aktuelle SSH-Verbindung unterbrochen wird, es sei denn, Sie richten vor dem Start von OpenVPN entsprechende Routen ein.
Was folgt, funktioniert bei mir. Es benutzt iptables und ip (iproute2). Im Folgenden wird davon ausgegangen, dass die Standard-Gateway-Schnittstelle vor dem Start von OpenVPN "eth0" ist. Damit soll sichergestellt werden, dass beim Herstellen einer Verbindung zu eth0 die Antwortpakete für die Verbindung wieder auf eth0 zurückgehen, auch wenn eth0 nicht mehr die Standard-Gateway-Schnittstelle ist.
Sie können dieselbe Nummer für die Verbindungsmarke, die Firewallmarke und die Routingtabelle verwenden. Ich habe verschiedene Zahlen verwendet, um die Unterschiede zwischen ihnen deutlicher zu machen.
===
AKTUALISIEREN:
Das oben Genannte funktioniert gut für Debian Jessie. Aber auf einem älteren Wheezy-System habe ich gerade festgestellt, dass ich dem Routing-Tabelleneintrag "via" hinzufügen muss:
Dort muss "12.345.67.89" das ursprüngliche Nicht-VPN-Gateway sein.
quelle
ip route add default
)? Ich erhalte "RTNETLINK-Antworten: Datei existiert". Ich verwende Ubuntu Xenial. "via" hilft nicht. Ich habe es gerade unter Arch Linux ausprobiert, esip route add default
scheint zunächst erfolgreich zu sein, aber dieip route
Ausgabe ändert sich nicht. Alle nachfolgenden Ausführungen führen zur Meldung "Datei vorhanden".ip route show table all | grep 3412
. Und ohne "via" nicht hergestellte (wenn ich mich nicht irre) Verbindungen funktionieren nicht mehr (Ubuntu Xenial). Zumindest kann ich die Routing-Tabelle korrigieren. Trotzdem kann ich nicht auf den Server zugreifen, nachdem ich ausgeführt habeopenvpn
.Basierend auf der @ MrK-Antwort habe ich hier einen einfachen Code geschrieben, um die Arbeit zu beschleunigen, damit Sie nicht nach Schnittstellen / IP suchen müssen:
Ich habe dieses Skript auf 4 meiner VPS ausprobiert und es funktioniert einwandfrei.
quelle
hmm klingt wie IP-Subnetz-Überlappung .... ohne mehr über Ihr IP-Schema zu wissen, außer der öffentlichen IP für Ihre VPN-Verbindung wie nl.privateinternetaccess.com, kann nicht sicher sagen.
Zum Beispiel, wenn das entfernte Subnetz auf der anderen Seite von nl.privateinternetaccess.com 10.32.43.0/24 ist und sich Ihre Instanz in einem aws vpc befindet, dessen Subnetz 10.32.44.0/24 ist. Ihr Source-SSH-Client läuft jedoch unter 10.32.43.0/24 (auf Ihrer Seite von AWS VPC). Dies funktioniert nicht, da der zurückgesendete SSH-Verkehr fälschlicherweise über VPN in die Niederlande geleitet wird.
Geben Sie die vollständigen IP- / Subnetz-Informationen an, um weitere Hilfe zu erhalten.
...
ok, also ... sieht so aus, als ob Ihre Standardroute im Tunnel ist, nachdem Sie eine Verbindung zu nl hergestellt haben:
Sie können dies also ändern, nachdem Sie eine Verbindung hergestellt haben. Viele Male geben VPN-Server Ihnen falsche Routen. speziell bei schlampigen Korps. In diesem Fall wird eine Standardroute an Sie gesendet, sodass der gesamte Datenverkehr von der vps box an nl weitergeleitet wird. Ändern Sie die Standardroute auf 104.167.102.x oder auf das Subnetz-Gateway, das sich beim ur vps-Anbieter befindet.
quelle
Wenn Sie das VPN aufrufen, wird Ihr Standard-Gateway ersetzt. Dies bedeutet, dass jeglicher Verkehr, der von Ihrer Box erzeugt oder durch diese geleitet wird, an das VPN-Gateway weitergeleitet wird.
Eine einfache Lösung besteht darin, den gesamten Datenverkehr zu filtern, den Sie nicht über das VPN leiten möchten, und etwas anderes damit zu tun. Eine Möglichkeit besteht darin, den von Ihrer Box erzeugten Datenverkehr mit Ihrer lokalen Quelladresse aufzunehmen und über Ihr lokales Gateway weiterzuleiten. Auf diese Weise können Dienste wie SSH ordnungsgemäß ausgeführt werden.
Das machen wir hier. Erstellen Sie zunächst eine neue Routingtabelle und fügen Sie eine Standardroute hinzu, die alles über Ihr lokales Gateway weiterleitet:
Als Nächstes erstellen Sie eine neue Paketfilterregel, die den gesamten Verkehr markiert, der Ihre Box von einer bestimmten Quelladresse mit einer Kennung verlässt.
Erstellen Sie schließlich eine Routing-Richtlinie, die den gesamten oben genannten markierten Datenverkehr auswählt und anhand der oben generierten Tabelle weiterleitet.
Auch hier sind die Werte von
<mark>
und<table>
beliebige Bezeichner Ihrer Wahl.quelle
Für mich mit OpenVPN-Server selbst in pfSense war das Deaktivieren der Einstellung "Alle vom Client generierten IPv4-Daten durch den Tunnel erzwingen".
quelle