特定のネットワークインターフェイスを使用するようにアプリケーションに強制する


48

複数のネットワークインターフェイス(LANおよびワイヤレス)を使用していますが、優先インターフェイスの順序を変更する方法があることに気付きました。有線ネットワークを使用して作業を行ったり、電子メールをチェックしたり(セキュリティで保護)したり、ワイヤレスVLANを使用して他のもの(ポートやWebsenseによってブロックされている場合もある)にアクセスするにはどうすればよいですか?

回答:


22

トリックは、ルーティングテーブルを調整することです(宛先ポートまたはソースアプリに依存しませんが、宛先ホストに依存します)。これは、LinuxまたはOS Xを使用していることを前提としています(タグが示すとおり)。

デフォルトゲートウェイが1.2.3.4であり、6.7.8.9でトラフィックをルーティングできるvpnがあるとします。メールトラフィックを6.7.8.9経由でルーティングする場合は、次のようにします。

sudo route add mail.myserver.com 6.7.8.9

ルートの一部のバージョンでは、アドレスとネクストホップの間に「gw」キーワードが必要になる場合があります。そのネクストホップを介してネット全体のルートを作成する場合は、次のように、宛先のCIDR表記でネットマスクを追加します。

sudo route add 192.168.0.0/24 6.7.8.9

既存のルーティングテーブルを表示する場合は、使用します

netstat -nrl
or
ip route list

Windowsを使用している場合、「net route」を使用するとほとんどの方法で移動できますが、構文はまったく異なります。


17
これは本当に答えではありませんか?問題は、ウェブサイトではなくアプリを強制する方法です。たとえば、SafariにVPN(ppp0)を介してアクセスさせ、Firefoxにはどのサイトにアクセスしているかに関係なくen0を介してアクセスさせたいと考えています。それが問題です。
gman

2
@gman:この答えはウェブサイト固有のものではありません。
モニカ

3
OPは、アプリケーションプログラムに基づいてネットワークインターフェイスを選択したいと考えています。この回答は、宛先ホストに基づいて選択する方法を示しています。
ベネットマケルウィー

私はこれに反対票を投じるつもりはありません(別の質問に対する良いアドバイスです)が、確かにこれにも賛成票を投じるつもりはありません(@gmanと@ bennett-mcelweeが述べた理由のため)。
ラットスキン

上記のとおり、これは特定のアプリを特定のNICにロックする方法の質問には答えません。
catchdave

6

2つのNICを同時にアクティブにする場合は、ネットワークデバイスのリストの下にあるギアを選択して、システム環境設定/ネットワークでサービスの順序を設定できます。目的の順序をドラッグアンドドロップします。

たとえば、MBPでEtherとWiFiが常にアクティブになっており、EtherがWi-Fiより上に設定されています。私は職場でEtherを使用しているため、プロキシ設定を使用してNICをセットアップし、Wi-Fiを使用せずにセットアップしました。家に帰るとき、設定を調整する必要はありません。を使用して端末からこれを行うこともでき/usr/bin/networksetup -ordernetworkservicesます。

しかし、アクティブなアプリとアプリの両方にデフォルト以外を使用させることで、@ Andorのアドバイスを少し簡単に試すことができました。アプリでEtherを使用しない場合は、アプリのプロキシ設定をwi-fiアダプターのIPアドレスに設定します。このインターフェイスを使用して、会社のプロキシサーバーと監視サーバーをバイパスします。そのため、Etherのアドレスが1.2.3.4で、サービスオーダーでWi-Fi(5.6.7.8)の前に来る場合、5.6.7.8へのアプリプロキシがあります。


5

Macの場合、私が使用する簡単なソリューションがあります。実際には、@ Andorのソリューションの実装です。プロキシをインストールし、それを使用するようにアプリを構成します。

  1. SquidManをインストールしました

  2. 構成に次の行を追加します。次の代わりに、プライベートアプリに使用するIPを指定する必要がありますx.x.x.x

    tcp_outgoing_address x.x.x.x
    
  3. SquidManを起動し、アプリをプロキシとして使用するように設定します。

さまざまなページでこの情報を見つけるのに1時間を費やしたので、他の人がより速くそれを行うのに役立つことを願っています。


Windowsでも同じように動作するはずで、唯一のエレガントなソリューションのようです!
TJJ

1

おそらく、低レベルIO制御関数(ioctl)を使用する必要があります。特に:

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

そして

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

詳細については、このmanページ参照してください。


1

問題は、ネットワーク接続へのゲートウェイが複数になることであり、管理が少し難しいことです...

一部のサーバーまたはネットワーク関連のUNIXおよびLinuxツールには、通常、「interface」と呼ばれるフラグがあり、tcpdumpのように、使用するインターフェイスを指定できます。次に例を示します。

tcpdump -i eth0

しかし、私はあなたが標準的なデスクトップソフトウェアのルーティングについて尋ねていると思うので、それはもう少し難しくなります...

とにかくそのためのトリックをお伝えできます...その問題に対処するための私の通常の修正は、プロキシを使用し、ゲートウェイを1つだけにすることです。現在インターネットを使用するほとんどすべてのソフトウェアには、プロキシを構成するためのオプションがあるため、次のいずれかの方法でプロキシを構成できます。

1.-ネットワークの「セキュリティで保護されていない」(つまり、ポリシーが適用されていない)部分にプロキシを設定し、ソフトウェアをそのプロキシに向けます。

2.-別の「セキュリティで保護されていない」場所、たとえば自宅、またはインターネット上にある専用サーバーにSSHサーバーを設定し、SSHが持つ特別な機能を介して接続を開いてソックスプロキシサーバーを作成します。

ssh -D 1234 user@host

それはあなたのコンピューター上でポート "1234"にソックスプロキシサーバーを作成し、 "ユーザー"を使用して "ホスト"に接続し、 "ホスト"が持っている接続を介してインターネットに接続します。ローカルソフトウェアでは、プロキシ構成ツールを開くだけで、localhost:1234をポイントできます。

企業のインターネットポリシーを回避するための便利なコツ:P

:D


1

仮想マシン内でビジネスアプリケーションを実行しています。上記の手順を使用してWiFiを優先接続として設定し、イーサネットポートを「ブリッジ」アダプターとして使用するように仮想マシンを構成しました。

仮想マシン内で実行されるものはすべて、イーサネットポートにハードリンクされています。WiFi接続が接続されている限り、WiFiは他のすべてのアプリケーション(仮想マシン外)の優先接続です。

特定のイーサネットポートへのアプリケーションのバインドを強制するために使用できるユーティリティは存在すると思いますが、MacOSについては調査していません。

前述のルーティング方法は、「一般の人」にとってはやや複雑ですが、特に接続で同じIPアドレスを繰り返し取得する場合は、実行可能な適切なアプローチのようです。


0

この質問はOSX向けですが、Windows 7 64ビットで動作する次のものをここに残します。この質問は、強制アプリケーションが特定のアダプターを通過するようにグーグルで検索した場合の上位の結果の1つとして浮上したので、他の人にとっては以下が役に立つかもしれません。

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

上記のガイドでは、ForceBindIpというユーティリティを使用しています。このユーティリティは、動作するようにアドバタイズされWindows NT/2000/XP/2003 ていますが、Windows 7-64ビットで動作するように問題はありませんでした。

また、Windows 7(x64)でのForceBindIPの問題

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.