Ich habe eine OpenVPN-Verbindung eingerichtet, möchte aber nicht den gesamten Datenverkehr darüber leiten.
Meine aktuelle Routingtabelle sieht folgendermaßen aus:
$ ip route
default via 192.168.88.1 dev enp7s0 proto dhcp metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
192.168.88.0/24 dev enp7s0 proto kernel scope link src 192.168.88.29 metric 100
Ziel ist die Umleitung des gesamten Datenverkehrs einesSpezifischProgramm durch tun0
, und das erste Kandidatenprogramm ist natürlich – ein Browser.
Habt ihr eine Idee, wie man das machen könnte?
ich weiss BescheidiptablesQuellrouting basierend auf PID, aber es würde erfordern, die iptables-Regeln jedes Mal neu zu erstellen, wenn ein neuer Prozess gestartet wird. Und da jeder Tab eines Browsers ein neuer Prozess ist ... kann ich mir ehrlich gesagt nicht vorstellen, wie das alles gemacht werden soll.
Der nächste Gedanke ist, einen lokalen Socks-Proxy zu verwenden und dann beispielsweise auszuführen google-chrome --proxy-server="socks5://127.0.0.1:1080"
.
Dies funktioniert gut mit SSH-Tunneln, die ssh
als SOCKS-Proxy fungieren können. Ich habe jedoch kein Proxy-Programm gefunden, das auf die gleiche Weise, aber ohne SSH-Tunnel funktioniert: d. h. die SOCKS-Schnittstelle freigibt und den gesamten Datenverkehr über weiterleitet tun0
. Können Sie etwas empfehlen?
Antwort1
Sie können iproute2 und die UID des Benutzers verwenden, der den Browser oder etwas anderes ausführt. Beispiel:
ip route add table 502 default dev tun0
lp rule add uidrange 1000-1002 table 502
Antwort2
Führen Sie die Programme, die Sie über das VPN leiten möchten, in einem neuen Netzwerk-Namespace mit dem Tunnel als Standard-Gateway aus.
Möglicherweise möchten Sie Ihren PC so neu konfigurieren, dass die Desktopdatei für den Browser (und jedes andere Programm, das das VPN verwenden soll) ein Skript ausführt, um das Verhalten zu steuern, und Ihrer OpenVPN-Konfiguration ein Skript hinzufügen, um den Namespace einzurichten.