Verhindern Sie den Verlust der SSH-Verbindung nach der Anmeldung bei VPN auf dem Server


14

Ich bin auf ein Problem gestoßen, mit dem ich mich nicht befassen kann. Wenn ich über SSH bei einem VPS angemeldet bin und versuche, die VPN-Verbindung auf diesem VPS herzustellen, geht die SSH-Verbindung zwischen VPS und meinem Computer verloren. Ich nehme an, das liegt daran, dass das Routing durch die VPN-Einstellungen geändert wurde. Wie kann man das verhindern?


Was ist mit der Verbindung zu SSH nach der Einrichtung des VP? : p Sie haben Recht, dass dies darauf zurückzuführen ist, dass VPN die Routing-Pfade überschreibt. Was Sie tun können, ist, Ihre ursprünglichen Pfade beizubehalten und nur den zusätzlichen VPN-Pfad hinzuzufügen (es sei denn, Sie möchten Ihren VPS als Proxy verwenden. Das ist eine andere Geschichte). Welchen Client verwenden Sie?
Nikolaidis Fotis

Was meinst du mit "versuchen, eine VPN-Verbindung auf diesem VPS herzustellen"? Sie stellen eine Verbindung von Ihrem Computer zu einem OpenVPN-Server auf dem VPS her? Ihr VPS stellt eine Verbindung zu einem OpenVPN-Server her, der auf einem dritten Host ausgeführt wird? In diesem letzten Fall schiebt eine solche VPN-Verbindung einige Routen zurück?
Stellen Sie außerdem sicher

@NikolaidisFotis Ich kann keine Verbindung herstellen, da VPN ausgeführt wird. Ich benutze OpenVPN-Client. Es gibt eine --route-noexecOption zum Ignorieren der vom Server übertragenen Routen, aber wie Sie bereits erwähnt haben, hilft es nicht, wenn ich VPN als Proxy verwenden möchte ...
mic22

@DamianoVerzulli die zweite Option, ja Routen werden gepusht (aber ich denke, es muss gemacht werden, da ich das VPN als Proxy brauche, um die ursprüngliche IP-Adresse des Computers zu verbergen), und nein, es gibt kein NAT
mic22

Antworten:


6

Sie müssen der Konfigurationsdatei Ihres OpenVPN-Clients auf Ihrem VPS eine route-nopullOption hinzufügen (und entfernen, redirect-gatewayfalls vorhanden).

Auf diese Weise werden beim Herstellen einer Verbindung zu einem VPN-Server keine Routen auf Ihrem VPS geändert, sodass Sie die benötigten Routen selbst festlegen können.


Hey, danke für diesen Rat, aber jetzt kann ich nicht über tun0 ins Internet. Ich vermisse wohl ein Gateway. Irgendwelche Ideen, wie man ein Gateway für tun0 hinzufügt? Relevanter Teil von ifconfig:inet addr:10.56.10.6 P-t-P:10.56.10.5 Mask:255.255.255.255
Housemd

Sie müssen manuell eine Route zum VPN-Server selbst über Ihr Standard-ISP-Gateway hinzufügen und dann über 10.56.10.5 das Standard-Gateway für den gesamten anderen Datenverkehr
hinzufügen

Entschuldige, was? Ich habe keine Ahnung, was du gerade gesagt hast. Könnten Sie ein Beispiel geben?
Housemd

Lassen Sie mich nur klarstellen - ich möchte nicht, dass die Standardroute über tun0 erfolgt, aber ich benötige tun0, um einen Internetzugang zu haben.
Housemd

@Housemd hm, müssen Sie selbst über tun0 einen Internetzugang haben, oder benötigen Sie Clients, die über tun0 von anderen Orten aus verbunden sind, um einen Internetzugang zu haben?
Anubioz

4

Betrachten wir folgendes Szenario:

  1. Ihr VPS verfügt über eine einzige Ethernet-Schnittstelle, die mit der IP-Adresse 4.3.2.1/24 konfiguriert ist.
  2. Ihr VPS kann über ein Standard-Gateway 4.3.2.254 auf das Internet zugreifen
  3. Ihr VPS hat nicht jede OpenVPN - Verbindung noch aktiviert; Daher ist keine Tun-Schnittstelle aktiv

