Erzwingen Sie, dass eine Anwendung eine bestimmte Netzwerkschnittstelle verwendet


48

Ich verwende mehrere Netzwerkschnittstellen (LAN und Wireless) und habe festgestellt, dass es eine Möglichkeit gibt, die Reihenfolge der bevorzugten Schnittstellen zu ändern. Wie kann ich über das kabelgebundene Netzwerk arbeiten, E-Mails abrufen usw. (sicher) und über das kabellose VLAN auf andere Dinge zugreifen (ansonsten durch Ports und manchmal Websense blockiert)?

Antworten:


22

Der Trick besteht darin, die Routingtabellen anzupassen (dies hängt nicht vom Zielport oder der Quell-App ab, sondern vom Zielhost). Dies setzt voraus, dass Sie unter Linux oder OS X arbeiten (wie die Tags zeigen).

Angenommen, Ihr Standard-Gateway ist 1.2.3.4 und Sie haben einen VPN, der den Datenverkehr am 6.7.8.9 weiterleiten kann. Wenn Ihr E-Mail-Verkehr über 6.7.8.9 weitergeleitet werden soll, tun Sie dies einfach

sudo route add mail.myserver.com 6.7.8.9

Bei einigen Routenversionen ist möglicherweise ein Schlüsselwort "gw" zwischen der Adresse und dem nächsten Hop erforderlich. Wenn Sie eine vollständige Netzroute über diesen nächsten Hop erstellen möchten, fügen Sie einfach eine Netzmaske in CIDR-Notation für das Ziel hinzu, z

sudo route add 192.168.0.0/24 6.7.8.9

Wenn Sie die vorhandene Routingtabelle anzeigen möchten, verwenden Sie

netstat -nrl
or
ip route list

Wenn Sie unter Windows arbeiten, werden Sie mit "net route" den größten Teil des Weges dorthin zurücklegen. Die Syntax ist jedoch völlig anders.


17
Das ist nicht wirklich eine Antwort, oder? Die Frage ist, wie man eine App und keine Website erzwingt. Zum Beispiel, was ich wollte, dass Safari über VPN (ppp0) aber Firefox über en0 geht, unabhängig davon, auf welche Site zugegriffen wird? Das ist die Frage.
gman

2
@ gman: Nichts über diese Antwort ist spezifisch für Websites.
Leichtigkeit Rennen mit Monica

3
Das OP möchte die Netzwerkschnittstelle basierend auf dem Anwendungsprogramm auswählen. Diese Antwort zeigt, wie basierend auf dem Zielhost ausgewählt wird.
Bennett McElwee

Ich werde dies nicht ablehnen (es ist ein guter Rat für eine andere Frage), aber ich werde dies auch nicht ablehnen (aus Gründen, die von @gman und @ bennett-mcelwee angegeben wurden).
Ratskin

Per oben beantwortet dies nicht die Frage, wie eine bestimmte App an eine bestimmte Netzwerkkarte gesperrt werden kann.
Catchdave

6

Wenn Sie nur zwei Netzwerkkarten gleichzeitig aktiv haben möchten, können Sie die Servicereihenfolge in den Systemeinstellungen / im Netzwerk festlegen, indem Sie das Zahnrad unter der Liste der Netzwerkgeräte auswählen. Ziehen Sie die gewünschte Reihenfolge per Drag & Drop.

Zum Beispiel habe ich Ether und WiFi immer auf meinem MBP aktiviert, wobei Ether über Wi-Fi eingestellt ist. Da ich Ether bei der Arbeit verwende, richte ich diese Netzwerkkarte mit Proxy-Einstellungen und meinem WLAN ohne ein. Wenn ich nach Hause gehe, müssen keine Einstellungen vorgenommen werden. Sie können dies auch vom Terminal aus mit tun /usr/bin/networksetup -ordernetworkservices.

Aber da sowohl eine aktive als auch eine App die Nicht-Standardeinstellung verwenden, hatte ich Glück mit einem etwas einfacheren Dreh auf @ Andors Rat. Wenn eine App in meinem Fall Ether nicht verwenden soll, setze ich die Proxy-Einstellungen für die App auf die IP-Adresse meines WLAN-Adapters. Über diese Schnittstelle wird der Proxy- und Überwachungsserver des Unternehmens umgangen. Wenn Ether also eine Adresse von 1.2.3.4 hat und vor Wi-Fi (5.6.7.8) im Serviceauftrag steht, habe ich meinen App-Proxy auf 5.6.7.8.


5

Für Mac gibt es eine einfache Lösung, die ich verwende. Es ist eigentlich eine Implementierung von @ Andors Lösung. Installieren Sie einen Proxy und konfigurieren Sie Ihre Apps für die Verwendung:

  1. Ich habe SquidMan installiert

  2. Fügen Sie in der Konfiguration die folgende Zeile hinzu. Sie müssen die IP-Adresse angeben, die Sie für Ihre privaten Apps verwenden, anstatt x.x.x.x:

    tcp_outgoing_address x.x.x.x
    
  3. Starten Sie SquidMan und konfigurieren Sie Ihre App, um sie als Proxy zu verwenden.

