web-dev-qa-db-ja.com

リモートデスクトップ接続を介したTCP / IP接続のトンネリング

リモートデスクトップ接続を介して接続できるプライベートネットワーク上にリモートWindowsサーバーがあります。私のコンピューターからそのサーバーのネットワーク上の他のコンピューターにTCP/IP接続を行えるようにしたいと思います。

リモートデスクトップ接続を使用すると、接続を通じてプリンター、ドライブ、およびその他のローカルリソースを共有できます。 RDCを介してTCP/IP接続を「トンネル」する方法はありますか?

SSHによって提供されるポート転送に似たものをお願いします。 RDCを介してこれを行う方法は見当たらないが、機能がそこにあることを望んでおり、それについては知らない。

36

RDPでトンネルできるとは思いませんが、サーバーにrdpしてクライアントへのsshトンネルを開始すると、マシンはsshで接続されます。リモートポートとローカルポートの両方を転送できるので、すべて逆にできます。

[〜#〜]編集[〜#〜]

クライアントPCにsshサーバーをインストールし、ポート443でssh接続を受け入れるように設定すると、サーバーからsshサーバー(クライアント)に接続でき(sshクライアント接続を使用)、ポートを開く必要がありません( 443はhttps用に開いている必要があります)

8
Charles Gargent

(ネイティブのWindowsクライアントではなく)クライアント側でrdesktopを実行している場合は、 rdp2tcp を使用できます。
RDP接続を介して転送するTCPポートを管理できます。

20

管理アクセスやインターフェイス間のネットワークルーティングを許可しないWindowsサーバーで使用する rdp2tcp よりも優れたものはありませんでした。これを機能させるには、rdesktopで OOPパッチ を実行する必要があります(最後のページに移動して、rdesktopの最新バージョンに対応するページを見つけます)。 MinGWコンパイラを使用して、トンネルのWindows側をコンパイルしました。

ドキュメントも優れており、簡潔です。

マイナーポイントのように見えるかもしれません: '-'を含む 'アドイン'名を使用すると、rdesktopはコマンドラインを正しく解析できません。これは適切な脱出を必要とするバシズムだったかもしれませんが、私にはわかりません。

私が理解できる限り、これは「本当」ではないことに注意してくださいTCP「見る」トンネルTCPプロトコルデータユニットと同じようにWindows側の管理者権限がなくても可能です。これは、事前に構成されたエンドポイントを備えたsocksプロキシのようなものです(ただし、それほど重要ではありません)。

私はそれでインタラクティブなSSHセッションを簡単に管理しましたが、SSHファイル転送に耐えられませんでした(rdesktopコンソールで「仮想チャネルが切断されました」と表示されました(rdp2tcpは、stdout/stdin dup2で子プロセスとして実行され、rdesktopによってパイプされます) 、ただしstderrへの変更なし))。ソースにはRDP2TCP_PING_TIMEOUTという定数があり、トンネルを保持するためのキープアライブタイムアウトのように見えました。中間ネットワークで何らかの調整が行われていると仮定すると、これを5秒から900秒に増やすとうまくいくようで、最大100 MBの転送に耐えました(その特定のネットワークでは約15分かかりました)。

それを超えて、ただし、rdp2tcpはSIGPIPEを受信することがわかりました。これは、rdesktopパイプの破損が原因で受信したと主張されていますが、rdesktopコードまたは 'の出力のいずれかから発生した証拠は見つかりませんでした。 lsof 'は、SIGPIPEトリガーの前後でrdesktopのパイプの数に変化を示しませんでした。

これが発生した場合は、rdesktopを再起動する必要があります。また、トンネルのWindows側も再起動する必要があります。 rsyncを使用してファイル転送を再開できます。また、回復プロセス全体を自動化できます。

これはすべて、Linuxをクライアントとして想定したものです。 Cygwin/Xでの無関係なトラブルのため、パッチを当てたrdesktopをWindowsで試していません。私はそれがうまくいくはずだと思います。

また、私の経験はSSHでしたが、他の手段による巨大なファイル転送は同じ問題に遭遇する可能性があります。

3
wolf

RDPへのローカルポート転送を使用できると思います。

A -> B -> C

AはWindowsまたはMac、BはLinux、CはWindowsです。 AからCへのRDPを行い、CがAから直接到達できない場合は、Aで

ssh username@B -L 7777:C:3389

RDクライアントを開き、ポイント127.0.0.1:7777でCのユーザー名とパスワードを使用します。Macからこれを試しましたが、Windowsで動作するはずです。

0
Srinivas Nukala