選択したアプリケーションにのみVPN接続を使用する


39

VPNにアクセスできますが、VPNをすべてではなく一部のアプリケーションにのみ使用したいです。

例:
VPNに接続する場合、アプリケーションOperaとNewsbinのみがそのVPN接続を使用するようにします。fe Outlookなどの他のすべてのアプリケーションは、通常のインターネット接続を使用する必要があります(VPNが接続されている/開いている間)。

これは不可能ですが、完全にはわかりません。したがって、私の質問:それは実行可能ですか?


回答:


-1

いいえ、そうではありません。まあ通常の手段を使用していません。ルーティングはルーティングです。ルーティングは、OSIモデルの下位で動作します。発生する必要があるのは、アプリケーションレベル(上位)で認識し、使用しているプログラムなどを検出できるようにすることです。通常のルーターでは、アプリケーションまたはポート番号に基づいてルートを構成することはできません。

可能だと思います。ルーターはポートを見ることができるため、ポート番号でフィルタリングして、異なるルートにトラフィックを送信できます。これを行うことができるCiscoルーターを使用して、少し前に何かを読んでいると確信しています。それらは安くはありませんが、多くの設定が必要なビジネスルーターであり、家庭用にシンプルなものが欲しいと思います。

要約すると、この機能を必要とするのはルーターであり、自宅での使用には沼地の標準的なものであり、ビジネスでもこれらの機能をサポートしていません。これらの機能を提供するのは、CiscoおよびSonicwallの高度なラインのみです。


36

少なくともLinuxでこれを実現することは可能です(そして、BSDとOS Xでも考えています)。あなたはそうすることができます:

  • すべてのVPNトラフィックに対してexraユーザーを作成します。
  • VPN経由のデフォルトルートが1つある追加のルーティングテーブルを作成します。
  • 特定のユーザーIDから発信されるすべてのトラフィックに他のルーティングテーブルを使用するように、Iptablesを介してNetfilterを構成します。
  • 自分のユーザーでVPNを使用するアプリケーションを実行します。たとえば、「sudo」の場合。

上記の手順を実行するためのスクリプトがここにあるか、別のガイドがここにあります

これは、VPNを介した転送のルーティングに関する詳細なガイドです(所有するVPNサーバーを使用)


Linuxでははるかに簡単:ネットワーク名前空間を作成し、VPNをその名前空間に接続し、VPNで名前空間を使用するアプリケーションを実行します。同じアプリケーションの2つのコピーを実行することもできます。1つはVPNを使用し、もう1つは直接接続を使用します。
Dirkt

15

Windowsファイアウォールを使用してこれを実現できます(Win 7またはVistaを使用している場合)- これに関するガイドを作成しました

  1. 通常どおりVPNに接続します。

  2. ネットワークと共有センターを開きます-タスクバーのインターネット接続アイコンを右クリックして、「ネットワークと共有センターを開く」を選択します(以下を参照)

  3. (少なくとも)「アクティブなネットワークの表示」の下に2つのネットワークが表示されます-VPN接続と「ネットワーク」と呼ばれる1つ-別名ISP接続。VPNが「パブリックネットワーク」であり、ISP接続が「ホームネットワーク」であることを確認してください。いずれかの接続を変更する必要がある場合は、それをクリックすると、オプションウィンドウが表示されます(以下を参照)。

  4. コントロールパネルに移動し、[システムとセキュリティ]をクリックします(以下を参照)。

  5. 結果のウィンドウで、[Windowsファイアウォール]をクリックします(以下を参照)。

  6. [Windowsファイアウォール]ウィンドウで、左ペインの[詳細設定]をクリックします(以下を参照)。注:ファイアウォール設定を変更するには、管理者としてログインする必要があります。

  7. セキュリティが強化されたWindowsファイアウォールというタイトルのウィンドウが表示されます。このウィンドウで、[受信の規則]をクリックします(以下を参照)。

  8. 右側のペインに、新しいルールのオプションが表示されます。クリックします(以下を参照)。

  9. 新しい着信規則ウィザード(表示されるはずです)で、次の手順を実行します。

    • [プログラム]を選択し、[次へ]をクリックします。

    • VPN接続を除くすべてのトラフィックをブロックするプログラムを選択し、[次へ]をクリックします。

    • [接続をブロック]を選択します。

    • ドメインとプライベートにチェックマークを付けます。Publicにチェックマークが付いていないことを確認してください。

  10. 送信規則について手順9を繰り返します。


