Windows 10 デスクトップで (OpenVPN を使用して) VPN を実行しており、VPN がデフォルト ゲートウェイであるため、デフォルトですべてのトラフィックが VPN トンネルを通過します。
ただし、特定のアプリを VPN から除外したいので、それらのトラフィックは代わりに VPN を通過して物理インターフェイスから直接送信されます (いわゆる「スプリット トンネリング」)。
このソリューションには、WFP (Windows Filtering Platform) API、およびおそらく Windows に相当する API が含まれると思います。
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, device, sizeof(device))
これは現在、「cgroups」とポリシーベースのルーティング/複数のルーティングテーブルを介して Linux で動作しています。
しかし、Windows にはポリシー ベースのルーティングも複数のルーティング テーブルもありません。しかし、Windowsでこれを実現する方法はまだ考えられますが、それを実現するためのAPIが見つかりません
SO_BINDTO_DEVICE
1 つの方法は、特定のアプリのソケット作成をフックし、ソケット オプション ( ) に相当する Windows を使用してsetsockopt()
、タップ ドライバーではなく物理インターフェイスにソケットを強制的にバインドすることです。
しかし、繰り返しになりますが、上記を実現するための関連 API が見つかりません。
だから私はいくつかの質問があります:
(1)WFP(Windows Filtering Platform)または一般的なWindows APIの特定のAPI内で私がやりたいことは可能ですか?もしそうなら、どのAPIを見るようにアドバイスしますか?
(2) または、「WFP 呼び出しドライバー」を作成する必要がありますか? もしそうなら、これに関するいくつかのリソースを教えてもらえますか?また、私の特定の問題の良い出発点になる可能性がありますか? :)
(3) 他に足りないものはありますか? 私が望むものを達成するためのより簡単なアプローチ? 一部のVPNで機能を確認したため、Windowsで可能であることは知っていますが、自分の個人用VPNで複製したいと思います:)