HimeraSearchDB
Carding_EbayThief
triada
CrackerTuch
d-shop
HimeraSearchDB

НОВОСТИ Как сделать работу с Microsoft Remote Desktop лучше

Bonnie
Оффлайн
Регистрация
12.04.17
Сообщения
19.095
Реакции
107
Репутация
0
dxs8wiugrbhaov1gzied15gldk8.png
Хочу поделиться несколькими советами по настройке удаленного подключения к рабочим местам по 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 легко определить по внешнему виду полоски подключения.
7w-0aativt247pvbumddqkf4epg.png

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

Windows XP или Vista.

В XP можно поднять протокол с 5.1 до 7. Хотфикс
В Vista — c 6 до 7. Хотфикс имеет тот же номер, файлы

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

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

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)



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

r1khiphuyrmxmmodab_ecjiktiq.png


Стало:
rt9vdjdnfmus27h9nyn7ctpyp7g.png

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


[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services]
"fServerEnableRDP8"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows NT\Terminal Services]
"fServerEnableRDP8"=dword:00000001


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


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


Windows 8 и новее
Протокол работает «из коробки».
Апгрейд HTTP до HTTP+UDP


Если ваша сеть не склонна к потере пакетов, UDP существенно (для CAD — радикально) повышает отзывчивость сервера за счет использования для сокращения ретрансмиссии, а так же перехода подтверждения доставки пакетов с уровня системного стека 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.

Подробнее в документах:



Где не прав — поправьте, пожалуйста.

Что же нужно для включения UDP?
RDP-UDP поддерживается начиная с RDP 8.

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

Для сервера Remote Desktop Gateway к порту tcp/443 надо открыть udp/3391.
Порт можно поменять, вот как он настраивается:
o6n0w3fmookrhmxaqomyx8wretk.png


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

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

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

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"SecurityLayer"=dword:00000001

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

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

На шлюзе это выглядит так:
ocld7nbslu8dt_fjahnvd-zqvso.png


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

Про эволюцию кодеков RDP на базе AVC в Windows 10 есть хорошая статья


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


ldrnldvgbclldmcr2f8pxoztfxo.png

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

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

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


XP и Vista
Если проблема возникает на Windows XP или Vista, попробуйте сначала обновить протокол до 7 версии (писал в начале статьи). Обязательно включите поддержку CredSSP. На сайте Microsoft статьи уже удалены, .
Если не помогло — «доктор говорит в морг, значит в морг». Что испытала на себе операционная система за последние 15 лет — лучше об этом даже и не думать.

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

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

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"LmCompatibilityLevel"=dword:00000003


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

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

HKLM\Software\Microsoft\Windows NT\CurrentVersion\TerminalServerGateway\Config\Core
Type: REG_DWORD
Name: EnforceChannelBinding
Value: 0 (Decimal)

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

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

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client]
"RDGClientTransport"=dword:00000001

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

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

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

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

netsh winhttp show proxy && netsh winhttp reset proxy

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

[HKLM\System\CurrentControlSet\Control\Keyboard Layout]
"IgnoreRemoteKeyboardLayout"=dword:00000001

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


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


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

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

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

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



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

А как же тонкий тюнинг, настройка нескольких десятков параметров сессии?
Здесь уместен принцип Парето: 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 цвет, об этом можно почитать в статье
2) Отключение сглаживания шрифтов font smoothing:i:0 по статье выше или

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

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