11
これは実際に質問に答えますか?はい、VPNにない場合はアプリの動作を停止しますが、すべてのトラフィックはまだVPNを通過しますか?
ジェイソンコイン

3
@prambleでは、すべてのトラフィックはまだvpnを通過しますか?
nsij22

動作するように見えます。ただ、それをテスト...
ファイズ

これでは修正されません。これは非常に単純なシナリオです。仕事関連のものはすべてVPN(SQL Server接続、Slackなど)を経由しますが、Webブラウザー(Facebook、Soundcloudなど、基本的にすべてのポート80のトラフィック)はVPNを経由しないようにします。これが不可能な場合は、Windowsを使用します。
トリインコ

@Triynkoあなたのシナリオは、OPが要求したシナリオとは大きく異なります。VPNに接続した後、仕事関連のものに対応するルートを設定するだけです。つまり、仕事関連のすべてのサブネットまたはIPにVPNゲートウェイを使用します。特定のアプリケーションから発信されたトラフィックをルーティングすることは、達成がより困難です。
スピーカー

4

GNU / Linuxのネットワーク名前空間を使用して実行できます。

OpenVPNと単一のアプリケーションを別の名前空間で実行する方法は次のとおりです。

ネットネットワーク名前空間を作成します。

ip netns add myvpn

名前空間でループバックインターフェイスを開始します(そうしないと、多くのことが期待どおりに機能しません…)

ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up

OpenVPN(ネームスペース内)が実際のネットワークにアクセスできるようにする仮想ネットワークインターフェースを作成し、ネームスペース(vpn1)内のインターフェースをデフォルトゲートウェイとしてネームスペース(vpn0)から使用するように構成します

ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1

名前空間内のインターフェイスのIPv4ルーティングとNATを有効にします。私のデフォルトのインターフェースは無線インターフェースなので、発信インターフェースのiptablesでwl +(wlan0、wlp3s0などに一致する場合があります)を使用します。有線インターフェイスを使用する場合は、おそらくen +(またはブリッジインターフェイスの場合はbr +)を使用する必要があります。

iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1

名前空間内で使用するネームサーバーを構成する

mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf

ほぼ完了し、名前空間で完全なネットワークアクセスができるようになりました

ip netns exec myvpn ping www.google.com

最後に名前空間でOpenVPNを起動します

ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf

tun0がネームスペースで起動すると、必要なプログラムを起動する準備ができました!

while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime

ソース記事。

また、ソース記事にラッパースクリプトがあり、ニーズに合わせて調整できます。


3

Windowsでこれを実行しました。目的は、発信ネットワークパッケージをVPNのインターフェイスにバインドすることです。人々はこのためにForceBindIPを提案しますが、この答えのおかげで、プロキシを使用するアイデアを思いつきました。この方法の欠点は、アプリでプロキシをサポートする必要があるか、プロキシを使用する必要があることです(こちらこちらをご覧ください)。利点は、この方法で、FoxyProxyまたは同様のアドオンを使用して、ブラウザーでのVPNの使用を特定のドメインに制限できることです。

SOCKSモードで3proxyを使用し、その外部インターフェイスをVPNのIPにバインドします。OpenVPNはVPN接続に使用されます。

.ovpnファイル(clientdev tun)に次の行を追加しました。

route-nopull
route 0.0.0.0 0.0.0.0 vpn_gateway
pull-filter ignore "dhcp-option DNS "
script-security 2
up 'c:\path\to\up.cmd'
down 'c:\path\to\down.cmd'

route-nopullサーバーからプッシュされたルートを無視します。あなたの場合、代わりにredirect-gatewayをコメントアウトする必要があるかもしれません。

