Хочу поделиться несколькими советами по настройке удаленного подключения к рабочим местам по 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 легко определить по внешнему виду полоски подключения.
Здесь нет значка качества подключения (о нем ниже), а значит мы используем старый RPC, обернутый в TLS — это очень медленно. Дело, конечно, не только в обертке — сам протокол меняется с каждым релизом ОС, меняются кодеки, алгоритмы упаковки изображения. Чем свежее протокол, тем лучше.
Что делать?
В 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 серверной части ОС.
Было:
Стало:
После этого протокол надо включить ключом реестра (для этого можно использовать adm шаблон в комплекте с Windows 7).
Включите поддержку транспорта UDP в групповой политике.
Перезагружаем сервер с Windows 7. Тот самый случай, когда может потребоваться перезагрузиться дважды — значение в реестре должно быть установлено до того, как включился RDP, а групповая политика применяется позже.
Если все получилось, то при подключении к серверу в полоске сессии появится иконка качества подключения (как в телефоне для мобильной сети):
Windows 8 и новее
Протокол работает «из коробки».
Если ваша сеть не склонна к потере пакетов, 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.
Порт можно поменять, вот как он настраивается:
Для Windows 7 обязательно должен быть включен NLA (Network Level Authentication).
Можно включить в групповой политике
или через реестр
В чем связь непонятно. Но без NLA на 7-ке не работает, на более свежих релизах NLA для работы UDP не обязателен.
После установления сессии по HTTP, клиент и сервер пробуют согласовать подключение по UDP. Если есть выпадение пакетов или задержки, то сессия UDP не запустится. Точный алгоритм отказа согласования UDP до конца не понятен.
Если все настроено, то после подключения нажмите на кнопку качества связи. В окошке будет указано, что согласован UDP.
На шлюзе это выглядит так:
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 с аппаратным кодированием можно увидеть в журнале событий (подробнее в статье выше):
Замечу только, что проблема искажений все же есть даже с h.264 4:4:4. Она сразу бросается в глаза если работать в PowerShell ISE — текст ошибок выводится с неприятным искажением. Причем на скриншоте и на фотографии все отлично. Волшебство.
Так же косвенным признаком работы AVC являются время от времени появляющиеся зеленые квадраты по углам.
AVC и аппаратное кодирование в свежих билдах должно работать из коробки, но групповая политика никогда не бывает лишней:
С учетом того, что AVC кодируется аппаратно видеокартой, то обновить драйверы видео — хорошая идея.
XP и Vista
Если проблема возникает на Windows XP или Vista, попробуйте сначала обновить протокол до 7 версии (писал в начале статьи). Обязательно включите поддержку CredSSP. На сайте Microsoft статьи уже удалены, но Интернет помнит.
Если не помогло — «доктор говорит в морг, значит в морг». Что испытала на себе операционная система за последние 15 лет — лучше об этом даже и не думать.
NLA
Иногда помогает отключение NLA на сервере. Выяснить причину не получилось, домашние машины все разные.
NTLM
Некоторые клиенты пытаются авторизоваться с использованием NTLMv1. Причины разные, но исправить на клиенте можно так:
Перезагрузка обязательна.
Если вымолоды и дерзки ничего не боитесь, то есть более радикальное решение — отключение Channel Binding на Remote Desktop Gateway
Делать так не надо. Но мы делали. :-) Для клиента, который настаивал (нет не так, НАСТАИВАЛ) что NTLMv1 на рабочих станциях ему необходим. Не знаю, может там серверы на NT4 без SP еще в работе.
Отключение RDP 8+ в Windows 10
Если ничего не помогает, а идеи кончились, можно воспользоваться недокументированным ключом для даунгрейда протокола RDP до 7 версии.
Сам не делал, и вам не советую. Но кому-то, пишут, что помогает.
DrWeb
Компонент Dr.Web SpIDerGate может запретить подключение. В этом случае возвращается ошибка:
В статистике Dr.Web будет запись:
В комментариях к этой статье со мной связался сотрудник Dr.Web и наша проблема решилась в ближайшем обновлении антивирусных баз.
Если у вас такая же ошибка, лучше обратиться в поддержку.
Как временное решение, можно внести URL вашего RDGW в исключения:
И только если не помогло отключить компонент SpIDer Gate полностью.
Системный прокси
Встретился списанный компьютер из какой-то компании, где в качестве системного прокси был прописан местный TMG, и подключение к RDGW не работало. Это можно исправить так:
Переключение раскладок клавиатуры
Иногда приезжают лишние раскладки. Можно отключить проброс раскладки с клиента
Проблемы с DPI
Масштабирование приходит с клиентской машины, и если на домашнем ноутбуке стоит 125%, то и на рабочей машине будет так же. На серверах это можно отключить, а на рабочих станциях не нашел как. Но в магазине приложений Windows 10 есть «современный» клиент.
В нем можно настроить DPI:
Есть счетчик производительности «Шлюз служб терминалов\Текущие подключения», который немного глючит, если нет подключений или сервер долго не перезагружался. Он показывает именно число подключений, но как мы помним, для HTTP+UDP их как минимум два, а может быть и больше. Поэтому это не совсем объективный показатель числа подключений сотрудников.
Есть класс WMI Win32_TSGatewayConnection. Его содержимое соответствует тому, что вы видите в разделе «Наблюдение» шлюза удаленных рабочих столов.
С ним число подключений можно посчитать поточнее:
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.
Из всех таких советов мы используем только две настройки:
Сомневаюсь, что они дают какой-то ощутимый результат.
Вот мы и подошли к концу статьи. Хотел покороче, а получилось как всегда. Рад, если кому-то эти советы помогут сэкономить время или улучшить настройку своей инфраструктуры.
Считаем, что для подключения используется Remote Desktop Gateway (RDGW), а в качестве серверов выступают рабочие станции. Использовать RDGW очень удобно, потому что шлюз становится общей точкой входа для всех клиентов. Это дает возможность лучше контролировать доступ, вести учет подключений и их продолжительность. Даже если VPN позволяет подключиться к рабочим машинам напрямую — это не лучший вариант.
RDGW настраивается быстро, просто, а Let's Encrypt и win-acme легко решают проблему с доверенным сертификатом.
Есть три транспортных протокола по которым клиент может подключиться с серверу:
RPC-HTTP (плохо)
HTTP (лучше)
HTTP+UDP (отлично)
Под сервером будем понимать рабочую машину, под клиентом — домашнюю.
Первое, с чего стоит начать, это «плохо» превратить в «отлично».
Апгрейд RPC-HTTP до HTTP
Подключение в сессию с использованием RPC-HTTP легко определить по внешнему виду полоски подключения.
Здесь нет значка качества подключения (о нем ниже), а значит мы используем старый 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-kb2923545-x64.msu
Так вы получите и свежий клиент mstsc.exe, и поддержку RDP 8.1 серверной части ОС.
Было:
Стало:
После этого протокол надо включить ключом реестра (для этого можно использовать 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 в групповой политике.
Перезагружаем сервер с Windows 7. Тот самый случай, когда может потребоваться перезагрузиться дважды — значение в реестре должно быть установлено до того, как включился RDP, а групповая политика применяется позже.
Если все получилось, то при подключении к серверу в полоске сессии появится иконка качества подключения (как в телефоне для мобильной сети):
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.
Порт можно поменять, вот как он настраивается:
Для Windows 7 обязательно должен быть включен NLA (Network Level Authentication).
Можно включить в групповой политике
или через реестр
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"SecurityLayer"=dword:00000001
В чем связь непонятно. Но без NLA на 7-ке не работает, на более свежих релизах NLA для работы UDP не обязателен.
После установления сессии по HTTP, клиент и сервер пробуют согласовать подключение по UDP. Если есть выпадение пакетов или задержки, то сессия UDP не запустится. Точный алгоритм отказа согласования UDP до конца не понятен.
Если все настроено, то после подключения нажмите на кнопку качества связи. В окошке будет указано, что согласован UDP.
На шлюзе это выглядит так:
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 с аппаратным кодированием можно увидеть в журнале событий (подробнее в статье выше):
Замечу только, что проблема искажений все же есть даже с h.264 4:4:4. Она сразу бросается в глаза если работать в PowerShell ISE — текст ошибок выводится с неприятным искажением. Причем на скриншоте и на фотографии все отлично. Волшебство.
Так же косвенным признаком работы AVC являются время от времени появляющиеся зеленые квадраты по углам.
AVC и аппаратное кодирование в свежих билдах должно работать из коробки, но групповая политика никогда не бывает лишней:
С учетом того, что AVC кодируется аппаратно видеокартой, то обновить драйверы видео — хорошая идея.
О проблемах
XP и Vista
Если проблема возникает на Windows XP или Vista, попробуйте сначала обновить протокол до 7 версии (писал в начале статьи). Обязательно включите поддержку CredSSP. На сайте Microsoft статьи уже удалены, но Интернет помнит.
Если не помогло — «доктор говорит в морг, значит в морг». Что испытала на себе операционная система за последние 15 лет — лучше об этом даже и не думать.
NLA
Иногда помогает отключение NLA на сервере. Выяснить причину не получилось, домашние машины все разные.
NTLM
Некоторые клиенты пытаются авторизоваться с использованием NTLMv1. Причины разные, но исправить на клиенте можно так:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"LmCompatibilityLevel"=dword:00000003
Перезагрузка обязательна.
Если вы
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
Компонент Dr.Web SpIDerGate может запретить подключение. В этом случае возвращается ошибка:
В статистике Dr.Web будет запись:
В комментариях к этой статье со мной связался сотрудник Dr.Web и наша проблема решилась в ближайшем обновлении антивирусных баз.
Если у вас такая же ошибка, лучше обратиться в поддержку.
Как временное решение, можно внести URL вашего RDGW в исключения:
И только если не помогло отключить компонент SpIDer Gate полностью.
Системный прокси
Встретился списанный компьютер из какой-то компании, где в качестве системного прокси был прописан местный TMG, и подключение к RDGW не работало. Это можно исправить так:
netsh winhttp show proxy && netsh winhttp reset proxy
Переключение раскладок клавиатуры
Иногда приезжают лишние раскладки. Можно отключить проброс раскладки с клиента
[HKLM\System\CurrentControlSet\Control\Keyboard Layout]
"IgnoreRemoteKeyboardLayout"=dword:00000001
Проблемы с DPI
Масштабирование приходит с клиентской машины, и если на домашнем ноутбуке стоит 125%, то и на рабочей машине будет так же. На серверах это можно отключить, а на рабочих станциях не нашел как. Но в магазине приложений Windows 10 есть «современный» клиент.
В нем можно настроить DPI:
Как мониторить шлюз с 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 есть утилита 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.
Из всех таких советов мы используем только две настройки:
- 16 bit цвет, об этом можно почитать в статье MS RDP Performance / Bandwidth Usage
- Отключение сглаживания шрифтов font smoothing:i:0 по статье выше или Performance Tuning Remote Desktop Session Hosts
Сомневаюсь, что они дают какой-то ощутимый результат.
Вот мы и подошли к концу статьи. Хотел покороче, а получилось как всегда. Рад, если кому-то эти советы помогут сэкономить время или улучшить настройку своей инфраструктуры.
alex_fort
Почему?
gotch Автор
Шлюз гибкая штука, на нем можно писать политики, можно принудительно отключать пользователей, можно мгновенно запретить подключение какой-то группе, выведя их компьютеры на обслуживание. Можно заставлять авторизоваться по токену всем или определенным группам, отключать проброс дисков и принтеров — прямо на шлюзе, мгновенно, без групповых политик.
С шлюзом легко решается задача мониторинга подключенных сотрудников — если в разгар рабочего дня число подключений стало стремительно падать — значит у нас проблема. Так же решается задача наработанного времени, хотя я ее и считаю бессмысленной, шлюз отлично пишет в журнал событий параметры завершенной сессии, в SQL тоже может писать, но нас не устроило то, что пишет NPS.
На шлюзе сразу отчетливо видна градация RCP, HTTP, UDP, можно обоснованно решать тикеты с проблемой «тормозит».
evros
Скриптом собираю лог винды gateway/operation, далее в csv, далее в SQL.
Итог: отчет через репортинг.
Всё красиво. Кто, откуда, куда, дата подключения и отключения.
gotch Автор
Красивый вариант. В нашем случае учет забрали на себя разработчики.
Для себя в качестве prrof-of-concept накидывал такой
VyachH
Сейчас уже 7-ка редкость, а вы пишите про XP, где вы ее видели в последний раз?
gotch Автор
На работе нет конечно.
Но у сотрудников на домашних компьютерах она установлена, наверное штук 10 наберется. Видеть я ее, конечно, давно уже не видел — TeamViewer на XP не работает. :-)
На этих XP не то что бы Convenience Rollup не установлен, на них местами даже SP3 нет.
daggert
На стабильных тонких клиентах, которые выполняют свою задачу. Зачем мне обновлять парк машин на селике с 512 оперативки, если они по RDP успешно работают с сервером где у них нормальная ОС?
gotch Автор
На такой клиент особо ничего другое не поставишь (кроме Linux), и только для того, чтобы поднять протокол до 8. Но если не надо тяжелых приложений, то и смысла нет, RDP 7 неплох.
edo1h
BTW, ИМХО в статью стоит добавить, что на сегодняшний момент xfreerdp умеет http, udp не умеет.
линуксовых клиентов сегодня явно больше, чем xp )
martin_wanderer
Спасибо Вам! В статью и правда было бы здорово добавить.
PereslavlFoto
У нас на домашних компьютерах и, иногда, на работе.
Naves
Не пробовали перед RDP-шлюзом поставить что-нибудь типа nginx или haproxy?
Иногда нужно развернуть еще какой-либо веб-сервис, других внешних IP-адресов нет, а перевешивать RDPGW на другой порт уже нет возможности (всем заново рассылать ярлыки)
gotch Автор
Нет, так не делали.
К слову, мы рассылаем не файлы rdp, а персональную ссылку на их скачивание.
Всегда можно перекачать, и кто-то их каждый раз перекачивает. Содержимое этих файлов уже поменялось многократно, пока подобрали все устраивающие настройки.
semenenko88
Кстати, хорошая идея рассылать ссылку на скачивание вместо файлов, спасибо!
edo1h
я так понимаю, это убьёт UDP
gotch Автор
UDP можно держать на отдельном «прямом» свободном порте, RDGW сам подскажет его клиенту при подключении. У меня сомнения, что nginx сможет проксировать, haproxy, думаю да, но он в этой ситуации не поможет.
MrAloof
Много лет работает через прокси на nginx и squid (в смысле на разных площадках по разному) с маппингом по имени домена.
Проблем нет. UDP тоже работает.
gotch Автор
Поделитесь конфигом?
Deamk
Перед rdp-шлюзом стоит nginx, работает только транспорт RPC-HTTP через задание в location return 404 на /remoteDesktopGateway, обычный проброс udp-порта на машрутизаторе до rdp-шлюза не работает, видимо как-то надо настраивать nginx stream, но нигде нет инструкций, как это сделать.
qvan
Не сталкивались с зависанием видеопотока в рдп? Причём мышь видна и нажатия отрабатывает, что видно после перезахода. Вин10 и вин2019 последние, через сстп-туннель. Скорость в туннеле ограничена до 10мб.
gotch Автор
Нет, не сталкивался, и даже не знаю подход к этому черному ящику кроме как через журналы событий. Красиво, конечно, что Microsoft все упаковала в TLS, но теперь любой траблшутинг превращается в приключение с дешифровкой TLS.
10mbit/s должно быть более чем достаточно, да в пике бывают всплески, но если усреднить (на 200-700 подключений), то одна сессия в среднем утилизирует полосу в 100kb/s.
xxxgoes
Страдаю от аналогичной проблемы. И клиент и сервер win 10 ltsc. Проявляется регулярно, журналы никаких ошибок/предупреждений не содержат. Скорость — гигабит. Никакие пляски с бубном не помогают.
gotch Автор
Кстати то, что клавиатура с мышью работает, может говорить что нормально работает сессия HTTP, а UDP оборвалась.
Попробуйте вот этой политикой отключить UDP:
andycher11
Была на некоторых машинах такая проблема, каким советуют помогло отключение на них UDP
vviz
С большой долей вероятности домашний ком использует беспроводной канал доступа в публичную сеть. Само использование UDP протокола для системы RDP, использующей подканал с командами управления, не есть хорошо. Плюс к этому VPN, который также очень чувствителен к потерям. Плюс особенности работы сети WiFi — это хаб, и в один момент времени обслуживает только одного клиента, причем скорость для остальных зависит от скорости самого «медленного» клиента. Из всего сказанного у меня есть личное мнение — для рабочих хостов должно использоваться проводное соединение. Дабы избежать текущих и возможных проблем. Нет возможности использовать «живой» кабель — использовать PowerLine системы.
qvan
Нет, вай-фай подключения в маршруте нет. Тут проблема в том, что тсп + удп в сстп. Плюс я умолчал, что в первой удаленке открывается вторая. Воткнул в первой на сервер отмену удп — не помогло. Дополнительно воткнул в первой на клиент отмену удп. Пока жду. Админ говорит, что потерь нет в сети ощутимых. В моей тоже — нет. На интернет не жалуюсь. Собственно, скорость в канале ограничена, чтобы с моей стороны не было нагрузки на оборудование админа и всем хватило канала.
qvan
не помогло, видимо, нужно весь путь переключать на отмену, зависания продолжаются, подергаю админа после карантина
edo1h
Выделенное «не» тут не лишнее? как может помочь FEC в сетях без потерь?
gotch Автор
Наверное, правильно было бы сказать не склонна к значительной потере пакетов. Во всякой сети без потерь есть потери, надо их только поискать.
На своей рабочей стации наблюдал не один раз, что если проблема началась с WiFi, то не согласуется UDP. Открываешь Wireshark — есть пара обменов на уровне Hello, и потом тишина. Может выпадают какие-то критичные для поднятия DTLS и тогда не будет UDP. Я попробовал посмотреть в спецификации протокола, но не нашел.
Но когда выпадает несколько пакетов из 1000, ничего плохого не происходит.
edo1h
всё равно я ваш пассаж не понял.
на проводных сетях обычно потери малы и вполне нормально обрабатываются обычным tcp с sack. для rdp тут может быть полезным не fec, а отсутствие slowstart после каждого случая потерь пакетов.
там же, где есть потери, fec может быть полезным. но вы пишете, что зачастую в этих случаях согласование не проходит и идёт fallback на tcp.
gotch Автор
Хорошо, давайте посмотрим документ [MS-RDPEUDP], 3.1.5.2 Connection Sequence, p34.
Возможно в этот момент происходит fallback на HTTP/TCP
teecat
Ну лицензию ради воспроизведения бага — святое дело, сделаем. Но вообще странно. Я от XP и 10ки RDP пользовался и никаких проблем с доктор веб
gotch Автор
Идёт подключение через RdGw, DrWeb видимо хочет проинспектировать как обычную браузерную tls сессию, встав MITM. Но что-то ломается. Если вы работаете в DrWeb, могу в личке рассказать.
AndreyKu
Спасибо за статью, подскажите есть какая-то возможность включить UDP транспорт если сервером выступает Windows Server 2008R2? Испытываю сильные проблемы с производительностью на удаленный клиентах. В интернетах написано что нужно минимум Server 2012
gotch Автор
Все верно, в старых статьях было написано так:
werter78
В тему.
Apache Guacamole как единая точка входа\GW для RDP,VNC,SSH.
ClearAirTurbulence
Небольшой оффтоп. Эта статья и обсуждение про протоколы и т.п., а вот с конца пользователя множественных подключений случайно наткнулся на замечательную программу, существенно упрощающую удаленную работу — mremoteng.org
Может, кому тоже пригодится. Поддерживаются RDP, VNC, SSH и др.
Free, open-source, portable, light-weight.
Единственная проблема — невозможность настройки некоторых клавиатурных сочетаний типа Ctrl+Alt+Del.
Вот еще обзор tabbed менеджеров.
networkproguide.com/best-remote-desktop-connection-managers-review
gotch Автор
Да, софтина неплохая, есть про нее пост.
В последнее время только разработка притормозилась, жаль.
Если вы много пользуетесь SSH, то после распыления pub ключей и обновления ssh-agent на свежий с github, то Windows Terminal тоже неплох.
LevOrdabesov
Несколько раз с удивлением замечал, что Remmina из-под Ubuntu работает по ощущениям шустрее родного клиента, авторизуется вообще мгновенно. Не потому ли, что умеет в UDP из коробки?
Naves
не умеет github.com/FreeRDP/FreeRDP/issues/4978
habr.com/en/post/501132/#comment_21593652
и вы про какой родной клиент?
gotch Автор
Мне кажется, что tcpdump udp port 3389 может дать ответ.
edo1h
тогда уж «что не умеет UDP»
Naves
Наваяли месяц назад скрипт на ракушке мощи, который из шаблона генерит RDP-файлы,
создает группы в AD для доступа пользователей на рабочие компы в домене,
создает политику на RDPGW c этой группой, (вот в этом месте периодически непонятная ошибка)
добавляет пользователя в группу на конкретном компе,
отключает засыпание компа.
на почту пользователю пока еще не отправляет.
gotch Автор
Мы используем шлюзе несколько предсозданных политик с парой «группа компьютеров»-«группа пользователей», в скрипте они уже не создаются, просто добавляем в группы.
На вход скрипта подается пара пользователь-компьютер.
Логика работы скрипта:
connection type:i:4
networkautodetect:i:0
bandwidthautodetect:i:1
allow font smoothing:i:0
disable wallpaper:i:1
allow desktop composition:i:1
frkbvfnjh
Чет ничего не понял — в Windows 10 сразу через UDP работает или нет?
gotch Автор
Сразу работает если открыт порт на клиенте udp\3389 и на Remote Desktop Gateway (если используется) udp\3391
frkbvfnjh
Спасибо, теперь понятнее!
Al_Tar
Спасибо за статью. Редко, когда увидишь неругательную статью о RDP… ИМХО возможности Remotefx (особенно RDP 8+) незаслуженно неизвестны. Я бы хотел видеть в статье упоминания о реальных "улучшайзерах", входящих (и уже давно) в RDP/Remotefx: сжатие в H.264 на стороне сервера/разжатие на стороне клиента, тэгирование разных областей десктопа в соответствии с их использованием( текст, видео,...) и назначение разных кодеков в связи с этим, video optimized remoting( VOR у меня на плохом длинном канале от мск до сан Франциско давал нормальный показ видео окошек, тогда как все текстовые жутко тормозили), usb redirection и т.п. Вкупе с UDP это сильно улучшает качество работы и снижает трафик. Засады? Конечно есть, и одна и основных — несоответствие версии клиента rdp/remotefx на клиенте версии сервера. К сожалению и rdp 8 на не-Win клиенте не широко распространено. Но если поискать, то и RDP 10 можно найти на не-Win терминалах.
gotch Автор
Изменения протокола RDP — это бездна, можно убедиться в этом, почитав спецификации. Поскольку настраивать (с видимым результатом) там уже нечего, я повременил с академическим интересом. Нет практической задачи организации работы на тонком канале — у 99% сотрудников дома интернет 50-100Mbit/s с задержкой 30-50ms (максимум 100ms).
Gvatgor
Если в качестве сервера используется Windows 7 sp1 X86, будет ли работать описанная схема? (Все обновления поставил, политикой все включил, но нет ключа [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows NT\Terminal Services] )
gotch Автор
Будет работать, добавьте через reg файл
Merlin5004
Скажите, а при использовании на клиентах (или на сервере) продуктов от касперского проблем с трафиком не возникает? Как-то мне сомнительно, что др.веб и касперский используют принципиально разные алгоритмы.
gotch Автор
На домашних клиентах Kaspersky Free, на сервере KSWS 10.1.2.996 CORE7. Компонент «Защита трафика» не установлен (из тех же соображений). В такой конфигурации проблем нет.
3aBulon
Что насчет другого клиента RDP на домашнем компе? Parallels, mRemoteNG?
gotch Автор
Будет ли разница, если они подтянут клиента из системы.
Вы можете посмотреть, как это сделано в mRemoteNG:
RdpProtocol9.cs
using AxMSTSCLib;
О выборе протокола в mRemoteNG.
dvglab
Самое главное то не сказали — вопрос лицензирования rd gw! VPN в отличие от, лицензирования не требует. А денег сейчас ни у кого нет.
gotch Автор
Денег нет, но мы держимся. Да, в Microsoft все авторизованные подключения пользователей требуют CAL, поэтому если у вас SAMBA+Windows 10+OpenVPN, то RDGW в схему не вписывается.
Mur81
Там с какой-то версии протокола, насколько я помню, убрали выбор глубины цвета. Т.е. на клиенте можно поставить 16 bpp, но работать всё равно будет в 32. В Windows Server 2008 R2 ещё работало, в 2012 R2 уже нет.
zveriun
Спасибо за статью. Давно интересует такой момент — можно ли через RDP работать в приложении, использующем OpenGL для ускорения графики? На пример Archicad. При подключении к серверу с архикадом — последний начинает ощутимо тормозить в 3d окне. И при запуске пишет соответствующее предупреждение. При работе через тим-вьювер таких проблем нет, но и работать сложно из-за задержки...
vakhor
Подключаюсь с 10-ки на 10-ку, не работает (все равно в русский приезжает еще и англ. раскладка). Гугл недоуменно разводит руками. Я тем более.
Может, подскажете еще какой вариант?
gotch Автор
Меняете на сервере, после этого перезагружались?
vakhor
Да, всё так.
И наличие/порядок раскладок на обоих компах одинаковый.