Зависание RDP сессий при использовании протокола UDP

Октябрь, 27th 2023Рубрика: Windows 1463
Подписаться на комментарии по RSS

Зависание RDP сессий при использовании UDP

Хочу поделиться решением проблемы зависания RDP сессии при подключении к удаленному рабочему столу через VPN. Полагаю, кому-то эта заметка существенно сократит время поиска проблемы, да и самому чтобы не забыть.

Опишу кратко, что происходит. Попытка подключения к удаленному рабочему столу в Windows 10 завершается ошибкой:

При попытке клиента подключиться, произошла ошибка лицензирования (лицензирование прервано по таймауту). Попытайтесь подключиться к удаленному компьютеру снова.

Ключевой момент тут, что попытка соединения была прервана по таймауту. В macOS ситуация выглядит несколько иначе и здесь всё останавливается на фразе «Detecting network quality».

Detecting network quality при подключении по RDP

Следует заметить, что такое поведение наблюдалось только при подключении клиента через VPN (конкретно в моем случае OpenVPN).

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

Современные версии Windows 10/11 и Windows Server (начиная с 2016 и выше) в RDP сессии используют не только стандартный порт TCP/3389, но и UDP порт 3389. В TCP сессии передаются клавиатура и мышь, а UDP сессия отвечает за вывод картинки. По утверждениям Microsoft использование UDP существенно повышает отзывчивость удаленного рабочего стола и возможность работать на нестабильных подключениях с высокими задержками.

Впрочем, не всё так однозначно и в ряде случаяв использование протокола UDP приводит к "зависанию" RDP сессий, что может выражаться в периодическом замирании картинки, обрыву сессии или отображении черного экран вместо удаленного рабочего стола. Кроме того, при использовании RDP сессий внутри VPN туннелей может наблюдаться фрагментирование UDP пакетов из-за разных настроек MTU и чаще всего такое рассогласование наблюдается с OpenVPN серверами.

Решение проблемы зависания RDP сессий при использовании UDP

Наиболее очевидным решением было бы просто отключить использование протокола UDP для RDP сессии. Сделать это можно через консоль редактора локальной GPO (gpedit.msc) в разделе:

Computer Configuration -> Administrative Templates -> Windows Components -> Remoter Desktop Services -> Remote Desktop Session Host -> Connections

Включаем параметр политик Select RDP transport protocols и устанавливаем его значение Select Transport Type = Use only TCP.

Отключаем использование протокола UDP для RDP сессии

Для применения настроек потребуется перезагрузить RDP сервер, но как по мне, полное отключение UDP в RDP сессиях не самая удачная идея, так как этот транспорт ускоряет и сглаживает графику.

Более правильным решением будет отключение URCP (Universal Rate Control Protocol) для терминальных служб на сервере, что также решает проблему черного экрана в Windows 10 при RDP подключении.

Для этого открываем редактор реестра (regedit) и переходим в ветку:

HKLM\SOFTWARE\Microsoft\Terminal Server Client

Отключение URCP (Universal Rate Control Protocol) для терминальных служб

Здесь создаем новый параметр REG_DWORD (32-бит) с именем UseURCP и присваиваем ему десятичное значение `0`. После перегрузки, всё должно заколоситься.

Подписывайтесь на канал Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

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

ваш комментарий будет опубликован после проверки
на указанный адрес будет отправлено письмо с кодом активации. Вы можете настроить собственный профиль и стать активным участником или автором.