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?
14
--route-noexec
Option 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 ...Antworten:
Sie müssen der Konfigurationsdatei Ihres OpenVPN-Clients auf Ihrem VPS eine
route-nopull
Option hinzufügen (und entfernen,redirect-gateway
falls 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.
quelle
inet addr:10.56.10.6 P-t-P:10.56.10.5 Mask:255.255.255.255
Betrachten wir folgendes Szenario:
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:
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:
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:
wo:
PS: Wenn Sie eine viel ausführlichere Frage gestellt hätten, hätten Sie eine viel schnellere Antwort erhalten :-)
quelle
route add
Befehl mit solchen 0.0.0.0 gw gibt zurückSIOCADDRT: Invalid argument
[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
netstat -rn
Das Ergebnis ist, dass0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0
das von mir verwendete VPS eine OVH-ifconfig
undnetstat -rn
Ausgabe: goo.gl/TEZ61qDies kann helfen:
setzen Sie
TCPKeepAlive=yes
in Ihre/etc/ssh/sshd_config
Von
quelle
TCPKeepAlive
Option eingestellt,yes
so dass das keine richtige Lösung istIch 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
screen
Befehl verwendet. (Mein VPN-Client ist Cisco-Any-Connect).Nachdem Sie Ihre Anmeldeinformationen eingegeben haben, drücken Sie sofort Strg + a + d und kehren Sie zu Ihrer Sitzung zurück.
quelle
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
quelle
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.
quelle