Wie kann eine Anwendung (wie Firefox) gezwungen werden, eine bestimmte Netzwerkschnittstelle zu verwenden?

20

Ich habe zwei Schnittstellen: eth0 und wlan0 auf einem Notebook.

Mögliche Anwendungsfälle:

  • eth0 gewährt mir einen Internetzugang und wlan0 ist derzeit mit einem Router verbunden, der keine Internetverbindung hat. Für Entwicklungszwecke muss ich standardmäßig eine Verbindung zum wlan0 herstellen, zum Surfen jedoch eth0 verwenden
  • eth0 und wlan0 sind beide mit dem Internet verbunden. Für eine Torrent-Anwendung sollte eth0 aus Gründen der Geschwindigkeit verwendet werden, für die Portabilität des Notebooks sollte SSH jedoch eine Verbindung über wlan0 haben
  • eth0 ist eine drahtgebundene Verbindung, wlan0 ist eine drahtlose Verbindung. Sinnvolle Daten sollten über eth0 übertragen werden, aber auch anderer Datenverkehr kann über wlan0 übertragen werden.

Gibt es eine Möglichkeit, Anwendungen (wie nc.traditionaloder firefox) zu zwingen , eine bestimmte Netzwerkschnittstelle zu verwenden? Ein Wrapper wie example-wrapper eth0 programist auch in Ordnung, wenn ein solches Programm existiert. Es wäre schön, wenn es in Firefox (zur Laufzeit) konfiguriert werden könnte. Ich möchte IPTables-Lösungen nach Möglichkeit vermeiden.

Lekensteyn
quelle
4
Dies ist auch hilfreich für mehrere Internetverbindungen, von denen eine Torrent ausführt und die andere zum Surfen verwendet wird.
iamgopal
Sie möchten verschiedene Routen verwenden, basierend auf dem Protokoll / der Anwendung. Dafür benötigen Sie iptables.
João Pinto
1
Ich weiß nicht, wie Sie dies ohne etwas tun können, das Ihren Layer7-Verkehr (Anwendungsverkehr) auf einen bestimmten Port abbildet oder auf andere Weise basierend auf Anwendungsinformationen auf höherer Ebene filtert (was eine Verkehrskontrolle erfordern würde). Obwohl iptables nicht unbedingt erforderlich ist, müsste jede Lösung, die einen Wrapper beinhaltet, auf irgendeine Weise mit der TCP- oder IP-Richtlinie interagieren. Ich weiß nicht, wie ich das ohne ein Layer2- oder Layer3-Netzwerk machen soll, das den Datenverkehr woanders hinleitet.
Belacqua

Antworten:

1

Was Sie suchen, ist eine LS_PRELOAD-Unterlegscheibe. Eine ausführliche Erklärung und einen Beispielcode finden Sie im Blogeintrag von Daniel Lange .

Bob Lebin
quelle
3
Willkommen bei Ask Ubuntu! Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Stormvirux
1

Sie können einen komplexeren Ansatz für die Verbindungsmarkierung und die Routenrichtlinie verwenden.
Es wird gut funktionieren, wenn Sie einen Benutzer haben, der eine Software und eine andere ausführt.
Auf diese Weise können Sie die Verbindungen eines Benutzers markieren und eine bestimmte Routing-Tabelle verwenden, während alle anderen Benutzer die Standard-Routing-Tabelle verwenden.
Das grundlegende Dokument, um alles zu verstehen, finden Sie unter: http://www.lartc.org/lartc.html Hier finden Sie
auch ein Beispiel für zwei Verbindungen: /unix/58635/iptables- set-mark-route-diferent-ports-through-different-interfaces
Sie können das iptables-Modul "owner" verwenden, das die Verbindungen markiert, um Routing-Richtlinien zuzulassen.

elico
quelle
Das Richtlinienrouting funktioniert für verschiedene Benutzer, jedoch nicht für eine Anwendung, die unter einem Benutzer ausgeführt wird (wie in OP beschrieben). LD_PRELOADscheint der Weg zu gehen (nicht für bösartige Programme / aus Sicherheitsgründen), könnte vielleicht jemand Bob Lebins Beitrag ausarbeiten?
Lekensteyn
0

Hier ist eine Musterlösung. Es verwendet den SOCKS-Server, der auf dem aktuellen Computer eingerichtet ist, um Verbindungen weiterzuleiten. Jede Anwendung sollte so konfiguriert sein, dass sie jeden Server verwendet.

Vadim Rutkovsky
quelle
3
Dies sieht aus wie ein HTTP-Proxy. Funktioniert es mit anderen Protokollen, wie einer Verbindung zwischen zwei Netcat-Instanzen?
Lekensteyn
0

Sie können auch einen VMware-Arbeitsplatzrechner verwenden, um verschiedene Netzwerkschnittstellen gemeinsam zu nutzen. Ich habe viel getan, um sie von einer Schnittstelle herunterzuladen und die andere für Netflix zu belassen.

Sie müssen sowohl ethX als auch wlanX auf VMware einrichten, aber sobald Sie es konfiguriert haben, können Sie es herunterladen oder durchsuchen.

Es ist ziemlich glatt. Sie können auch eine Firewall zum Verbinden von Schnittstellen verwenden, was ebenfalls hervorragend funktioniert.

übel
quelle
Es funktioniert zwar für diese bestimmte Anwendung, kann jedoch leider nicht mit anderen Anwendungen außerhalb der VM verwendet werden, z. B. Firefox.
Lekensteyn