Ich habe mehrere Netzwerkschnittstellen auf einem einzigen Computer. Ich frage mich, wie ich eine Netzwerkschnittstelle an eine Anwendung binden kann.
Beispiel: Netzwerkschnittstellen: eth0, eth1
Anwendung A benutze Dummy0 Anwendung B benutze Dummy1
Ist es möglich, eine Anwendung an eine solche Schnittstelle zu binden?
Anwendungsfall: 1 Maschine mit 2 Internetverbindungen; eth0 -> Internetverbindung 0 eth1 -> Internetverbindung 1
Anwendung verwenden eine vordefinierte Schnittstelle Firefox -> eth0 -> Internetverbindung 0 Chrome -> eth1 -> Internetverbindung 1
Betriebssystem: CentOS 5.9 32bit
quelle
eth0
undeth1
so vermute ich, dass er nicht Windows verwendet.Es gibt eine einfache Lösung: Daniel Ryde hat zu diesem Zweck eine LD_PRELOAD "shim" -Bibliothek ( bind.c ) geschrieben, die das Bindungsverhalten ändert. Schauen Sie sich dieses Tutorial an:
https://www.x4b.net/kb/BindProcessToIPonLinux
Angesichts der Tatsache, dass es effektiv eine Standardbindungsadresse für Anwendungen gibt (siehe Ihre Routing-Tabelle), ist es meiner Meinung nach äußerst seltsam, dass es normalerweise keine Standardmethode (wie im "Distributionspaketcode") gibt, um diese Standardschnittstelle zu überschreiben, ja; auf Systemebene für einen bestimmten Satz von Anwendungen.
Einige Programme verfügen über Befehlszeilenoptionen, um die Benutzeroberfläche Ihrer Wahl anzuhören, was alles in Ordnung und gut ist.
Meine Standardroute führt über einen VPN-Proxy (sicherlich ein ziemlich häufiges Szenario). Dieser Tunnel ist eine gute Standardeinstellung für ausgehende Verbindungen und unterstützt eingehende Verbindungen aus dem Internet nicht sehr gut. Daher muss ich die serverorientierten Programme A, B und C zwingen, sich an eine andere IP-Adresse zu binden (vom Haupt-ISP bereitgestellte Adresse). Und kundenorientiertes Programm D, ich möchte meine öffentliche Schnittstelle aus verschiedenen Gründen verwenden.
Die obige Bibliothek funktioniert zu diesem Zweck gut!
Eine Lösung ist:
Alternative:
LISTEN_TO = $ THIS_INTERFACE Befehl; # <- So einfach sollte es sein.
quelle
Eigentlich ist das Thema der Frage etwas ungenau. Das Binden einer Anwendung an eine Schnittstelle gilt für eine Anwendung, die als Server fungiert.
In diesem Fall lautet der korrekte Begriff "Weiterleiten des Datenverkehrs für eine bestimmte Anwendung auf eine bestimmte Weise". Unter Linux kann dies mit Richtlinienrouting erreicht werden.
Der Trick besteht darin, dass einer den anderen Browser als einen anderen Benutzer startet und die Richtlinien-Routing-Regeln dann alle Pakete dieses Benutzers dazu bringen, das andere Standard-Gateway zu verwenden.
http://blog.sebastien.raveau.name/2009/04/per-process-routing.html enthält eine vollständige Beschreibung.
quelle
Wie Krowe bereits sagte, ist es anwendungsspezifisch. Wenn Ihre Anwendung die Bindung an eine bestimmte Schnittstelle / IP nicht unterstützt, können Sie iptables (Linux) oder ipfilter (* BSD) verwenden.
Das Ubuntu-Wiki bietet eine nette Einführung in iptables: https://help.ubuntu.com/community/IptablesHowTo
quelle
Während Anwendungen an bestimmte IP-Adressen gebunden werden können, ist dies anwendungsspezifisch. In Ihrem speziellen Beispiel unterstützen sowohl Chrome als auch Firefox HTTP-Proxys.
Sie können Squid mit einer Konfiguration wie der folgenden verwenden, damit sie eine bestimmte Netzwerkkarte verwenden.
Jetzt würde Firefox so konfiguriert, dass unter 127.0.0.2 eine Verbindung zum Proxy hergestellt wird, der 192.168.1.99 als Netzwerkkarte für die Ausführung ausgehender TCP-Anforderungen verwendet.
Chrome wäre so konfiguriert, dass 127.0.0.3 als Proxy verwendet wird, wobei 197.6.0.1 als ausgehende Adresse verwendet wird.
quelle
Lösung
Unter Linux gibt es mehrere Lösungen, um eine Anwendung an eine bestimmte Schnittstelle zu binden. Jede hat ihre Vor- und Nachteile. Diese Unix-Stackexchange-Antwort erklärt die meisten verfügbaren Möglichkeiten mit Details
quelle