In einem solchen Szenario können Sie von Ihrem Computer aus (nehmen wir an, Ihr Computer ist 9.8.7.6/24 mit def-gw 9.8.7.254) erfolgreich eine SSH-Verbindung zu 4.3.2.1 herstellen. Somit können sich beide Hosts 4.3.2.1 und 9.8.7.6 erfolgreich gegenseitig erreichen.

Nehmen wir nun an, mit einer solchen SSH-Verbindung:

  1. Sie starten eine OpenVPN-Verbindung von Ihrem VPS 4.3.2.1 aus.
  2. Als solches wird eine neue tun0-Schnittstelle dynamisch konfiguriert (nehmen wir an, dass ihr eine 10.10.10.2-IP mit einem 10.10.10.1-PTP zugewiesen wird).

In diesem Stadium:

  • WENN keine Route vom Remote-OpenVPN-Server zu Ihrem lokalen VPS übertragen wird, ändert sich nichts in Bezug auf das Routing, und Ihre SSH-Verbindung überlebt ohne Probleme. In diesem Fall ist der einzige Datenverkehr, der das VPN durchläuft, der Datenverkehr, der an den Remote-OpenVPN-Server (10.10.10.1) gerichtet ist.

  • WENN der Remote-OpenVPN-Server eine Route zurückschiebt und insbesondere wenn das VPS-Standardgateway durch 10.10.10.1 (Remote-OpenVPN-Endpunkt) ersetzt wird, DANN treten Probleme auf. In diesem Fall tunneln Sie den gesamten ausgehenden IP-Verkehr (mit Ausnahme von OpenVPN selbst) innerhalb des VPN.

In diesem zweiten Fall (Ersetzen von def-gw direkt nach dem Herstellen der VPN-Verbindung) "hängt" Ihre vorherige SSH-Verbindung aufgrund von asymmetrischem Routing:

  • Der Datenverkehr von Ihrem Computer (9.8.7.6) zu VPS (4.3.2.1) fließt über den vorherigen, nie geänderten Pfad.
  • Datenverkehr von VPS (4.3.2.1) zu Ihrem Computer (9.8.7.6):
    • ohne das VPN (also zunächst) wurde über das Gateway 4.3.2.254 geroutet;
    • nach dem aufbau der vpn-verbindung wird mit zugehörigem def-gw-ersatz über das vpn geroutet (10.10.10.1).

Mit anderen Worten: Sobald die VPN-Verbindung hergestellt ist, ändert sich Ihre Rückroute von VPS zu Ihrem Computer und ... dies ist keine gute Sache (mehrere Netzwerkgeräte auf dem Rückweg erkennen möglicherweise eine solche Asymmetrie Pfad und einfach Pakete fallen lassen).

Darüber hinaus ist die Wahrscheinlichkeit groß, dass Ihr Remote-OpenVPN-Server als NAT-Box fungiert: Der gesamte vom VPN kommende Datenverkehr wird mit der öffentlichen IP-Adresse des Remote-OpenVPN-Servers NAT-zertifiziert. Wenn dies wahr ist , als die Dinge sind nicht mehr ... „nicht gut“, aber auf jeden Fall „schlecht“, wie für Ihren SSH - Verbindung: Rückholverkehr, zusätzlich entlang einer anderen Route zurück zu bekommen, wird immer wieder auf Ihre Maschine mit eine andere Quell-IP (die der öffentlichen Schnittstelle des VPN-Servers).

Wie kann man dieses Problem lösen?

Ganz leicht.

Weisen Sie Ihren VPS-Server einfach an, den Datenverkehr nicht über das VPN an Ihren Computer weiterzuleiten, sondern sich auf die vorherige Route zu verlassen . Es sollte so einfach wie das Hinzufügen sein, bevor Sie OpenVPN starten:

     route add -host 9.8.7.6 gw 4.3.2.254

wo:

  • 9.8.7.6 ist die öffentliche IP-Adresse Ihres Computers
  • 4.3.2.254 ist das ursprüngliche Standard-Gateway Ihres VPS.

PS: Wenn Sie eine viel ausführlichere Frage gestellt hätten, hätten Sie eine viel schnellere Antwort erhalten :-)


Danke für deine Antwort @DamianoVerzulli! Das Standard-Gateway ist nicht angegeben. route addBefehl mit solchen 0.0.0.0 gw gibt zurückSIOCADDRT: Invalid argument
mic22

