
Поддержка прокси Socks5/4/4a для протокола удалённого рабочего стола / терминальных служб / Citrix / XenApp / XenDesktop
Этот инструмент добавляет возможность использования SOCKS-прокси для служб терминалов (Terminal Services или Remote Desktop Services) и Citrix (XenApp/XenDesktop). Он использует динамический виртуальный канал (Dynamic Virtual Channel), который позволяет взаимодействовать через открытое RDP/Citrix-соединение без необходимости открывать новый сокет, соединение или порт на межсетевом экране.
Вам необходимо установить плагин (.dll) на вашем клиентском компьютере, с которого вы подключаетесь к RDP/Citrix-серверу. На RDP/Citrix-сервере нужно использовать вторую половину проекта — .exe, которая создаёт канал между плагином и исполняемым файлом сервера. Более подробная информация приведена ниже. Если вы хотите использовать его с Citrix/XenApp/XenDesktop, прокрутите до раздела о Citrix.
Если DLL зарегистрирован правильно, он будет загружаться mstsc.exe (клиентом удалённого рабочего стола) или Citrix Receiver при каждом запуске. Когда серверный исполняемый файл запущен на стороне сервера, он подключается обратно к DLL через динамический виртуальный канал — функцию протокола удалённого рабочего стола. После установки канала на клиентском компьютере запускается SOCKS-прокси, по умолчанию на 127.0.0.1:1080. Этот сервис можно использовать как SOCKS5-прокси из любого браузера или инструмента.
Динамические виртуальные каналы были представлены в . и всё, что , должны работать без проблем. Сейчас клиент работает с mstsc.exe (клиентом удалённого рабочего стола). Если вы хотите использовать его из Unix, попробуйте FreeRDP — он выпустил аналогичный модуль примерно в то же время, когда был выпущен этот инструмент. Citrix поддерживает тот же базовый API, что и Microsoft, хотя неизвестно, когда он был добавлен; это произошло до 2013 года, поэтому плагин должен работать с большинством решений Citrix.
Вы можете скачать весь проект и скомпилировать его самостоятельно или просто использовать готовые бинарные файлы из раздела Releases. Важно, чтобы во всех случаях использовался правильный бинарный файл: выберите соответствующий для вашей архитектуры (если ваш клиент 32-битный, а сервер 64-битный, возьмите 32-битную DLL и 64-битный EXE).
Файл .dll необходимо разместить на клиентском компьютере в любом каталоге (для длительного использования рекомендуется скопировать его в %SYSROOT%\system32\ или %SYSROOT%\SysWoW64) и установить следующей командой от имени пользователя с повышенными привилегиями (т.е. администратора):
regsvr32.exe SocksOverRDP-Plugin.dll
Если ваш пользователь не является администратором, вам также необходимо импортировать параметры реестра для вашего пользователя. Для этого используйте файл SocksOverRDP-Plugin.reg.
Если вы хотите удалить его:
regsvr32.exe /u SocksOverRDP-Plugin.dll
Каждый раз, когда вы подключаетесь к RDP-серверу, этот плагин будет загружаться и настраиваться в соответствии с реестром (см. ниже).
Файл .exe необходимо скопировать на сервер, и он может быть запущен любым пользователем.
Инструмент работает с Citrix Receiver, который используется для подключения к Citrix-серверу. Пользователю может быть предоставлено как приложение, так и полный рабочий стол; инструмент работает в обоих случаях, если плагин был правильно установлен, а серверный компонент .exe был скопирован и запущен на Citrix-сервере.
Похоже, Citrix Receiver существует только в 32-битной версии. Это означает, что если ваша операционная система 64-битная и вы уже зарегистрировали соответствующий .dll, вам нужно отменить его регистрацию и использовать 32-битную версию. Если у вас 32-битная ОС, просто зарегистрируйте .dll, как указано выше.
Обратите внимание, что в 64-битной Windows есть два regsvr32.exe: один в *%WINDIR%\system32* (x64) и один в *%WINDIR%\SysWOW64* (x32); используйте последний для регистрации 32-битного .dll, который будет автоматически загружен Citrix Receiver при запуске. Всё остальное должно быть так же; пожалуйста, убедитесь, что вы следовали readme, прежде чем открывать issues на Github.
Серверный компонент (.exe) не требует какой-либо настройки или аргументов. Хотя есть один аргумент для подробного вывода:
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
Каждый раз, когда модуль включён, перед установкой соединения отображается предупреждающее напоминание. Вот так:

Это предупреждение гарантирует, что пользователь знает, что плагин загружен и с какими настройками.
Если плагин не загружается или исполняемый файл не запускается из-за отсутствия некоторых DLL, например VCRUNTIME140.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-соединение активно и исполняемый файл запущен на сервере.
Единственный известный способ помешать пользователям использовать этот инструмент — отключить виртуальные каналы (Virtual Channels) в конфигурации сервера удалённых рабочих столов. Хотя это действительно блокирует использование данного инструмента, оно также отключает копирование и вставку (copy&paste), что может стать серьёзной проблемой или большим неудобством для пользователей.
Хотя динамические виртуальные каналы можно отключить в RDP, следующее решение для тех же целей неэффективно для Citrix: https://support.citrix.com/article/CTX202153