Как сделать работу с Microsoft Remote Desktop лучше

в 8:10, , рубрики: microsoft, rdp, Серверное администрирование, системное администрирование, удалёнка, удаленная работа

Как сделать работу с Microsoft Remote Desktop лучше - 1 Хочу поделиться несколькими советами по настройке удаленного подключения к рабочим местам по RDP. Расскажу как проапгрейдить древний RPC-HTTP до UDP, похвалю и поругаю Windows 10 и AVC, разберу решение нескольких типичных проблем.

Считаем, что для подключения используется Remote Desktop Gateway (RDGW), а в качестве серверов выступают рабочие станции. Использовать RDGW очень удобно, потому что шлюз становится общей точкой входа для всех клиентов. Это дает возможность лучше контролировать доступ, вести учет подключений и их продолжительность. Даже если VPN позволяет подключиться к рабочим машинам напрямую — это не лучший вариант.

RDGW настраивается быстро, просто, а Let's Encrypt и win-acme легко решают проблему с доверенным сертификатом.

Есть три транспортных протокола по которым клиент может подключиться с серверу:

RPC-HTTP (плохо)
HTTP (лучше)
HTTP+UDP (отлично)

Под сервером будем понимать рабочую машину, под клиентом — домашнюю.
Первое, с чего стоит начать, это «плохо» превратить в «отлично».

Апгрейд RPC-HTTP до HTTP

Подключение в сессию с использованием RPC-HTTP легко определить по внешнему виду полоски подключения.

Как сделать работу с Microsoft Remote Desktop лучше - 2

Здесь нет значка качества подключения (о нем ниже), а значит мы используем старый RPC, обернутый в TLS — это очень медленно. Дело, конечно, не только в обертке — сам протокол меняется с каждым релизом ОС, меняются кодеки, алгоритмы упаковки изображения. Чем свежее протокол, тем лучше.

Что делать?

Windows XP или Vista

В XP можно поднять протокол с 5.1 до 7. Хотфикс windowsxp-kb969084-x86.exe

В Vista — c 6 до 7. Хотфикс имеет тот же номер, файлы windows6.0-kb969084-x64.msu или Windows6.0-KB969084-x86.msu

Но RDP 7 не работает по HTTP и UDP. Поможет только апгрейд клиента и сервера до Windows 7 и новее.

Windows 7

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

www.microsoft.com/en-US/download/details.aspx?id=40986
Windows6.1-KB2574819-v2-x64.msu
windows6.1-kb2592687-x64.msu
Windows6.1-KB2830477-x64.msu
Windows6.1-KB2857650-x64.msu
Windows6.1-KB2913751-x64.msu (заменен kb2923545)

windows6.1-kb2923545-x64.msu

Так вы получите и свежий клиент mstsc.exe, и поддержку RDP 8.1 серверной части ОС.
Было:

Как сделать работу с Microsoft Remote Desktop лучше - 3

Как сделать работу с Microsoft Remote Desktop лучше - 4

Стало:

Как сделать работу с Microsoft Remote Desktop лучше - 5

После этого протокол надо включить ключом реестра (для этого можно использовать adm шаблон в комплекте с Windows 7).

[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTTerminal Services]
"fServerEnableRDP8"=dword:00000001
 
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodePoliciesMicrosoftWindows NTTerminal Services]
"fServerEnableRDP8"=dword:00000001

Включите поддержку транспорта UDP в групповой политике.

Как сделать работу с Microsoft Remote Desktop лучше - 6

Перезагружаем сервер с Windows 7. Тот самый случай, когда может потребоваться перезагрузиться дважды — значение в реестре должно быть установлено до того, как включился RDP, а групповая политика применяется раньше.

Если все получилось, то при подключении к серверу в полоске сессии появится иконка качества подключения (как в телефоне для мобильной сети):

Как сделать работу с Microsoft Remote Desktop лучше - 7

Windows 8 и новее

Протокол работает «из коробки».

Апгрейд HTTP до HTTP+UDP

Если ваша сеть не склонна к потере пакетов, UDP существенно (для CAD — радикально) повышает отзывчивость сервера за счет использования FEC для сокращения ретрансмиссии, а так же перехода подтверждения доставки пакетов с уровня системного стека TCP/IP на уровень протокола RDP-UDP.