Genau das [server] Peer Connection Initiated with [AF_INET]64.251.27.139:443; TUN/TAP device tun0 opened; do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0; /sbin/ip link set dev tun0 up mtu 1500; /sbin/ip addr add dev tun0 10.200.1.251/22 broadcast 10.200.3.255; ERROR: Linux route add command failed: external program exited with error status: 2
bekomme

@ mic22: Ich frage mich, wie def-gw deines VPS nicht spezifiziert werden kann, da in diesem Fall ein solches VPS nichts außerhalb des lokalen Subnetzes erreichen kann (und dies bedeutet, dass sowohl dein Computer eine Verbindung über SSH- als auch über OpenVpn-Server herstellen kann - VPN-fähig sein - sollte "lokal" und damit völlig nutzlos sein!). Übrigens: Wenn Sie über SSH verbunden sind, können Sie mit einem "netstat -rn" (Zeile beginnend mit 0.0.0.0, zweite Spalte)
Damiano Verzulli

netstat -rnDas Ergebnis ist, dass 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0das von mir verwendete VPS eine OVH-
Basisoption

ifconfigund netstat -rnAusgabe: goo.gl/TEZ61q
mic22

0

Dies kann helfen:

setzen Sie TCPKeepAlive=yesin Ihre/etc/ssh/sshd_config

Von

man sshd_config | less +/'^ *TCPKeepAlive'

TCPKeepAlive

Gibt an, ob das System TCP-Keepalive-Nachrichten an die andere Seite senden soll. Wenn sie gesendet werden, wird der Verbindungsabbruch oder der Absturz einer der Maschinen ordnungsgemäß bemerkt. Dies bedeutet jedoch, dass Verbindungen unterbrochen werden, wenn die Route vorübergehend unterbrochen wird, und einige Leute finden, dass dies ärgerlich ist. Wenn andererseits keine TCP-Keepalives gesendet werden, können Sitzungen auf unbestimmte Zeit auf dem Server hängen bleiben, was "Geister" -Benutzer zurücklässt und Serverressourcen verbraucht.

Der Standardwert ist " yes'' (to send TCP keepalive messages), and the server will notice if the network goes down or the client host crashes. This avoids infinitely hanging sessions. To disable TCP keepalive messages, the value should be set toNein".


Ich hatte bereits die TCPKeepAliveOption eingestellt, yesso dass das keine richtige Lösung ist
mic22

0

Ich hatte dieses Problem und habe alle empfohlenen Lösungen ausprobiert, und trotzdem wurde mein Problem nicht gelöst!

Nach vielen Lösungsversuchen habe ich den screenBefehl verwendet. (Mein VPN-Client ist Cisco-Any-Connect).

$ screen -R VPN
$ openconnect -b "your server"

Nachdem Sie Ihre Anmeldeinformationen eingegeben haben, drücken Sie sofort Strg + a + d und kehren Sie zu Ihrer Sitzung zurück.


0

Persönlich bevorzuge ich, dass alle Verbindungen zu SSH über VPN geleitet werden. Bei einer aktiven SSH-Verbindung vor dem VPN-Aufbau muss die Verbindung aufgrund der geänderten Route erneut hergestellt werden.

Ich empfehle, autossh unter Ihrer ssh-Client-Konfiguration einfach hinzuzufügen.ssh/config

Host *
   ServerAliveInterval 300
   ServerAliveCountMax 2
   BatchMode yes
  • BatchMode steht für Auto-Reconnect
  • ServerAlive steht für Keeping Alive

-1

Einmal nach dem Herstellen einer VPN-Verbindung wird ssh getrennt, da der ssh-Verkehr vom Server über den VPN-Server erfolgt. Um dies zu vermeiden, führen Sie den folgenden Befehl aus, bevor Sie eine VPN-Verbindung herstellen.

route add -host dein-Rechner-public-ip gw Server-gatway-ip dev eth0

your-machine-public-ip: IP-Adresse Ihres Computers, von dem aus Sie SSH ausführen. Server-gatway-ip: Die IP des Gatways / Routers dieses Servers

Der obige Befehl leitet den Datenverkehr über das angegebene Gateway um, nicht über den VPN-Server.


Das ist verwirrend und die Sprache scheint es rückwärts zu haben. Möchten Sie keine Route mit der IP-Adresse des SSH-Ziels und dem Standardgateway der lokalen Arbeitsstation hinzufügen?
Malayter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.