In meinem Setup muss ich zuerst eine Verbindung zu einem VPN herstellen und dann per SSH auf einen Server zugreifen.
Momentan mache ich es so:
openvpn myconfig.ovpn
ssh myuser@myserver
wodurch mein gesamter Netzwerkverkehr über dieses VPN läuft.
IchnichtIch möchte, dass mein gesamter Datenverkehr über dieses VPN läuft. Welche Tools verwende ich unter GNU/Linux, um ein VPN nur in einer bestimmten SSH-Verbindung zu verwenden?
Das heißt, welche Tools kann ich in einem Bash-Skript verwenden, um Folgendes tun zu können:
ssh-over-vpn.sh myuser.ovpn [email protected]
und die VPN-Konfiguration nur für die SSH-Verbindung zu verwenden[email geschützt]?
Meine aktuelle myuser.ovpn-Konfigurationsdatei enthält:
client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 200.200.200.18 443
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-GCM
setenv opt block-outside-dns
key-direction 1
verb 3
<ca> ... </ca> <cert> ...<key> ...<tls-auth> ...
Antwort1
Ich möchte jedoch nicht, dass mein gesamter Datenverkehr über dieses VPN läuft. Welche Tools verwende ich unter GNU/Linux, um ein VPN nur in einer bestimmten SSH-Verbindung zu verwenden?
Ändern Sie Ihre OpenVPN-Clientkonfiguration innichtRufen Sie die „Standardroute“ vom Server ab. Geben Sie stattdessen nur die benötigten Routen an:
route-nopull
route 10.0.0.66 255.255.255.255 vpn_gateway
Das heißt, welche Tools kann ich in einem Bash-Skript verwenden, um Folgendes tun zu können:
Es gibt nicht viel Auswahl. Ähnliche Tools sind für SOCKS-Proxys relativ einfach (z. B. torify), da die Transportschichttunnel direkt auf die Sockets abgebildet werden, die das umschlossene Programm erstellt – es wirdein bisschenschwieriger mit IP-Layer-Tunneln (VPNs), da das Wrapping-Tool dann neben der Neuimplementierung des eigentlichen OpenVPN-Protokolls auch den Großteil des Netzwerk-Stacks des Betriebssystems neu implementieren müsste (Generieren von IP-Paketen, Zuordnen empfangener Pakete zu den emulierten Sockets usw.).
Das Nächstliegende, was Sie verwenden könnten, istNetzwerk-Namespaces(einer der Bausteine für Container), die dem Programm einen vollständig isolierten Satz von Schnittstellen und Routingtabellen geben. Es ist einfach, mit unshare
oder einen Netzwerk-Namespace zu erstellen ip netns
und Programme darin auszuführen, aber standardmäßig sind sie getrennt (der OpenVPN-Client hätte keinen Zugriff auf den Server), sodass Sie ihn auch mit veth usw. mit dem „Haupt“-Namespace verknüpfen müssen.
Die gesamte Namespace-Einrichtung führt letztendlich dazu, dass Teile von Docker/nspawn/usw. neu implementiert werden. Daher ist es möglicherweise möglich, einfach einen Docker-Container hochzufahren, der Ihren OpenVPN-Client und den SSH-Client ausführt.
Antwort2
VPNs sind sich also grundsätzlich nichts über die dritte Schicht desOSI-Modell, was bedeutet, dass sie nicht sehen können, welche Ports oder Protokolle verwendet werden. Es ist vielleicht möglich, mit etwas Firewall-Magie den gewünschten Effekt zu erzielen, aber ich würde empfehlen, direkt SSH zu verwenden.
Ich gehe davon aus, dass alle beteiligten Systeme und Netzwerke Ihnen gehören und von Ihnen verwaltet werden. SSH ist bei richtiger Konfiguration ein sehr sicheres Protokoll und sollte im Internet genauso sicher zu verwenden sein wie OpenVPN. Es gibt einige großartigeAnleitungenEs gibt viele Möglichkeiten, OpenSSH zu „härten“. Ein paar weitere Empfehlungen zur Sicherheit:
- Ändern Sie den Server-Port in einen unbekannten Wert.Dies macht es zwar nicht per se „sicherer“, verringert aber die Anzahl der Web Scraping Bots, die Protokolle mit fehlgeschlagenen Anmeldeversuchen überfluten. Ich habe dies vor ein paar Jahren getan und seitdem keinen einzigen Versuch mehr gesehen.
- Schauen Sie sich fail2ban an.Dies ist eine praktische Software, die Anmeldeversuche überwacht und IP-Adressen nach einer Reihe von Fehlschlägen den Zugriff auf Ihren Server „verbietet“, indem sie eine Firewall-Regel in iptables hinzufügt. Es ist fantastisch.
Sobald Sie dies getan haben, können Sie die ProxyJump-Konfigurationsoption in OpenSSH verwenden, um diese Verbindung als Tunnel für andere Verbindungen im LAN zu verwenden.
Hoffe das hilft!