
Socks5/4/4a プロキシサポート (リモートデスクトッププロトコル / ターミナルサービス / Citrix / XenApp / XenDesktop 向け)
このツールは、ターミナルサービス(またはリモートデスクトップサービス)およびCitrix(XenApp/XenDesktop)にSOCKSプロキシ機能を追加します。 Dynamic Virtual Channelを使用して、ファイアウォールで新しいソケット、接続、ポートを開くことなく、確立済みのRDP/Citrix接続上で通信できるようにします。
RDP/Citrixサーバーに接続するために使用するクライアントコンピュータにプラグイン(.dll)をインストールする必要があります。RDP/Citrixサーバー側では、プロジェクトのもう半分である*.exe*を使用する必要があります。これはプラグインとサーバー実行ファイルの間のチャネルを作成します。 詳細は以下にあります。Citrix/XenApp/XenDesktopで使用する場合は、Citrixのセクションまでスクロールしてください。
DLLが正しく登録されていれば、起動のたびにmstsc.exe(リモートデスクトップクライアント)またはCitrix Receiverによって読み込まれます。サーバー側でサーバー実行ファイルが実行されると、リモートデスクトッププロトコルの機能である動的仮想チャネルを介してDLLに接続します。チャネルが確立されると、クライアントコンピュータ上にSOCKSプロキシが起動します。デフォルトでは127.0.0.1:1080です。このサービスは、任意のブラウザやツールからSOCKS5プロキシとして使用できます。
動的仮想チャネルはWindow Server 2008とWindows Vista SP1で導入されました。これらおよびこれらより新しいものはすべて問題なく動作するはずです。
現在、クライアントはmstsc.exe(リモートデスクトップクライアント)で動作します。Unixから使用したい場合は、FreeRDPを試してみてください。このツールとほぼ同時期に同様のモジュールをリリースしています。
CitrixはMicrosoftと同じ基盤となるAPIをサポートしていますが、いつ導入されたかは不明です。2013年より前なので、プラグインはほとんどのCitrixソリューションで動作するはずです。
プロジェクト全体を取得して自分でコンパイルするか、リリースセクションからコンパイル済みバイナリを使用できます。すべての場合において正しいバイナリを使用することが重要です。対応するアーキテクチャに合ったものを選択してください(クライアントが32bitでサーバーが64bitの場合は、32bitのdllと64bitのexeを取得してください)。 はクライアントコンピュータの任意のディレクトリに配置する必要があります(長期的に使用する場合は、%SYSROOT%\system32\ または %SYSROOT%\SysWoW64\ にコピーすることをお勧めします)。その後、昇格したユーザー(別名 Administrator)として次のコマンドでインストールします。
regsvr32.exe SocksOverRDP-Plugin.dll
ユーザーが管理者でない場合は、自分のユーザーのレジストリ設定もインポートする必要があります。その場合は SocksOverRDP-Plugin.reg ファイルを使用してください。
削除する場合:
regsvr32.exe /u SocksOverRDP-Plugin.dll
今後RDPサーバーに接続するたびに、このプラグインが読み込まれ、レジストリで指定されたとおりに自動設定されます(下記参照)。
.exe はサーバーにコピーし、任意のユーザーで実行する必要があります。
このツールは、Citrixサーバーへの接続に使用されるCitrix Receiverで動作します。ユーザーにはアプリまたはフルデスクトップのどちらかを提供でき、プラグインが正しくインストールされ、.exe サーバーコンポーネントがCitrixサーバーにコピーされて実行されていれば、どちらの場合でもツールは動作します。
Citrix Receiverは32ビット版しか存在しないようです。 つまり、オペレーティングシステムが64ビットで、対応する .dll をすでに登録している場合は、その .dll の登録を解除し、32ビット版を使用する必要があります。32ビットOSを使用している場合は、上記のように .dll を登録するだけです。
64ビットWindowsにはregsvr32.exeが2つあり、%WINDIR%\system32*(x64)と%WINDIR%\SysWOW64*(x32)にあります。後者を使用して32ビットの*.dll*を登録すると、実行時にCitrix Receiverによって自動的に読み込まれます。その他はすべて同じです。Githubでissueを開く前に、必ずreadmeを確認してください。
サーバーコンポーネント(.exe)は、設定や引数を一切必要としません。ただし、冗長出力用のオプションが1つあります:
PS C:\Users\SocksOverRDP\> .\SocksOverRDP-Server.exe -h
Socks Over RDP by Balazs Bucsay [[@xoreipeip]]
Usage: SocksOverRDP-Server.exe [-v]
-h This help
-v Verbose Mode
クライアントコンポーネント(.dll)にはプリセット設定が付属しており、登録時に.dll自体によってインストールされるか、SocksOverRDP-Plugin.regからインポートする必要があります。
クライアントの*.dll*はすべてのオプションをレジストリから読み取ります。値は次のキーの下にあります:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Default\AddIns\SocksOverRDP-Plugin
モジュールが有効になっている場合、接続が行われる前に毎回、リマインダー警告が表示されます。次のようになります:

この警告により、ユーザーはプラグインがどのような設定で読み込まれているかを知ることができます。
プラグインが読み込まれない、または実行ファイルがVCRUNTIME140.DLLなどの一部のDLLを欠いているために実行できない場合は、Visual C++ Redistributable for Visual Studio 2015パッケージをインストールするとよいでしょう。
Windows 11 ARM64でテスト済み: Redistributable
Windows 11 ARM64(Macbook Pro M1)では、インストール時に次のエラーメッセージが表示されます:
The module SocksOverRDP-Plugin.dll was located bt the call to DllRegisterServer failed with error code 0x8002801c
このエラーが表示されても、モジュールは正しくインストールされており、使用できます。
サーバーコンポーネント(.exe)は任意のユーザーで実行でき、低権限ユーザーでも動作します。このコンポーネントに関連するセキュリティリスクはまったくありません。
クライアントコンポーネント(.dll)はデフォルトでlocalhostのみでリッスンするように構成されています。これが例えば0.0.0.0に変更され、ファイアウォールがないか誤って構成されている場合、ネットワーク上の他のコンピュータがSOCKSプロキシにアクセスし、RDPサーバーを介して通信できるため、セキュリティ問題が発生する可能性があります。
SOCKSサーバーは、RDP/Citrix接続が生きていて、サーバー上で実行ファイルが実行されている間だけ起動していることに注意してください。
ユーザーがこのツールを使用できないようにする唯一の既知の方法は、リモートデスクトップサーバーの構成で仮想チャネルを無効にすることです。これにより実際にこのツールの使用はブロックされますが、コピー&ペーストも無効になり、ユーザーにとっては致命的、または大きな不便になる可能性があります。
RDPで動的仮想チャネルを無効にすることは可能ですが、Citrixに対して同じことを行うための次のソリューションは効果がありません: https://support.citrix.com/article/CTX202153