0

Qt for Windows で書かれたリダイレクト サーバーとチェーン プロキシ クライアントを使用して透過的なチェーン プロキシを作成したいと考えています。ndis+tdi を試しましたが、複雑すぎます。openVPN コードを突破し始めました。したがって、タスクは、OpenVPN 接続が不要な場合でもダミー タップ デバイスを起動し、リダイレクト サーバーがバインドされる addr:port にパケットをリダイレクトすることです。新しいプラグイン機能を実装した方が良いのではないでしょうか??...

4

1 に答える 1

4

OpenVPN の TUN/TAP ドライバー (「TAP-Win32」) をそのまま使用して、ソフトウェアでバックアップされたネットワーク デバイスを実装できます。「書き換えられた OpenVPN tun/tap ドライバー」の意味がわかりません。既存のコードを変更する必要はありません。TAP-Win32 を開き、フレーム/パケットを読み書きする独自のプログラムを作成するだけです。TAP-Win32 だけで、OpenVPN の他の部分は必要ありません。

ただし、TUN/TAP ドライバーを使用する場合は、個々のフレーム/パケットを処理する必要があります。TCP のみをリダイレクトする場合 (つまり、パケットではなく接続をリダイレクトする場合)、リダイレクト プログラムにローカル SOCKS サーバーのみを提供させると便利な場合があります。SOCKS を使用すると、パケットではなく接続を操作できます。特定のネットワーク プログラムが SOCKS をサポートしている場合は、そのプログラムに SOCKS サーバーを使用するように指示するだけです。

一方、SOCKS を理解するアプリケーションだけでなく、すべてのアプリケーションをリダイレクトできるようにしたい場合 (または各アプリケーションを SOCKS 用に構成したくない場合) は、raw を転送できるプログラムを使用できます。 SOCKS サーバーを介した TCP 接続 (パケット レベル)。私のプログラムtun2socksを参照してください。

TAP-Win32 デバイスを操作するプログラムを作成したら、ルーティング テーブルを更新して、そこにルーティングされるパケットを取得します。おそらく、それをデフォルト ルートにして、以前のデフォルト ルートを上書きすることをお勧めします。ただし、ルーティング テーブルはリダイレクト プログラム自体にも適用されるため、リダイレクト プログラムが接続するホストの特定のルートを追加する必要があることに注意してください。そうしないと、最終的に TAP デバイスに戻ってしまいます。tun2socks ページでは、SSH 転送を使用する場合の方法が説明されています。

更新: tun2socks は TUN デバイスのみを処理し、すべての着信接続を単純に転送します。あなたが転送したいものを決定するものではありません。いくつかのポリシー (ポート番号など) があったとしても、その情報では何も役に立ちませんでした。たとえば、拒否パケットで応答した場合、接続は単に失敗し、OS は代替ルートを探しません。(接続を異なるSOCKSサーバーに転送できますが、あなたの場合は役に立たないと思います)

必要と思われる機能は「ポリシー ルーティング」と呼ばれ、オペレーティング システムによって提供される必要があります。残念ながら、Windows はポリシー ルーティングを提供していないようです。本当に必要な場合は、代わりに Linux を使用することをお勧めします。これは、Windows よりも多くのネットワーク関連の機能を提供します (ポリシー ルーティングはその 1 つです)。

または、 tun2socksを使用する代わりに、ユーザー空間のソックス化ツールが機能する場合があります。これらは、特定のアプリケーションを起動するときにネットワーク関連のシステム コールをフックして、たとえば SOCKS 経由で接続を確立するプログラムです。そのようなアプリケーションがルーティング ルールをサポートしている場合は、ニーズに合う可能性があります。

Windows 用のそのようなツールの例は、「柔軟なルーティング ルール」のサポートを主張するProxyCap (商用ソフトウェア) です。

于 2011-10-30T17:22:34.917 に答える