Найти в Дзене
Magic Properties

RDP зависает и показывает «Черный экран»? Отключаем UDP (Гайд по стабилизации удаленки)

​Автор: Александр П., системный архитектор. Человек, который не любит, когда курсор мыши двигается с задержкой в три секунды.
​Коллеги, знакомая ситуация?
Вы работаете по RDP (Remote Desktop). Вроде бы интернет стабильный, VPN (WireGuard или OpenVPN) поднят, пинг нормальный.
Но вдруг — бац! Картинка замирает. Вы двигаете мышкой, а курсор на удаленном столе стоит на месте. Потом появляется
Оглавление

Автор: Александр П., системный архитектор. Человек, который не любит, когда курсор мыши двигается с задержкой в три секунды.

​Коллеги, знакомая ситуация?

Вы работаете по RDP (Remote Desktop). Вроде бы интернет стабильный, VPN (WireGuard или OpenVPN) поднят, пинг нормальный.

Но вдруг — бац! Картинка замирает. Вы двигаете мышкой, а курсор на удаленном столе стоит на месте. Потом появляется ненавистная плашка «Reconnecting...» (Переподключение 1 из 20). Или просто черный экран при сворачивании/разворачивании окна.

Многие грешат на провайдера, на Wi-Fi, на ретроградный Меркурий.

Но в 90% случаев, если вы работаете через VPN или нестабильный мобильный интернет, виноват протокол UDP.

​Сегодня я расскажу, почему RDP по умолчанию пытается быть «слишком умным», как это ломает работу админам (особенно нам, релокантам с длинным пингом) и как принудительно перевести всё на старый добрый TCP.

​Немного теории: Зачем RDP нужен UDP и почему это зло?

​Начиная с Windows 8 / Server 2012, протокол RDP научился работать через UDP (порт 3389).

  • Задумка Microsoft: UDP быстрее. Он подходит для стриминга видео, плавного звука и анимаций. Если пакет потерялся — плевать, шлем следующий.
  • Суровая реальность: Когда вы заворачиваете RDP (UDP) внутрь VPN-туннеля (который тоже часто UDP, например WireGuard), происходит «инкапсуляция протоколов». При малейшей потере пакетов (packet loss) алгоритмы контроля перегрузки начинают сходить с ума. RDP думает, что сеть хорошая, и наваливает трафик. VPN думает, что сеть плохая, и дропает пакеты.

Результат: Фризы, зависания, черный экран.

Решение: Заставить RDP использовать ТОЛЬКО TCP.

TCP гарантирует доставку пакетов. Да, видео на ютубе через удаленку может стать чуть менее плавным (кто вообще смотрит ютуб через RDP?), но зато сама сессия станет железобетонной. Курсор перестанет «плавать», а разрывы исчезнут.

​Есть два пути: Элегантный (Групповые политики) и Быстрый (Реестр).

​Способ 1: Элегантный (Через Group Policy)

Подходит для Windows Pro, Enterprise и Server версий.

​Это правильный метод для админов. Делаем на том компьютере, К КОТОРОМУ подключаемся (то есть на удаленном сервере или рабочей станции).

  1. ​Нажимаем Win + R, вводим gpedit.msc и жмем Enter.
  2. ​Идем по пути: Computer Configuration (Конфигурация компьютера) -> Administrative Templates (Административные шаблоны) -> Windows Components (Компоненты Windows) -> Remote Desktop Services (Службы удаленных рабочих столов) -> Remote Desktop Session Host (Узел сеансов удаленных рабочих столов) -> Connections (Подключения).
  3. ​В правой части ищем параметр: Select RDP transport protocols (Выбор транспортных протоколов RDP).
  4. ​Дважды кликаем по нему.
  5. ​Ставим точку на Enabled (Включено).
  6. ​В выпадающем меню «Select Transport Type» выбираем Use only TCP (Использовать только TCP).
  7. ​Жмем OK.
  8. ​Открываем командную строку (cmd) от администратора и пишем: gpupdate /force (чтобы применилось без перезагрузки).

​Всё. Теперь этот компьютер будет принимать входящие соединения только по TCP.

​Способ 2: Быстрый (Через Реестр)

Подходит для Windows Home (где нет gpedit) или для ленивых.

​Если вы не хотите бродить по дебрям политик, можно просто создать один ключ в реестре.

  1. ​Нажимаем Win + R, вводим regedit.
  2. ​Идем по пути: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
  3. ​В правой части жмем правой кнопкой мыши -> New (Создать) -> DWORD (32-bit) Value.
  4. ​Называем его: SelectTransport.
  5. ​Открываем его и ставим значение 1.
  • 0 — Использовать и UDP, и TCP (по умолчанию)
  • 1 — Только TCP
  • 2 — Только UDP (для мазохистов)
  1. ​Перезагружаем службу RDP (или весь компьютер).

​А что делать на Клиенте? (Например, на Mac mini M4)

​Если вы не можете изменить настройки на сервере (нет прав админа), можно попробовать отключить UDP на стороне своего клиента.

Для Windows-клиента:

Повторить трюк с Групповыми Политиками, но путь будет другой:

Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Connection Client -> Turn off UDP On Client.

Ставим Enabled.

Для macOS (Microsoft Remote Desktop):

В официальном клиенте от Microsoft под macOS нет галочки «Отключить UDP».

Однако, если вы настроили сервер (Способ 1 или 2), то клиент на Маке попытается постучаться по UDP, получит отлуп и автоматически переключится на TCP.

Вы заметите, что подключение стало проходить чуть-чуть быстрее на этапе "Configuring remote session".

​Как проверить, что сработало?

​Подключаемся к удаленному рабочему столу.

Вверху экрана есть синяя (или черная) плашка подключения.

  1. ​Нажмите на значок «антенны» (качество связи) на этой плашке.
  2. ​Откроется окошко с информацией.
  3. ​Ищите строчку: "Protocol: TCP" или "Transport: TCP".

​Если там написано "UDP is enabled" или просто UDP — значит, настройки не применились.

Если видите TCP — поздравляю. Теперь ваши сессии будут стабильными, как швейцарские часы.

​Резюме от админа

​После того как я отключил UDP на своей рабочей станции в Нижнем Новгороде, мои «зависания» при работе из Варны через WireGuard исчезли полностью. Картинка может иногда пикселить (если канал совсем падает), но управление не теряется.

​RDP по UDP — это хорошая технология для локальной сети офиса. Для интернета и VPN — только TCP. Берегите нервы.