route このインターフェイスのルートを追加するには、この行がないと、アプリがバインドされていても使用されません。

pull-filterプッシュされたDNS route-nopullは、プッシュされたルートとともにドロップされます。このオプションはOpenVPN 2.4以降でサポートされていますが、OpenVPN 2.3(Windows XPの最新リリース)に固執する必要がある場合は、dhcp-option DNS x.x.x.x代わりにハードコードされたIPを含む2 行を追加する必要があります。

script-security 2 スクリプトを許可します。

up スクリプト:

cd %~dp0
echo auth none> 3proxy-openvpn.conf
echo internal 127.0.0.1>> 3proxy-openvpn.conf
echo external %4>> 3proxy-openvpn.conf
echo socks>> 3proxy-openvpn.conf
start /b 3proxy.exe 3proxy-openvpn.conf

down スクリプト:

taskkill /f /im 3proxy.exe

したがって、この構成を使用してVPNに接続すると、3proxy.exeプロセスが開始され、DNS解決機能を備えたローカルホスト限定のSOCKS5プロキシが1080ポートで実行されますlocalhost:1080。SOCKSプロキシを使用するようにアプリを構成するだけです。


私は取得Options error: option 'route' cannot be used in this context ([PUSH-OPTIONS])していOptions error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS])ます。それでもなお、このソリューションは機能します。上下スクリプトのアポストロフィをスキップする場合は、二重バックスラッシュを使用しますc:\\path\\to\\script
。– chx

1

Linuxを使用していて、openVPNを使用している場合、VPNShiftは美しく機能します。


複数の質問に同じ回答を投稿しないでください。同じ情報が本当に両方の質問に答える場合、1つの質問(通常は新しい質問)をもう1つの質問の複製として閉じる必要があります。重複として閉じるように投票することでこれを示すことができます。そのための評判が十分でない場合は、重複であることを示すためにフラグ立てます。それ以外の場合は、この質問に対する回答を調整し、同じ回答を複数の場所に貼り付けないでください。
DavidPostill

4
「複数の質問に対する同じ答え」という事実はとても重要ですか?質問は存在しますが、(まだ)重複としてフラグが付けられておらず、良い答えなので、存在するに値します。ありがとう@thouliha🙂。
ローナンジュシェ

0

仮想マシンを介してVPNにアクセスするだけです。

  1. VMを作成し、VM内から...
  2. 「選択した」アプリケーションをインストールする
  3. VPNを構成する

ホストマシンから使用するのではなく、VMから選択したアプリケーションを使用します。

PSもちろん、ホストマシンを介してVMへのネットワークアクセスを許可する必要があります。


これは、すでに他の回答で詳細に説明されているアプローチに言及しています。
fixer1234

1
@ fixer1234:誰も仮想マシンについて言及していません。
ドロワ

あなたの答えをより実用的なものに拡張できますか(方法を説明してください)?詳細レベルのアイデアについては、スレッドの他の回答を参照してください。追求する方向のヒントを提供するだけで、コメントが追加され、もう少し担当者が必要になります。
fixer1234

最初にコメントを試しましたが、システムは50ポイント未満であるためシステムを許可しませんでした。その答えを拡大してみます。
ドロワ

これは私が思いついたアイデアであり、sysadmin側で複雑なルーティング構成を行わなくても問題なく機能します。
8:26

0

これは私がちょうど出くわした遅れた返信であることがわかっていますが、誰かに関係がある場合は、VPNを介して仕事用トラフィックを実行したいが、自分のトラフィックを彼らにルーティングさせたくないという同じ状況がありましたプロキシサーバーなど。そのため、私は当時Win7を実行していましたが、彼らはまだ多くのシステムでWinXPを実行していました。最終的に彼らは私に問題を解決する仕事のために実行する2番目のPCを与えました(両方のPCにフックされたスイッチボックスが前後にジャンプするだけでした)が、これの前に私は私の仕事OSとして設定した仮想XPを実行しました。上記のVMからVPNに接続して仕事に接続すると、個人のOSトラフィックが仕事の制限やスパイから解放されます。

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