Befreien Sie Programme oder Domänen von der VPN-Verbindung

8

Wenn ich eine Verbindung zu einem VPN herstelle, wird der gesamte Netzwerkverkehr automatisch über dieses VPN geleitet. Gibt es eine Möglichkeit, Ausnahmen hinzuzufügen? Ich weiß nicht, ob das Hinzufügen von Ausnahmen etwas mit dem VPN-Protokoll zu tun hat, aber das von mir verwendete VPN ist das OpenVPN-Protokoll.

Apropos OpenVPN: Warum wird es bei Ubuntu-Installationen im Gegensatz zu PPTP nicht standardmäßig installiert?

Ich konnte die Liste der IRCHighWay-Server nicht abrufen. Dies ist das Ergebnis, bei dem ich versuche, eine Verbindung auf XChat herzustellen, indem das Bash-Skript ausgeführt wird:

* Looking up irc.irchighway.net
* Connecting to irc.irchighway.net (65.23.153.98) port 6667...
* Connected. Now logging in...
* You have been K-Lined.
* *** You are not welcome on this network.
* *** K-Lined for Open proxies are not allowed. (2011/02/26 01.21)
* *** Your IP is 173.0.14.9
* *** For assistance, please email [email protected] and include everything shown here.
* Closing Link: 0.0.0.0 (Open proxies are not allowed. (2011/02/26 01.21))
* Disconnected (Remote host closed socket).

Die IP 173.0.14.9 ist die aufgrund meines VPN. Ich hatte vergessen, ip route listvor dem Ausführen des Skripts zu überprüfen , und dies ist der nach dem Ausführen:

~$ ip route list
99.192.193.241 dev ppp0  proto kernel  scope link  src 173.0.14.9 
173.0.14.2 via 192.168.1.1 dev eth1  proto static 
173.0.14.2 via 192.168.1.1 dev eth1  src 192.168.1.3 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.3  metric 2 
169.254.0.0/16 dev eth1  scope link  metric 1000 
default dev ppp0  proto static

Oh, und das Ausführen des Skripts hat diese Ausgabe zurückgegeben:

~$ sudo bash irc_route.sh
Usage: inet_route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
       inet_route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]
                              [netmask N] [mss Mss] [window W] [irtt I]
                              [mod] [dyn] [reinstate] [[dev] If]
       inet_route [-vF] add {-host|-net} Target[/prefix] [metric M] reject
       inet_route [-FC] flush      NOT supported

Ich habe das Skript ausgeführt, nachdem ich eine Verbindung zum VPN hergestellt hatte.

Oxwivi
quelle
1
Der Befehl, der ausgeführt werden sollte, ist:route add -host irc.irchighway.net gw 192.168.1.1
Erik Johansson
Das Problem ist, dass Ihre Routing-Tabelle nicht wie erwartet aussah.
Erik Johansson
@Erik, das ist alles?!
Oxwivi
@Erik, ich meine, was ist mit dem Drehbuch und allem?
Oxwivi
@Erik, es hat funktioniert! Ich habe das Skript nicht ausgeführt oder irgendetwas, das nur diesen routeBefehl ausführt, war genug! Muss ich dies jedes Mal ausführen, wenn ich boote, oder ist dies dauerhaft? Die Adresse danach gwist nicht für jeden Computer gleich, oder? Kann es durch etwas ersetzt werden, das sich auf diese Adresse bezieht? Aktualisieren Sie Ihre Antwort, damit sie möglicherweise wissen, dass das Ausführen dieses Befehls und nicht des Skripts das Problem löst.
Oxwivi

Antworten:

6

Erstellen Sie eine Datei, irc_route.sh, die Folgendes enthält:

#!/bin/bash
# script to make connections to irc.irchighway.net go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*/\1/;t;d"|head -1)
route add -host irc.irchighway.net gw $GW $DEV

Ändern Sie DEV in die Schnittstelle, über die Sie Ihre Internetverbindung erhalten (möglicherweise wlan0, eth1, eth0, ppp0). Führen Sie dann das Skript mit aus sudo bash irc_route.sh. Sie können die Ergebnisse überprüfen, indem Sie ip route listvorher und nachher ausführen .

Die IP des Standard-Gateways für den Internetverkehr auf dem DEV-Gerät wird in der Variablen GW gespeichert, die dann verwendet wird, um den gesamten Datenverkehr über die Standard-GW zum irc.irchighway.net-Server anstatt über die OpenVPN-Verbindung zu leiten.

Damit dies für alle IRCHighWay-Server funktioniert, müssen Sie eine Liste aller Server abrufen.

server_list.txt:

 irc.irchighway.net
 caliburn.pa.us.irchighway.net

Skript:

#!/bin/bash
# script to make connections to irchighway go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*/\1/;t;d"|head -1)
cat server_list.txt| xargs -iSERVER route add -host SERVER gw $GW $DEV

Es gibt eine "einfachere" Lösung. Sie können Ports und Routen basierend darauf markieren. Siehe iproute2-Tutorial, aber das habe ich nicht verwendet. Und es gibt einige Probleme mit dieser Art von Routing, wenn Sie nicht wissen, was Sie tun.

Erik Johansson
quelle
Ist es nicht möglich, den IRC-Client mit den Servern umgehen zu lassen? Ich meine, wenn ich mich normal verbinde, kümmert es sich darum, zu welchem ​​Server eine Verbindung hergestellt werden soll.
Oxwivi
Wann führe ich das Skript aus? Vor oder nach der Aktivierung von VPN? Und das gleiche gilt für ip route list.
Oxwivi
Ich habe meine Frage mit dem Ergebnis des Ausprobierens Ihres Skripts aktualisiert.
Oxwivi
Ja, Sie können den IRC-Client mit den Servern befassen lassen
Erik Johansson
2

Sie können bestimmte Programme nicht daran hindern, Verbindungen über das VPN herzustellen. Wenn sie jedoch eine bestimmte Host- oder Portnummer erreichen möchten, ist dies möglich. Ich gehe im schlimmsten Fall davon aus, dass bestimmte Apps die Firewall umgehen sollen.

Dies sollte mithilfe von SELinux möglich sein, indem Netzwerkverbindungen von einem Programm aus gesperrt werden. Ich kenne keine guten Tools für diese Konfiguration und weiß auch nicht, wie ich sie im laufenden Betrieb ändern kann.

Ich denke, es gab einmal ein Modul in iptables, das beim Senden eines Programms übereinstimmen konnte, aber ich habe es eine Weile nicht gesehen.

Erik Johansson
quelle
Ich möchte einfach, dass mein IRC-Client eine direkte Verbindung verwendet, da das IRCHighWay-Netzwerk keine offenen Proxys zulässt.
Oxwivi