От каждого клиента подключается одна основная управляющая сессия по HTTP (в этом канале так же передается клавиатура/мышь), плюс одна или несколько сессий UDP для передачи картинки или других виртуальных каналов.

Мы коснемся только верхушки айсберга. Есть 3 различных версии протокола RDP-UDP. Кроме того, сам UDP может работать в двух режимах UDP-R (reliable) и UDP-L (lossy). С Microsoft ничего просто не бывает. Но поскольку от нас здесь ничего не зависит, просто имейте в виду — чем новее операционная система, теме более современный протокол используется.

Снаружи RDP-UDP оборачивается в Datagram Transport Layer Security (DTLS) RFC4347, в чем вы можете убедиться открыв Wireshark.

Подробнее в документах:
[MS-RDPEMT]: Remote Desktop Protocol: Multitransport Extension
[MS-RDPEUDP]: Remote Desktop Protocol: UDP Transport Extension
[MS-RDPEUDP2]: Remote Desktop Protocol: UDP Transport Extension Version 2
Где не прав — поправьте, пожалуйста.

Что же нужно для включения UDP?

RDP-UDP поддерживается начиная с RDP 8.

На клиенте должен быть открыт порт udp/3389. Если вы его закрыли локальным firewall, ACL на свитче или внешнем файрволле — порт надо открыть.

Для сервера Remote Desktop Gateway к порту tcp/443 надо открыть udp/3391.

Порт можно поменять, вот как он настраивается:

Как сделать работу с Microsoft Remote Desktop лучше - 8

Для Windows 7 обязательно должен быть включен NLA (Network Level Authentication).

Как сделать работу с Microsoft Remote Desktop лучше - 9

Можно включить в групповой политике

Как сделать работу с Microsoft Remote Desktop лучше - 10

или через реестр

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp]
"SecurityLayer"=dword:00000001

В чем связь непонятно. Но без NLA на 7-ке не работает, на более свежих релизах NLA для работы UDP не обязателен.

После установления сессии по HTTP, клиент и сервер пробуют согласовать подключение по UDP. Если есть выпадение пакетов или задержки, то сессия UDP не запустится. Точный алгоритм отказа согласования UDP до конца не понятен.

Если все настроено, то после подключения нажмите на кнопку качества связи. В окошке будет указано, что согласован UDP.

Как сделать работу с Microsoft Remote Desktop лучше - 11

На шлюзе это выглядит так:

Как сделать работу с Microsoft Remote Desktop лучше - 12

Windows 10

Если у вас Windows 10 и на сервере, и на клиенте, то это самый быстрый и беспроблемный вариант. В Microsoft активно дорабатывают RDP, и в свежих релизах 10 вы можете рассчитывать на неплохую скорость работы. Коллеги не смогли обнаружить разницу между Citrix и Windows 10 RDP по скорости работы в AutoCAD.

Про эволюцию кодеков RDP на базе AVC в Windows 10 есть хорошая статья
Remote Desktop Protocol (RDP) 10 AVC/H.264 improvements in Windows 10 and Windows Server 2016 Technical Preview

Согласование AVC с аппаратным кодированием можно увидеть в журнале событий (подробнее в статье выше):

Как сделать работу с Microsoft Remote Desktop лучше - 13

Как сделать работу с Microsoft Remote Desktop лучше - 14

Замечу только, что проблема искажений все же есть даже с h.264 4:4:4. Она сразу бросается в глаза если работать в PowerShell ISE — текст ошибок выводится с неприятным искажением. Причем на скриншоте и на фотографии все отлично. Волшебство.

Так же косвенным признаком работы AVC являются время от времени появляющиеся зеленые квадраты по углам.

AVC и аппаратное кодирование в свежих билдах должно работать из коробки, но групповая политика никогда не бывает лишней:

Как сделать работу с Microsoft Remote Desktop лучше - 15

С учетом того, что AVC кодируется аппаратно видеокартой, то обновить драйверы видео — хорошая идея.

О проблемах

XP и Vista

Если проблема возникает на Windows XP или Vista, попробуйте сначала обновить протокол до 7 версии (писал в начале статьи). Обязательно включите поддержку CredSSP. На сайте Microsoft статьи уже удалены, но Интернет помнит.

Если не помогло — «доктор говорит в морг, значит в морг». Что испытала на себе операционная система за последние 15 лет — лучше об этом даже и не думать.

NLA

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

NTLM

