Надоело каждый раз перезагружать RDP клиент, когда сессия внезапно зависает. Работаешь, работаешь, а потом внезапно экран перестаёт обновляться. Хорошо если мышкой не ткнёшь куда-нибудь туда, куда не надо. В очередной такой момент, когда у меня всё зависло, я решил: «Хватит это терпеть!» И отключил UDP протокол в RDP.
Сначала проверяем, что RDP подключение действительно использует UDP протокол. Нажимаем на иконку сети слева.
Написано «… протокол UDP включен». Отключаемся от RDP.
Открываем на своём компьютере редактор групповых политик:
gpedit.msc
Переходим в раздел Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Службы удаленных рабочих столов → Клиент подключения к удаленному рабочему столу.
Находим параметр Отключение UDP на клиенте. Редактируем.
Устанавливаем значение Включено. OK.
Этот параметр политики определяет, используется ли для доступа по протоколу удаленного рабочего стола протокол UDP.
Если вы включаете этот параметр политики, трафик протокола удаленного рабочего стола использует только протокол TCP.
Если вы отключаете или не настраиваете этот параметр политики, трафик протокола RDP пытается использовать протоколы TCP и UDP.
Переходим в раздел Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Службы удаленных рабочих столов → Узел сеансов удаленных рабочих столов → Подключения.
Находим параметр Выбор транспортных протоколов RDP. Редактируем.
Устанавливаем значение Включено. Выбираем тип транспорта Использовать только TCP. OK.
Этот параметр политики позволяет указать, какие протоколы можно использовать для доступа к данному серверу по протоколу удаленного рабочего стола (RDP).
Если этот параметр политики включен, необходимо указать протоколу RDP использовать транспортный протокол UDP.
Вы можете выбрать один из следующих вариантов: «Использовать UDP и TCP», «Использовать только TCP» или «Использовать либо UDP, либо TCP (стандартное значение)».
Если вы выбираете вариант «Использовать либо UDP, либо TCP» и UDP-подключение проходит успешно, то большая часть RDP-трафика использует UDP.
При UDP-подключении с ошибкой или при выборе варианта «Использовать только TCP» весь RDP-трафик использует TCP.
Если этот параметр политики отключен или не настроен, RDP выбирает оптимальные протоколы для обеспечения наилучшего взаимодействия с пользователем.
Перезагружаем свой компьютер. После перезагрузки ещё раз проверяем, что RDP подключение больше не использует UDP протокол. Подключаемся RDP клиентом к серверу. Нажимаем на иконку сети слева.
Ни слова о UDP.
Ссылки
Windows 7 — отключаем протокол UDP в RDP
Windows 11 — отключаем протокол UDP в RDP
В современных версиях Windows 10/11 и Windows Server 2022/2019/2016 при подключении к серверу RDP (RDS) кроме стандартного порта TCP/3389, дополнительно используется UDP порт 3389. Когда ваш RDP клиент подключается к серверу, устанавливается несколько сессий. В управляющей TCP (HTTP) сессии передаются клавиатура и мышь, а несколько UDP сессий используются для передачи картинки.
Вы можете проверить, использует ли ваш клиент mstsc режим UDP, если щелкните по значку Connection Info в верхней полоске RDP подключения. В нашем случае протокол UDP используется:
The quality of the connection to the remote computer is excellent and UDP is enabled.
По утверждениям Microsoft использование UDP для RDP сессий позволяет существенно повысить отзывчивость удаленного рабочего стола за счет сокращения ретрансмиссии и возможности работать на нестабильных подключениях с высокими задержками.
Зависание RDP сессий при использовании UDP
В некоторых случаях использование протокола UDP для RDP подключения может вызывать проблемы: периодическое замирание картинки, обрывы RDP сессий, пользователи видят черных экран вместо удаленного рабочего стола, сообщение о внутренней ошибке при RDP подключении и т.д. В таких случаях обычно помогает переподключение к RDP сессии. Но иногда такая проблема происходит очень часто и мешает нормальной работе.
Проблема с замиранием RDP сессий встречается:
- При использовании RDP сессий внутри VPN туннелей ( чаще всего наблюдается при использовании сервера OpenVPN). Это вызывается фрагментированием UDP пакетов (может быть вызвано разными настройками MTU) при пересылке через VPN туннель;
- После обновления до билда 22H2 в Windows 11/10;
- При использовании шлюза Remote Desktop Gateway на Windows Server 2022 и порта 3391 для UDP трафика.
Причем проблема не связана с плохой производительностью RDS сервера как описано в кейсе по ссылке: на сервере достаточно свободных ресурсов, память и CPU не нагружены.
Отключить использование протокола UDP для RDP
Для решения проблемы с зависанием RDP сессий при использовании VPN туннелей вы можете попробовать отключить использование протокола 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;
- Перезагрузите RDS/RDP сервер, чтобы применить настройки;
- Подключитесь к RDP серверу и нажмите на значок информации о подключении. Здесь должна появиться надпись:
The quality of the connection to the remote computer is good.
Это означает, что для RDP подключения используется только TCP.
Этот способ позволяет отключить использование UDP на стороне сервера RDP/RDS. Если вы хотите запретить использовать UDP для RDP на стороне клиента, нужно включить параметр Turn off UDP on Client в разделе Computer Configuration -> Administrative Templates -> Windows Components -> Remoter Desktop Services -> Remote Desktop Connection Client.
После внесения изменений, нужно обновить локальные политики командой
gpupdate /force
и перезапустить клиент mstsc.exe.
Также можно включить этот параметр через реестр (параметр GPO соответствует ключу fClientDisableUDP в реестре):
reg add "HKLM\software\policies\microsoft\windows nt\Terminal Services\Client" /v fClientDisableUDP /d 1 /t REG_DWORD
Столкнулся с интересной проблемой при переходе на удалённую работу. Работать приходится на рабочей машине через VPN, подключаясь к ней с помощью клиента удалённого рабочего стола с домашнего ПК. И вот при подобном соединении периодически как бы зависал экран, т.е. изображение полностью замирало, не менялось даже на чёрный экран. При этом отсоединения от сессии не проходило, мышь и клавиатура продолжала работать, так как при переключении было видно, что нажатия клавиш и мыши были переданы на удалённый ПК.
Приходилось постоянно переподключаться к рабочему ПК, что реально бесило — такое случалось часто, иногда по нескольку раз за несколько минут, иногда за час. Понятно было, что надо что-то делать, но непонятно было что. При этом домашний ноутбук, в отличии от ПК, таких кунштюков не выдавал, стабильно работая — было ясно, что проблема не в нестабильной работе сети или VPN, а кроется где-то в программной части домашнего ПК. Сначала я исправил всё, что показывал журнал системных ошибок, но это не помогло. Начал было уже косо смотреть на драйвер видеокарты, но мысль о том, что изображение замирает только в сессии RDP (Remote Desktop Protocol) меня успокоило на этот счёт. Поиски в интернете сначала успехов не принесли, потому что информации очень много и трудно так сформулировать запрос, чтобы на него не выдавалось куча бесполезной в моём случае информации. Но потом я всё-таки начал искать в английском сегменте и сразу нашёл решение.
По мнению тех, кто отвечал на вопрос подобный моему, дело заключалось в протоколе UDP, который использовался (вместе с TCP) в соединениях по протоколу RDP. И предлагалось отключить эту возможность через редактор локальных групповых политики Windows. Однако, в версии Windows 10 Home, этот редактор по-умолчанию отключён. Хорошо, что его можно установить, пусть для этого нам потребуется командная строка с правами администратора. Сначала надо ввести следующую строку:
FOR %F IN ("%SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~*.mum") DO (DISM /Online /NoRestart /Add-Package:"%F")
Дождаться завершения и получив сообщение «Операция успешно завершена.», запустить вторую команду:
FOR %F IN ("%SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~*.mum") DO (DISM /Online /NoRestart /Add-Package:"%F")
После перезагрузки ПК, запускаем с правами администратора оснастку gpedit.msc, можно из командной строки, можно просто из поиска в главном меню Windows:
Далее, надо найти в редакторе раздел Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Клиент подключения к удаленному рабочему столу:
Открываем Выбор транспортных протоколов RDP:
Включаем эту политику, и в параметрах Выбор типа транспорта выбираем «Использовать только TCP».
Скорее всего, отказаться от протокола UDP в пользу TCP, для решение этой проблемы, нужно из-за того, что UDP использует простую модель передачи, без неявных «рукопожатий» для обеспечения надёжности, упорядочивания или целостности данных, а TCP осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета, гарантируя тем самым (в отличие от UDP), целостность передаваемых данных и уведомление отправителя о результатах передачи. И когда клиент RDP через протокол UDP не получает нужный ему пакет и из-за этого подвисает изображение, то по какой-то причине клиент не понимает этого и не пытается решить эту проблему отправкой нового сообщения на отрисовку экрана. А вот через протокол TCP такого не проявляется, поскольку он гарантирует получение данных.
Но у меня почему-то данное решение не заработало. И пришлось копать глубже. И наконец-то мне удалось найти ещё один вариант с отключением UDP для RDP — с помощью редактора реестра. Для этого надо запустить командную строку с правами администратора и запустить команду:
reg add "HKLM\software\policies\microsoft\windows nt\Terminal Services\Client" /v fClientDisableUDP /d 1 /t REG_DWORD
Или запустить редактор реестра с правами администратора:
И в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Client добавить новый ключ fClientDisableUDP со цифровым значением 1:
Вот после этого, перезагрузив ПК, я полностью решил проблему с «заморозкой» изображения в клиенте удалённого рабочего стола.
В том же обсуждении упоминался и возможный «виновник» данного поведения клиента RDP: обновление Windows 10 под номером 1903, которое, в том числе, вносило исправления, касающиеся RDP-протокола:
- CVE-2019-1181 | Remote Desktop Services Remote Code Execution Vulnerability;
- CVE-2019-1182 | Remote Desktop Services Remote Code Execution Vulnerability.
На мой взгляд, эта версия имеет право на существование, поскольку на моём ноутбуке обновление 1903 не установлено, поскольку после его установки сначала отваливается Bluetooth, а после перезагрузки возникает «синий экран» и систему можно восстановить, только откатив последние изменения. Поэтому на нём таких симптомов и не было.
P.S. В общем, предложенное решение проблему с отваливанием сессии RDP у меня решало, но при этом оставались кратковременные лаги через четко определенное время. Выявить их можно было с помощью постоянной работы команды ping и выяснилось, что примерно 1% пакетов через каждые 2 минуты не проходил. Причину выяснить долго не удавалось, но в конце концов виновник был найден — это был конфликт ПО VipNET (который обеспечивал рабочий VPN) и брандмауэра Windows, который по умолчанию банил вообще всё (у меня с ним даже FTP-клиент в пассивном режиме не работал из-за этого). То бишь пакеты проходили, но периодически — раз, затык и всё. Т.е. просто конфликт ПО, который решить практически невозможно без открытия всех входящих портов на брандмауэре или простого его отключения. Ну надо же сделать такой инструмент, который практически бесполезен, ведь для того, чтобы нормально пользоваться программами, которые не используют один порт (или диапазон), а на входящее подключение выбирают произвольный вплоть до 65535, его приходится тут отключать, потому что правило просто не создать. И да, я пробовал делать правило для программ, и для служб, и для протоколов — один чёрт, ничего не работает. Видимо, у меня руки из одного места растут.
В это непростое время, когда весь мир пытается справиться с коронавирусной инфекцией COVID-2019, многие перешли на удаленный режим работы.
Те, кто используют подключение к удаленному рабочему столу (RDP) до своего рабочего компьютера могут столкнуться с фризами (подвисаниями) в работе удаленного рабочего стола (RDP). Обычно, переподключение решает эту проблему, но через некоторое время проблема повторяется. При этом нет видимых проблем со связью.
Причин может быть много, начиная от некорректной работы сетевой карты и заканчивая некорректной работой драйвера или наличия вредоносных программ. Предложенное нами решение поможет в случае, если проблемы наблюдаются в сессиях RDP с использованием UDP протокола.
В начале, следует проверить используется ли UDP при подключении к RDP, для этого необходимо кликнуть на кнопку в окне подключения:
Если появится следующее сообщение:
То для решения проблемы можно попробовать принудительно отключить использование UDP протокола при подключении к RDP.
Указанные действия необходимо проводить на компьютере к которому осуществляется подключение.
Для этого запускаем редактор локальной групповой политики
Win + R -> «gpedit.msc» -> OK
Если у Вас Windows 10 Home, воспользуйтесь статьей на нашем сайте для включения редактора gpedit.
Далее, нам следует найти раздел «Конфигурация компьютера» — «Административные шаблоны» — «Компоненты Windows» — «Службы удаленных рабочих столов» — «Клиент подключения к удаленному рабочему столу«
Здесь нам нужно изменить параметр «Отключение UDP на клиенте«. Двойной клик на этом параметре и выбираем «Включено«
Кроме того, нам необходимо найти раздел «Конфигурация компьютера» — «Административные шаблоны» — «Компоненты Windows» — «Службы удаленных рабочих столов» — «Узел сеансов удаленных рабочих столов» — «Подключения«
Здесь нам следует изменить параметр «Выбор транспортных протоколов RDP«. Двойной клик на этом параметре и выбираем «Включено» и в параметрах указываем тип транспорта «Использовать только TCP«.
После сохранения необходимо перезагрузить компьютер.
Для проверки того, что подключение идет без использования протокола UDP кликнем на кнопку в окне подключения:
Теперь в сообщении не должно быть информации о UDP:
Надеемся, что проблема с подвисанием сессии удаленного рабочего стола у Вас исчезнет также как исчезла у нас и вы сможете эффективно продолжить удаленную работу из дома.
Все статьи на тему RDP и устранения проблем в его работе на нашем сайте.
(Visited 50 109 times, 19 visits today)
Posted by Rewalon
В предыдущей заметке, мы обсуждали вопрос блокировки UDP трафика для защиты от утечки реального IP-адреса, при использовании технологии WebRTC в самом браузере. Сегодня, мы будем настраивать правила брандмауэра, при помощи встроенного брандмауэра Windows.
По теме: «Что такое WebRTC и как это касается меня?». В конце заметки, есть способ блокировки UDP-трафика, при помощи брандмауэра Symantec Endpoint Protection.
Примечательно, что стандартный брандмауэр Windows, часто называют неудобным и дырявым. Однако, если разобраться в его настройках, можно создать эффективную защиту, без использования стороннего защитного программного обеспечения и дополнительных финансовых затрат.
Нужна компьютерная помощь? Есть проблемы, которые не можете устранить самостоятельно?
Надежные исполнители по доступным ценам.
Как открыть «Монитор брандмауэра Защитника Windows в режиме повышенной безопасности»?
Запускаем «Монитор брандмауэра Защитника Windows в режиме повышенной безопасности». Для этого, нажмите на клавиатуре сочетание клавиш Win -> R и в открывшемся окне «Выполнить», вставьте команду:
WF.msc
и нажмите «ОК».
Откроется окно «Монитор брандмауэра Защитника Windows в режиме повышенной безопасности включен Локальный компьютер», где можно создавать правила для входящих и исходящих подключений в брандмауэре Windows.
Создаем правила для входящих подключений в брандмауэре Windows 10.
В открывшемся окне «Монитор брандмауэра Защитника Windows в режиме повышенной безопасности включен Локальный компьютер», выбираем вкладку «Правила для входящих подключений». В окне «Действия», выбираем параметр «Создать правило…»:
В открывшемся окне «Тип правила», выбираем «Для порта» и нажимаем «Далее»:
В окне «Протокол и порты», выбираем необходимый протокол (UDP или TCP). В частности, если мы хотим заблокировать UDP трафик для защиты от утечки реального IP-адреса через WebRTC, нам нужно выбрать «Протокол UDP»:
В параметрах «Укажите порты, к которым будет применяться это правило», необходимо выбрать либо «Все локальные порты» или указать конкретный порт/порты (можно указать несколько портов, через запятую), выбрав «Определенные локальные порты». Если вы, хотите заблокировать UDP трафик в браузере, вам нужно указать два порта:
- 80 — используется браузерами для http-подключений
- 443 — используется браузерами для https-подключений
*Как альтернативный вариант для HTTP, может использоваться 8080 порт.
Список всех TCP и UDP портов, можно посмотреть тут.
При этом, лучше выбрать вариант «Все локальные порты» и потом, после создания правила, отредактировать его (ниже, описаны действия). Если полностью заблокировать UDP трафик посредством брандмауэра Windows и не отредактировать правило, будет потерян доступ в Интернет, в большинстве случаев.
Либо, если хотите заблокировать полностью весь UDP трафик, можете выбрать «Все локальные порты». Тогда, весь входящий UDP трафик, будет блокирован.
В новом окне «Действия», выбираем «Блокировать подключение» и нажимаем «Далее»:
В окне «Профиль», оставляем все по умолчанию и нажимаем «Далее»:
В окне «Имя», указываем желаемое имя/название правила брандмауэра и нажимаем «Готово»:
Создаем правила для исходящих подключений в брандмауэре Windows 10.
Для создания правила блокировки UDP трафика при исходящих соединениях, посредством создания правила в стандартном брандмауэре Windows 10, ничем не отличается от создания правил для входящего трафика (описан выше).
Выбираем параметр «Правила для исходящих подключений». В окне «Действия», выбираем параметр «Создать правило…»:
В открывшемся окне «Тип правила», выбираем «Для порта» и нажимаем «Далее»:
В окне «Протокол и порты», выбираем необходимый протокол (UDP или TCP). В
частности, если мы хотим заблокировать UDP трафик для защиты от утечки
реального IP-адреса через WebRTC, нам нужно выбрать «Протокол UDP»:
Как и в случае создания правила для входящих подключений, если вы, хотите заблокировать UDP
трафик в браузере, вам нужно указать два порта:
- 80 — используется браузерами для http-подключений
- 443 — используется браузерами для https-подключений
*Как альтернативный вариант для HTTP, может использоваться 8080 порт.
Список всех TCP и UDP портов, можно посмотреть тут.
При этом, как и в случае с созданием правила для создания входящего подключения, надежнее будет выбрать вариант «Все
локальные порты», а потом, настроить правило под блокировку UDP трафика, только из конкретного приложения.
Либо,
если хотите заблокировать полностью весь UDP трафик, можете выбрать «Все
локальные порты». Тогда, весь входящий UDP трафик, будет блокирован.
В новом окне «Действия», выбираем «Блокировать подключение» и нажимаем «Далее»:
В окне «Профиль», оставляем все по умолчанию и нажимаем «Далее»:
В окне «Имя», указываем желаемое имя/название правила брандмауэра и нажимаем «Готово»:
Данным способом, можно создавать любые правила для брандмауэра Windows 10. При этом, у нас нет возможности при создании правила брандмауэра, более гибко настроить брандмауэр Windows 10, чтобы блокировать например UDP трафик только для браузера. Для этого, мы можем указать только порты. Однако, их могут использовать и другие программы. Полная блокировка UDP трафика, может негативно сказаться на работе ряда программ и зачастую, полностью блокирует выход в Сеть. Прежде, чем использовать данные настройки, сначала вникните в суть и поймите, что вам именно нужно. При этом, мы можем после создания правила, произвести более тонкую настройку правила и указать, например, что нужно блокировать не весь UDP трафик, а только для конкретного приложения (например, только в браузере). Таким образом, мы сохраним доступ в Сеть и защитимся от утечки IP-адреса при использовании браузера с поддержкой технологии WebRTC.
Тонкая настройка правил стандартного брандмауэра Windows 10.
После того, как вы создадите правила для входящих и исходящих подключений, вы сможете их в последствии:
- Отключить правило (1.)
- Удалить правило (2.)
- Тонкая настройка правила (3.)
Как уже упоминалось выше, при создании правила брандмауэра, у нас нет возможности настроить более гибко правило, под свои нужды. Однако, после создания правила, мы можем его настроить. Вот тут и открывается весь потенциал стандартного брандмауэра Windows.
При этом, если заблокировать полностью UDP трафика, мы потеряем в большинстве случаев, полностью доступ в Интернет. Поэтому, теперь, нам необходимо настроить правило брандмауэра, чтобы блокировался только UDP трафик браузера.
Итак, рассмотрим на примере блокировки UDP трафика для исходящего соединения. Если мы, указали блокировать весь трафик при создании правил для входящих/исходящих соединений, мы можем теперь, указать только нужный браузер для блокировки UDP трафика. Для этого, нажимаем правой кнопкой мыши по созданному правилу и выбираем «Свойства»:
В окне «Свойства:» нашего правила, переходим на вкладку «Правила и службы»:
Предположим, у нас задача заблокировать UDP трафик, только для браузера Google Chrome. В таком случае, выбираем в пункте «Программы» -> «Эта программа» и нажимаем «Обзор»:
После добавления браузера*, нажимаем «Применить» (1.) и «ОК» (2.):
*Будьте предельно внимательны, при создании правил и указывайте верный путь к нужному файлу.
При последующем обновлении программы, необходимо проверять и редактировать при необходимости правила брандмауэра. Так как путь к исполняемым файлам, может меняться. Например, Браузер Opera, при каждом обновлении, создает новый путь к исполняемому файлу. Таким образом, правило брандмауэра, перестанет работать для нужной версии и его нужно редактировать.
Теперь, наше правило брандмауэра Windows, будет блокировать UDP трафик, только в браузере Google Chrome. Таким образом, мы можем создавать правила и потом, настраивать их более гибко, под свои задачи. Естественно, если нам нужно создать несколько правил, для разных программ, мы должны создать сначала правило в брандмауэре, а потом, отредактировать его.
Заключение.
У меня нет задачи, описать разные сценарии настройки брандмауэра Windows. Моя цель, показать основной принцип создания правил в брандмауэре Windows и как их можно редактировать. Понимая данные принципы работы с брандмауэром Windows, вы сможете самостоятельно создавать и настраивать правила брандмауэра, под свои нужды.
Если у вас будут
вопросы, поправки и дополнения – делитесь ими в комментариях. Ваш опыт, может
быть полезным для других пользователей.