Ich habe eine Stunde gebraucht, um diese Informationen auf verschiedenen Seiten zu finden, und hoffe, dass sie anderen dabei helfen, es schneller zu machen.


Sollte unter Windows genauso funktionieren und scheint die einzige elegante Lösung zu sein!
TJJ

1

Sie müssen wahrscheinlich die Low-Level-IO-Steuerungsfunktionen (ioctl) verwenden. Speziell:

ioctl( socket, SIOCGIFADDR, ... ); // Get network interface address

und

ioctl( socket, SIOCSIFADDR, ... ); // Set network interface address

Weitere Informationen finden Sie auf dieser Manpage .


1

Das Problem ist, dass Sie mehrere Gateways zu Ihrer Netzwerkverbindung haben werden, und das ist ein bisschen schwierig zu verwalten ...

Einige server- oder netzwerkbezogene Unix- und Linux-Tools haben normalerweise ein Flag namens "interface", mit dem Sie festlegen können, welche Schnittstelle Sie verwenden möchten, wie z. B. in tcpdump:

tcpdump -i eth0

Aber da ich denke, dass Sie nach dem Routing von Standard-Desktop-Software fragen, wird das etwas schwieriger ...

Ich kann Ihnen sowieso einen Trick nennen ... Meine übliche Lösung zur Behebung dieser Probleme ist die Verwendung eines Proxys und nur eines Gateways. Fast jede Software, die heutzutage das Internet nutzt, verfügt über Optionen zum Konfigurieren eines Proxys. Sie können dies also auf eine der folgenden Arten tun:

1. Richten Sie einen Proxy auf dem "ungesicherten" Teil Ihres Netzwerks ein (ich meine, wo die Richtlinien nicht durchgesetzt werden) und verweisen Sie Ihre Software auf diesen Proxy.

2.- Einrichten eines SSH-Servers an einem anderen "ungesicherten" Ort, z. B. zu Hause oder auf einem dedizierten Server im Internet, und Herstellen einer Verbindung über eine spezielle Funktion von SSH, mit der ein Socks-Proxyserver erstellt wird:

ssh -D 1234 user@host

Das würde auf Ihrem Computer einen Socken-Proxy-Server an Port "1234" erstellen, der sich mit Ihrem "Benutzer" mit Ihrem "Host" verbindet und über die Verbindung, die Ihr "Host" hat, ins Internet geht ... Dann Auf Ihrer lokalen Software müssen Sie nur die Proxy-Konfigurationstools öffnen und auf localhost: 1234 verweisen.

Nützliche Tricks zur Vermeidung von Unternehmensinternetrichtlinien: S

: D


1

Ich führe meine Geschäftsanwendungen in einer virtuellen Maschine aus. Ich habe die obigen Anweisungen verwendet, um WLAN als bevorzugte Verbindung festzulegen, und dann die virtuelle Maschine so konfiguriert, dass der Ethernet-Port als "Bridged" -Adapter verwendet wird.

Alles, was jetzt in der virtuellen Maschine ausgeführt wird, ist fest mit dem Ethernet-Port verbunden. WLAN ist meine bevorzugte Verbindung für alle anderen Anwendungen (außerhalb der virtuellen Maschine), sofern eine WLAN-Verbindung besteht.

Ich glaube, es gibt Dienstprogramme, mit denen die Bindung einer Anwendung an einen bestimmten Ethernet-Port erzwungen werden kann, die jedoch für MacOS nicht untersucht wurden.

Die zuvor erwähnte Routing-Methode ist für den "Laien" etwas komplex, scheint aber auch ein guter Ansatz zu sein, insbesondere wenn Sie wiederholt die gleiche IP-Adresse für Ihre Verbindungen erhalten.


0

Auch wenn diese Frage für OSX bestimmt ist, lasse ich das Folgende hier, das unter Windows 7 64-Bit funktioniert. Diese Frage stellte sich als eines der wichtigsten Ergebnisse beim Durchsuchen eines bestimmten Adapters für Force-Anwendungen heraus , sodass die folgenden Informationen für andere hilfreich sein können.

http://www.howtogeek.com/117890/how-to-force-an-application-to-use-a-specific-network-card/

In der obigen Anleitung wird ein Hilfsprogramm namens ForceBindIp verwendet, das Windows NT/2000/XP/2003 für die Arbeit mit Windows 7 - 64 Bit angekündigt ist, aber ich hatte keine Probleme, es für die Arbeit mit Windows 7 - 64 Bit bereitzustellen .

Auch Probleme mit ForceBindIP auf Windows 7 (x64)

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.