長い話で申し訳ありませんが、私は非常に明確にしようとしました.
*ちょっとした背景*
プロジェクトの一環として、有効な IP アドレスを持つサーバーからリモート デスクトップ (RDP) を使用して、特定のコンピューター (以降、クライアントと呼びます) にアクセスできる必要があります。これらのクライアントは NAT の背後にあるため (たとえば、DSL モード + ルーターの背後)、有効な IP アドレスを持っていませんが、モデム + ルーターにはあります。それらはすべて Windows 7 Ultimate で実行されており、ファイアウォール、ウイルス対策、またはトラフィックをブロックするものは何もないと仮定します。
* ここのところ *
最初に頭に浮かぶ最も論理的なことは、モデムでポート転送オプションを使用することです。しかし、ここでの実際のシナリオは、これらのクライアントがアプリケーション (C# で記述され、提供されている) を実行しており、モデムではなくポート転送を行うアプリケーションが必要であるということです。ルーターのモデル、構成などがわかりません。また、モデムの設定にもアクセスできません。したがって、このオプションは使用できないと想定してください。
*私たちにとって実行可能なオプション、そしてもちろん問題です!*
リバース トンネル (別名リモート ポート フォワーディング) を使用する次のオプションに移ると、2 つのソケットを作成するようにアプリを変更しました。オンはクライアントの RDP サーバーとの通信に使用され、もう 1 つはサーバー (有効な IP を持つサーバー) に接続してトンネルを作成するために使用されます。サーバーには別のアプリがあり、クライアントからすべてのトラフィックを受け取り、それを (別のソケットを介して) リモート デスクトップ クライアントに送信し、その逆も行います。したがって、アーキテクチャは次のようになります。
|RDP SERVER|<->|Socket1|<->|Socket2|<->The Internet<->|Socket3|<->|Socket4|<->|RDP Client|
------------ Client side ---------- ------------- Server Side ----------
ソケット 1 はクライアントのポート 17001 にあり、クライアント (RDP サーバー) のポート 3389 と通信しています
ソケット 2 はクライアントのポート 17002 にあり、サーバーのポート 17002 と通信しています
ソケット 3 はサーバーのポート 17002 にあり、ポート 17002 と通信していますクライアントの
ソケット 4 はサーバーのポート 17002 にあり、サーバー (RDP クライアント) のポート 3389 と通信しています
その時点から、サーバー上のユーザーが NAT の背後にあるクライアントにリモート デスクトップ接続を確立する場合は常に、ソケット 4 に接続し、すべてのトラフィックがソケット 3 にリダイレクトされ、ソケット 2 にトラフィックが転送され、ソケット 2 からソケット 1 へ、およびその逆。
問題は、クライアントとサーバーがどのように接続されていても、サーバーとクライアントが同じネットワーク内にある場合でも、RDP がクライアントのパスワードを尋ねた後、次のいずれかをランダムに実行することです: 1 . 時々、問題なく接続でき、コンピュータと対話できます 2. 時々、そこで停止します 3. 時々入り、クライアント画面を表示する直前に停止します.
接続を確認し、モデムを変更し、クライアントとサーバーを変更しましたが、それでも同じです。クライアント(freesshd)でsshサーバーを試し、パテを使用してリモートポート転送を行ったところ、パテで奇妙なエラーが発生し、接続が切断されました。髪を伸ばし始めました!何が起こっているのですか?