web-dev-qa-db-ja.com

2つのネットワークインターフェイスを同時に使用する

一部のプロトコルを許可しない一部のパブリックネットワークからのWi-Fiをよく使用します(トレントやIRC-次にIRCについてのみ説明します)など)。これらのプロトコルのいずれかを使用する場合、電話の3G接続を使用する必要があります(usb0インターフェイスを介して)。

Webナビゲーション用にWi-Fiへの接続を維持したい(したがって、従来のwlan0インターフェイスを使用)が、一部のソフトウェア(多くの場合、weechatのみ)には別のインターフェイス(ここではusb0)を使用します。 CLI IRCクライアント)。

したがって、2つの(リンクされた)質問があります:

  • すべてを台無しにすることなく、2つのインターフェイスに同時に接続する方法は?
  • インターフェイスを使用するように1つのソフトウェアを構成し、他のインターフェイスを使用するように別のソフトウェアを構成する方法は? weechatはCLIソフトウェアなので、特定の環境変数を宣言する必要があるかもしれません。しかし、Firefoxがusb0の代わりにwlan0を使用しないようにする方法は?
2
Shan-x

最も簡単な解決策は、2つの別々のルーティングテーブルを持つことです。それらの1つ(あなたの場合はwlan0)がデフォルトのものになりますが、巧妙なトリックを使用して、特定のアプリケーションにデフォルト以外のテーブルを使用させることができます。

まず、2つのテーブルを作成します(NAME1をわかりやすい名前に置き換え、IP1、DEV1などと同じものに置き換えます)。

echo 201 NAME2 >> /etc/iproute2/rt_tables

各ルーティングテーブルにゲートウェイを追加します(必要な場合)。

ip route add NET1 dev DEV1 src SRC1 table main
ip route add NET2 dev DEV2 src SRC2 table NAME2

次に、デフォルトルート:

ip route add default via IP1 table main
ip route add default via IP2 table NAME2

次に、送信元アドレスに基づいてルートテーブルを選択するためのルール:

ip rule add from IP1 table main
ip rule add from IP2 table NAME2

次に、weechatにIP2を使用させる必要があります。これを行うには、 新しいバインドモジュール をビルドします。そうすることは簡単です、リファレンスに簡単な指示があります。モジュールをコンパイルして/usr/libに配置したら、次のコマンドを発行します。

 BIND_ADDR=IP2 LD_PRELOAD=/usr/lib/bind.so weechat

これで完了です。これの利点は、スクリプトを簡単に作成でき、必要な数のアプリケーションで繰り返すことができることです。

2
MariusMatutiae

たとえば、2つのサブネットワークを定義する場合:

  • 192.168.1.x/255.255.255.0-wlan0
  • 192.168.2.x/255.255.255.0-usb0

wlan0に対してのみゲートウェイを定義すると、192.168.2.xに直接アドレス指定された以外のすべてのネットワークトラフィックはwlan0を通過します。

usb0インターフェースを介して、ネットワークトラフィックを特定のIPアドレスにルーティングできます。 Linuxのプロセスの特定のインターフェースを介してトラフィックをルーティングする もできます。

2
g2mk