1台のマシンに複数のネットワークインターフェイスがあります。ネットワークインターフェイスをアプリケーションにバインドするにはどうすればよいのでしょうか。
例:ネットワークインターフェイス:eth0、eth1
アプリケーションAはdummy0を使用しますアプリケーションBはdummy1を使用します
このようなインターフェイスにアプリケーションをバインドすることは可能ですか?
ユースケース:2つのインターネット接続を備えた1台のマシン。 eth0->インターネット接続0 eth1->インターネット接続1
アプリケーションは事前定義されたインターフェースを使用しますFirefox-> eth0->インターネット接続0 Chrome-> eth1->インターネット接続1
OS:CentOS 5.932ビット
アプリケーションに特定のアダプターを選択することは、アプリケーション固有の設定です。特定のアプリケーションでこれがどのように行われるかを決定する必要があります。システムレベルでは実行できません。
Windows
ただし、グローバルシステムレベルでアダプタの優先度を調整できます。 [ネットワーク接続の詳細プロパティ]ページで上下の矢印を使用します。
http://levynewsnetwork.wordpress.com/2011/12/01/windows-7-default-internet-connection-choice/
Linux
Linuxでは、プロセスはそれほど単純ではありません。 metric
を使用して、一方のアダプタがもう一方のアダプタよりも離れていることをLinuxに通知する必要があります。
Linuxでアダプターに優先順位を付けるには、routeコマンドを使用して、目的のメトリックでルートを追加し、古いエントリを削除する必要があります。例えば:
Sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1
Sudo route del -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 0
両方のOSで、これが実行されると、すべてのアプリケーションで同じ順序が使用されます。
簡単な解決策があります-DanielRydeは、この目的のために、バインドの動作を変更するLD_PRELOAD "shim"ライブラリ( bind.c )を作成しました。このチュートリアルをチェックしてください:
https://www.x4b.net/kb/BindProcessToIPonLinux
アプリケーションのデフォルトのバインドアドレスが事実上存在することを考えると(ルーティングテーブルを参照)、私の考えではsuperbly通常は標準的な方法がない( 「配布パッケージコード」のように)そのデフォルトのインターフェースをオーバーライドするには、yes;特定のアプリケーションセットについて、システムレベルで。
一部のプログラムには、選択したインターフェイスをリッスンするコマンドラインオプションがありますが、これはすべて問題なく動作します。
私のデフォルトルートはVPNプロキシを経由します(確かにかなり一般的なシナリオです)。発信接続の適切なデフォルトであるこのトンネルは、インターネットからの着信接続を十分にサポートしていません。したがって、サーバー指向のプログラムA、B、およびCを他のIP(メインISPが提供するアドレス)にバインドするように強制する必要があります。そして、クライアント指向のプログラムD、私はさまざまな理由でパブリックインターフェイスを使用したいと思います。
上記のライブラリは、この目的のためにうまく機能します!
解決策は次のとおりです。
または:
LISTEN_TO = $ THIS_INTERFACEコマンド; #<-それはそのように単純でなければなりません。
実際、質問の主題は少し不正確です。アプリケーションをインターフェースにバインドすることは、サーバーとして機能するアプリケーションに適用されます。
この場合、正しい用語は「特定のアプリケーションのトラフィックを特定の方法でルーティングする」です。 Linuxでは、これはポリシールーティングで実現できます。
秘訣は、一方が他方のブラウザを別のユーザーとして起動し、ポリシールーティングルールがそのユーザーからのすべてのパケットにもう一方のデフォルトゲートウェイを使用させることです。
http://blog.sebastien.raveau.name/2009/04/per-process-routing.html には完全な説明があります。
アプリケーションは特定のIPアドレスにバインドできますが、アプリケーション固有です。特定の例では、ChromeとFirefoxの両方がHTTPプロキシをサポートしています。
次のような構成でSquidを使用して、特定のNICを使用させることができます。
acl browser1 localip 127.0.0.2
acl browser2 localip 127.0.0.3
tcp_outgoing_address 192.168.1.99 browser1
tcp_outgoing_address 197.6.0.1 browser2
これで、Firefoxは127.0.0.2でプロキシに接続するように構成され、192.168.1.99はNIC発信TCP=要求の実行に使用されます。
Chromeは、プロキシとして127.0.0.3を使用するように構成され、送信アドレスとして197.6.0.1を使用します。
Linuxでは、アプリケーションを特定のインターフェイスにバインドするためのいくつかのソリューションがあり、それぞれに長所と短所があります nix stackexchange answer 利用可能な可能性のほとんどを詳細に説明します
Kroweがすでに言ったように、それはアプリケーション固有です。アプリケーションが特定のインターフェース/ IPへのバインディングをサポートしていない場合は、iptables(Linux)またはipfilter(* BSD)を使用できます。
Ubuntu-Wikiにはiptablesのかなり良い紹介があります: https://help.ubuntu.com/community/IptablesHowTo