Удаленный рабочий стол (RDP) + туннелирование


0

Извините за длинную историю, я пытался быть кристально чистым.

* Немного задом наперед *

В рамках проекта нам необходимо иметь доступ к определенным компьютерам (далее называемым клиентами) с помощью удаленного рабочего стола (RDP) с сервера с действительным IP-адресом. Эти клиенты находятся за NAT (например, за режимом DSL + маршрутизатор), поэтому у них нет действительного IP-адреса, но есть модем + маршрутизатор. Предположим, что все они работают в Windows 7 Ultimate, и в них нет брандмауэров, антивирусов или чего-либо, что блокирует трафик.

* До сих пор *

Первая и самая логичная вещь, которая приходит на ум, это использование опции переадресации портов на модеме. Но реальный сценарий здесь заключается в том, что на этих клиентах запущено приложение (которое мы предоставили), и нам нужно приложение для переадресации портов, а не модем, потому что после развертывания системы мы не будем знать маршрутизатор модель, конфигурация и т. д. Кроме того, у нас не будет доступа к настройкам модема. Итак, предположим, что эта опция недоступна.

* выполнимый для нас вариант и конечно же проблема! *

Переходя к следующей опции, которая использует обратный туннель (или переадресацию удаленного порта), мы изменили приложение, чтобы создать 2 сокета. On используется для связи с сервером RDP на клиенте, а другой - для подключения к серверу (тот, который имеет действительный IP-адрес) для создания туннеля. На сервере есть другое приложение, которое получает весь трафик от клиента и отправляет его клиенту удаленного рабочего стола (через другой сокет) и наоборот. Так что архитектура выглядит примерно так:

|RDP SERVER|<->|Socket1|<->|Socket2|<->The Internet<->|Socket3|<->|Socket4|<->|RDP Client|
------------- Client side -----------               ------------- Server Side -----------  

Сокет 1 находится на порту 17001 клиента и обменивается данными с портом 3389 клиента (RDP-сервер).
Сокет 2 находится на порту 17002 клиента и обменивается данными с портом 17002 сервера.
Сокет 3 находится на порте 17002 сервера и обменивается данными с портом 17002. клиента
Socket 4 находится на порту 17002 сервера и обменивается данными с портом 3389 сервера (RDP-клиент)

С этого момента всякий раз, когда пользователь на сервере хочет установить подключение удаленного рабочего стола к клиенту за NAT, он подключается к сокету 4, и весь трафик перенаправляется в сокет 3, который, в свою очередь, передает трафик в сокет 2 и от розетки 2 до розетки 1 и наоборот.

Проблема заключается в том, что независимо от того, как клиент и сервер соединены, даже когда сервер и клиент находятся в одной сети, просто рядом друг с другом, после того, как RDP запрашивает у меня пароль для клиента, он случайным образом выполняет одно из следующих действий:

  1. иногда он подключается без проблем, я могу взаимодействовать с компьютером
  2. иногда это останавливается там
  3. иногда он входит и, прежде чем показать экран клиента, умирает.

Я проверил соединение, изменил модем, изменил клиент и сервер, и он все тот же. Я даже попробовал ssh-сервер на клиенте ( freesshd ) и использовал putty для удаленного переноса портов, и в результате получились странные ошибки на putty, которые привели к обрыву соединения. Я начинаю вырывать волосы! Есть идеи, что происходит?


Во-первых, даже не думайте о разоблачении RDP через NAT. обратное туннелирование - слишком большая боль, как вы заметили. что касается вашего решения, вы действительно хотите использовать настоящий протокол туннелирования, такой как VPN.
Фрэнк Томас

@FrankThomas Фрэнк, я сделал это. На самом деле это того стоило. Смотрите ответ здесь
Arashv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.