Некоторые клиенты пытаются авторизоваться с использованием NTLMv1. Причины разные, но исправить на клиенте можно так:

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa]
"LmCompatibilityLevel"=dword:00000003

Перезагрузка обязательна.

Если вы молоды и дерзки ничего не боитесь, то есть более радикальное решение — отключение Channel Binding на Remote Desktop Gateway

HKLMSoftwareMicrosoftWindows NTCurrentVersionTerminalServerGatewayConfigCore
Type: REG_DWORD
Name: EnforceChannelBinding
Value: 0 (Decimal)

Делать так не надо. Но мы делали. :-) Для клиента, который настаивал (нет не так, НАСТАИВАЛ) что NTLMv1 на рабочих станциях ему необходим. Не знаю, может там серверы на NT4 без SP еще в работе.

Отключение RDP 8+ в Windows 10

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

[HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server Client]
"RDGClientTransport"=dword:00000001

Сам не делал, и вам не советую. Но кому-то, пишут, что помогает.

DrWeb

Часто не работает RDGW с DrWeb SpIDerGate. Надо выключить этот компонент.

Как сделать работу с Microsoft Remote Desktop лучше - 16
Не нравится отключать — обратитесь в поддержку продукта, у меня нет лицензии, а сотрудники не смогли пройти этот квест. Не играли в Dizzy.

Системный прокси

Встретился списанный компьютер из какой-то компании, где в качестве системного прокси был прописан местный TMG, и подключение к RDGW не работало. Это можно исправить так:

netsh winhttp show proxy && netsh winhttp reset proxy

Переключение раскладок клавиатуры

Иногда приезжают лишние раскладки. Можно отключить проброс раскладки с клиента

[HKLMSystemCurrentControlSetControlKeyboard Layout]
"IgnoreRemoteKeyboardLayout"=dword:00000001

Проблемы с DPI

Масштабирование приходит с клиентской машины, и если на домашнем ноутбуке стоит 125%, то и на рабочей машине будет так же. На серверах это можно отключить, а на рабочих станциях не нашел как. Но в магазине приложений Windows 10 есть «современный» клиент.

В нем можно настроить DPI:

Как сделать работу с Microsoft Remote Desktop лучше - 17

Как мониторить шлюз с RDGW

Есть счетчик производительности «Шлюз служб терминаловТекущие подключения», который немного глючит, если нет подключений или сервер долго не перезагружался. Он показывает именно число подключений, но как мы помним, для HTTP+UDP их как минимум два, а может быть и больше. Поэтому это не совсем объективный показатель числа подключений сотрудников.

Есть класс WMI Win32_TSGatewayConnection. Его содержимое соответствует тому, что вы видите в разделе «Наблюдение» шлюза удаленных рабочих столов.

С ним число подключений можно посчитать поточнее:

Get-WmiObject -class "Win32_TSGatewayConnection" -namespace "rootcimv2TerminalServices" 
|?{$_.transportprotocol -ne 2}|select username,connectedresource|sort username|Get-Unique -AsString| measure|select -ExpandProperty count

Just for fun есть утилита Remote Display Analyzer. Бесплатная версия мне ничего полезного не показала, но вдруг кому-то пригодится.

А как же тонкий тюнинг, настройка нескольких десятков параметров сессии?

Здесь уместен принцип Парето: 20% усилий дают 80% результата. Если вы готовы инвестировать ваше время в оставшиеся 20% результата — отлично. Только имейте в виду, что когда вы читаете статью о настройке протокола в Windows 7, то не знаете про какой протокол писал автор — 7, 8 или 8.1. Когда читаете про Windows 10 без указания релиза — проблемы те же. Например, пишут что в свежих билдах Windows 10 кодек AVC/h.264 изменился на RDPGFX_CODECID_AVC444V2, а в Windows Server 2016 остался RDPGFX_CODECID_AVC444.

Из всех таких советов мы используем только две настройки:

  1. 16 bit цвет, об этом можно почитать в статье MS RDP Performance / Bandwidth Usage
  2. Отключение сглаживания шрифтов font smoothing:i:0 по статье выше или Performance Tuning Remote Desktop Session Hosts

Сомневаюсь, что они дают какой-то ощутимый результат.

Вот мы и подошли к концу статьи. Хотел покороче, а получилось как всегда. Рад, если кому-то эти советы помогут сэкономить время или улучшить настройку своей инфраструктуры.

Автор: Михаил

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js