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

    Хочу поделиться несколькими советами по настройке удаленного подключения к рабочим местам по 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 легко определить по внешнему виду полоски подключения.



    Здесь нет значка качества подключения (о нем ниже), а значит мы используем старый 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 серверной части ОС.
    Было:





    Стало:



    После этого протокол надо включить ключом реестра (для этого можно использовать 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
    

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

    Если вы молоды и дерзки ничего не боитесь, то есть более радикальное решение — отключение Channel Binding на 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

    Компонент 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.

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

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

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

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

    Подробнее
    Реклама

    Комментарии 66

      0
      Даже если VPN позволяет подключиться к рабочим машинам напрямую — это не лучший вариант.

      Почему?
        +3
        Шлюз гибкая штука, на нем можно писать политики, можно принудительно отключать пользователей, можно мгновенно запретить подключение какой-то группе, выведя их компьютеры на обслуживание. Можно заставлять авторизоваться по токену всем или определенным группам, отключать проброс дисков и принтеров — прямо на шлюзе, мгновенно, без групповых политик.

        С шлюзом легко решается задача мониторинга подключенных сотрудников — если в разгар рабочего дня число подключений стало стремительно падать — значит у нас проблема. Так же решается задача наработанного времени, хотя я ее и считаю бессмысленной, шлюз отлично пишет в журнал событий параметры завершенной сессии, в SQL тоже может писать, но нас не устроило то, что пишет NPS.

        На шлюзе сразу отчетливо видна градация RCP, HTTP, UDP, можно обоснованно решать тикеты с проблемой «тормозит».
          0
          Скриптом собираю лог винды gateway/operation, далее в csv, далее в SQL.
          Итог: отчет через репортинг.
          Всё красиво. Кто, откуда, куда, дата подключения и отключения.
            +1
            Красивый вариант. В нашем случае учет забрали на себя разработчики.
            Для себя в качестве prrof-of-concept накидывал такой
            примитивный скрипт
            $export=[xml]((get-content E:\rdgw\Microsoft-Windows-TerminalServices-Gateway-Operational.xml))
            $events = $export.Events.event
            $recordset = @();
            foreach ($event in $events){
            if ($event.system.EventID -eq 303){
            
            $record = [PSCustomObject]@{
                Date     = get-date $event.System.TimeCreated.SystemTime
                Username = $event.Userdata.EventInfo.Username
                Duration = [decimal]$event.Userdata.EventInfo.Sessionduration
            }
            $recordset+=$record
            
            }
            }
            $recordset|sort Date|?{$_.Username -eq 'DELOS\William'}|measure Duration -Sum
            


        –2
        Сейчас уже 7-ка редкость, а вы пишите про XP, где вы ее видели в последний раз?
          +2
          На работе нет конечно.
          Но у сотрудников на домашних компьютерах она установлена, наверное штук 10 наберется. Видеть я ее, конечно, давно уже не видел — TeamViewer на XP не работает. :-)
          На этих XP не то что бы Convenience Rollup не установлен, на них местами даже SP3 нет.
            +8

            На стабильных тонких клиентах, которые выполняют свою задачу. Зачем мне обновлять парк машин на селике с 512 оперативки, если они по RDP успешно работают с сервером где у них нормальная ОС?

              +1
              На такой клиент особо ничего другое не поставишь (кроме Linux), и только для того, чтобы поднять протокол до 8. Но если не надо тяжелых приложений, то и смысла нет, RDP 7 неплох.
                +2

                BTW, ИМХО в статью стоит добавить, что на сегодняшний момент xfreerdp умеет http, udp не умеет.
                линуксовых клиентов сегодня явно больше, чем xp )

                  +1
                  Спасибо Вам! В статью и правда было бы здорово добавить.
              0
              У нас на домашних компьютерах и, иногда, на работе.
              0
              Не пробовали перед RDP-шлюзом поставить что-нибудь типа nginx или haproxy?
              Иногда нужно развернуть еще какой-либо веб-сервис, других внешних IP-адресов нет, а перевешивать RDPGW на другой порт уже нет возможности (всем заново рассылать ярлыки)
                +1
                Нет, так не делали.
                К слову, мы рассылаем не файлы rdp, а персональную ссылку на их скачивание.
                Всегда можно перекачать, и кто-то их каждый раз перекачивает. Содержимое этих файлов уже поменялось многократно, пока подобрали все устраивающие настройки.
                  +1
                  Кстати, хорошая идея рассылать ссылку на скачивание вместо файлов, спасибо!
                  0
                  Не пробовали перед RDP-шлюзом поставить что-нибудь типа nginx или haproxy?

                  я так понимаю, это убьёт UDP

                    0
                    UDP можно держать на отдельном «прямом» свободном порте, RDGW сам подскажет его клиенту при подключении. У меня сомнения, что nginx сможет проксировать, haproxy, думаю да, но он в этой ситуации не поможет.
                    0

                    Много лет работает через прокси на nginx и squid (в смысле на разных площадках по разному) с маппингом по имени домена.
                    Проблем нет. UDP тоже работает.

                      +1
                      Поделитесь конфигом?
                      0
                      Перед rdp-шлюзом стоит nginx, работает только транспорт RPC-HTTP через задание в location return 404 на /remoteDesktopGateway, обычный проброс udp-порта на машрутизаторе до rdp-шлюза не работает, видимо как-то надо настраивать nginx stream, но нигде нет инструкций, как это сделать.
                      0

                      Не сталкивались с зависанием видеопотока в рдп? Причём мышь видна и нажатия отрабатывает, что видно после перезахода. Вин10 и вин2019 последние, через сстп-туннель. Скорость в туннеле ограничена до 10мб.

                        +2
                        Нет, не сталкивался, и даже не знаю подход к этому черному ящику кроме как через журналы событий. Красиво, конечно, что Microsoft все упаковала в TLS, но теперь любой траблшутинг превращается в приключение с дешифровкой TLS.
                        10mbit/s должно быть более чем достаточно, да в пике бывают всплески, но если усреднить (на 200-700 подключений), то одна сессия в среднем утилизирует полосу в 100kb/s.
                          0

                          Страдаю от аналогичной проблемы. И клиент и сервер win 10 ltsc. Проявляется регулярно, журналы никаких ошибок/предупреждений не содержат. Скорость — гигабит. Никакие пляски с бубном не помогают.

                            0
                            Кстати то, что клавиатура с мышью работает, может говорить что нормально работает сессия HTTP, а UDP оборвалась.
                            Попробуйте вот этой политикой отключить UDP:
                            image
                            0

                            Была на некоторых машинах такая проблема, каким советуют помогло отключение на них UDP

                              0
                              С большой долей вероятности домашний ком использует беспроводной канал доступа в публичную сеть. Само использование UDP протокола для системы RDP, использующей подканал с командами управления, не есть хорошо. Плюс к этому VPN, который также очень чувствителен к потерям. Плюс особенности работы сети WiFi — это хаб, и в один момент времени обслуживает только одного клиента, причем скорость для остальных зависит от скорости самого «медленного» клиента. Из всего сказанного у меня есть личное мнение — для рабочих хостов должно использоваться проводное соединение. Дабы избежать текущих и возможных проблем. Нет возможности использовать «живой» кабель — использовать PowerLine системы.
                                0

                                Нет, вай-фай подключения в маршруте нет. Тут проблема в том, что тсп + удп в сстп. Плюс я умолчал, что в первой удаленке открывается вторая. Воткнул в первой на сервер отмену удп — не помогло. Дополнительно воткнул в первой на клиент отмену удп. Пока жду. Админ говорит, что потерь нет в сети ощутимых. В моей тоже — нет. На интернет не жалуюсь. Собственно, скорость в канале ограничена, чтобы с моей стороны не было нагрузки на оборудование админа и всем хватило канала.

                                  0
                                  не помогло, видимо, нужно весь путь переключать на отмену, зависания продолжаются, подергаю админа после карантина
                              0
                              Если ваша сеть не склонна к потере пакетов, UDP существенно (для CAD — радикально) повышает отзывчивость сервера за счет использования FEC для сокращения ретрансмиссии

                              Выделенное «не» тут не лишнее? как может помочь FEC в сетях без потерь?

                                0
                                Наверное, правильно было бы сказать не склонна к значительной потере пакетов. Во всякой сети без потерь есть потери, надо их только поискать.
                                На своей рабочей стации наблюдал не один раз, что если проблема началась с WiFi, то не согласуется UDP. Открываешь Wireshark — есть пара обменов на уровне Hello, и потом тишина. Может выпадают какие-то критичные для поднятия DTLS и тогда не будет UDP. Я попробовал посмотреть в спецификации протокола, но не нашел.
                                Но когда выпадает несколько пакетов из 1000, ничего плохого не происходит.
                                  0

                                  всё равно я ваш пассаж не понял.


                                  на проводных сетях обычно потери малы и вполне нормально обрабатываются обычным tcp с sack. для rdp тут может быть полезным не fec, а отсутствие slowstart после каждого случая потерь пакетов.


                                  там же, где есть потери, fec может быть полезным. но вы пишете, что зачастую в этих случаях согласование не проходит и идёт fallback на tcp.

                                    0
                                    Хорошо, давайте посмотрим документ [MS-RDPEUDP], 3.1.5.2 Connection Sequence, p34.
                                    The server receives an ACK for the SYN+ACK datagram sent. If the terminal server does not
                                    receive a response for a SYN + ACK datagram that was retransmitted at least three and no
                                    more than five times, the endpoint will enter the Closed state.

                                    RDPUDP_PROTOCOL_VERSION_1: the minimum retransmit time-out is 500 ms.
                                    RDPUDP_PROTOCOL_VERSION_2: the minimum retransmit time-out is 300 ms

                                    Возможно в этот момент происходит fallback на HTTP/TCP
                                0
                                Ну лицензию ради воспроизведения бага — святое дело, сделаем. Но вообще странно. Я от XP и 10ки RDP пользовался и никаких проблем с доктор веб
                                  0

                                  Идёт подключение через RdGw, DrWeb видимо хочет проинспектировать как обычную браузерную tls сессию, встав MITM. Но что-то ломается. Если вы работаете в DrWeb, могу в личке рассказать.

                                  0
                                  Спасибо за статью, подскажите есть какая-то возможность включить UDP транспорт если сервером выступает Windows Server 2008R2? Испытываю сильные проблемы с производительностью на удаленный клиентах. В интернетах написано что нужно минимум Server 2012
                                    0
                                    Все верно, в старых статьях было написано так:
                                    Are the RemoteFX and RDP 8.0 enhancements available for Windows Server 2008 R2 Remote Desktop Session Host?

                                    No, the RemoteFX and RDP 8.0 enhancements are not available for Windows Server 2008 R2 Session Host. However, a Windows Server 2008 R2 computer acting as a client access device will still get the Remote Desktop Connection 8.0 client and thereby get the benefits listed in the ‘client access devices’ section earlier.

                                    0
                                    В тему.
                                    Apache Guacamole как единая точка входа\GW для RDP,VNC,SSH.
                                      +1
                                      Небольшой оффтоп. Эта статья и обсуждение про протоколы и т.п., а вот с конца пользователя множественных подключений случайно наткнулся на замечательную программу, существенно упрощающую удаленную работу — mremoteng.org
                                      Может, кому тоже пригодится. Поддерживаются RDP, VNC, SSH и др.
                                      Free, open-source, portable, light-weight.
                                      Единственная проблема — невозможность настройки некоторых клавиатурных сочетаний типа Ctrl+Alt+Del.

                                      Вот еще обзор tabbed менеджеров.
                                      networkproguide.com/best-remote-desktop-connection-managers-review
                                        0
                                        Да, софтина неплохая, есть про нее пост.
                                        В последнее время только разработка притормозилась, жаль.
                                        Если вы много пользуетесь SSH, то после распыления pub ключей и обновления ssh-agent на свежий с github, то Windows Terminal тоже неплох.
                                        0
                                        RDP-UDP


                                        Несколько раз с удивлением замечал, что Remmina из-под Ubuntu работает по ощущениям шустрее родного клиента, авторизуется вообще мгновенно. Не потому ли, что умеет в UDP из коробки?
                                        +1
                                        Наваяли месяц назад скрипт на ракушке мощи, который из шаблона генерит RDP-файлы,
                                        создает группы в AD для доступа пользователей на рабочие компы в домене,
                                        создает политику на RDPGW c этой группой, (вот в этом месте периодически непонятная ошибка)
                                        добавляет пользователя в группу на конкретном компе,
                                        отключает засыпание компа.
                                        на почту пользователю пока еще не отправляет.
                                        скрыпт
                                        param(
                                            [Parameter(Position=0,Mandatory=$false)]
                                            [string]$arg_host,
                                        	[Parameter(Position=1,Mandatory=$false)]
                                            [string]$arg_user
                                        )
                                        
                                        if ($arg_host -eq ""){
                                        	#Добавление компьютера и пользователя для удаленного доступа
                                        	Write-Host "Введите имя хоста в формате XXXX-X"
                                        	$hname_short =  Read-Host
                                        }
                                        else{
                                        	$hname_short=$arg_host
                                        }
                                        
                                        if ($arg_user -eq ""){
                                        	Write-Host "Введите имя пользователя"
                                        	$uname = Read-Host
                                        	Write-Host "Введите комментарий (кто, что)"
                                        	$comment = Read-Host
                                        }
                                        else{
                                        	$uname=$arg_user
                                        }
                                        
                                        $hname_full = "k-"+$hname_short
                                        Write-Host $hname_full
                                        $group_name = $hname_short+"-group"
                                        
                                        #Проверяем, существует-ли группа
                                        $is = ""
                                        $is = Get-AdGroup -filter * | Where {$_.name -like $group_name} | fl name
                                        if ($is -eq "")
                                        {
                                        	Write-Host "Группа уже существует"
                                        }
                                        #Добавляем группу если она не существует
                                        else
                                        {
                                            New-ADGroup $group_name -path 'OU=Groups,OU=_MYDOMAIN_,DC=local,dc=_MYDOMAIN_,DC=ru' -GroupScope Global -PassThru –Verbose
                                            Set-ADGroup -Identity $group_name -Description $comment
                                        }
                                        
                                        #Добавляем Пользователя и компьютер в группу
                                        try
                                        {
                                        	$cmp = Get-ADComputer -Identity $hname_full
                                        	Add-ADGroupMember -Identity $group_name -Members $uname, $cmp
                                        } 
                                        catch 
                                        {
                                        	Write-Host "Не удалось добавить пользователя и/или компьютер"
                                        }
                                        
                                        #Добавляем пользователя в группу "Пользователи удаленного рабочего стола" на локальном компьютере
                                        try
                                        {
                                        Invoke-Command -ComputerName $hname_full {param($funame) Add-LocalGroupMember -Group "Пользователи удаленного рабочего стола" -Member $funame } -Arg $uname
                                        } 
                                        catch
                                        {
                                        	Write-Host "Не удалось создать локального пользователя"
                                        }
                                        
                                        Write-Host "Disabling standby and hibernate"
                                        Invoke-Command -ComputerName $hname_full -ScriptBlock {
                                        	powercfg.exe -x -standby-timeout-ac 0
                                        	powercfg.exe -x -standby-timeout-dc 0
                                        	powercfg.exe -x -hibernate-timeout-ac 0
                                        	powercfg.exe -x -hibernate-timeout-dc 0
                                        }
                                        
                                        Write-Host "process in rds:\GatewayServer\rap"
                                        
                                        $rapgroupname = $group_name+"@_MYDOMAIN_"
                                        Import-Module RemoteDesktopServices
                                        cd rds:\GatewayServer\rap
                                        New-Item -Name "$group_name" -Usergroups "$rapgroupname" -ComputerGroupType 1 -ComputerGroup "$rapgroupname"
                                        cd c:
                                        $text = Get-Content C:\data\scripts\shablon.rdp
                                        $text = $text -replace 'CAMUSERNAME', $uname
                                        $text = $text -replace 'CAMCOMPNAME', $hname_full
                                        $newfilename = "C:\data\scripts\"+$hname_full +"_" +$uname +".rdp"
                                        Set-Content $newfilename $text
                                        


                                        шаблон
                                        screen mode id:i:2
                                        use multimon:i:0
                                        desktopwidth:i:1920
                                        desktopheight:i:1080
                                        session bpp:i:32
                                        winposstr:s:0,1,0,0,800,600
                                        compression:i:1
                                        keyboardhook:i:2
                                        audiocapturemode:i:0
                                        videoplaybackmode:i:1
                                        connection type:i:7
                                        networkautodetect:i:1
                                        bandwidthautodetect:i:1
                                        displayconnectionbar:i:1
                                        enableworkspacereconnect:i:0
                                        disable wallpaper:i:0
                                        allow font smoothing:i:0
                                        allow desktop composition:i:0
                                        disable full window drag:i:1
                                        disable menu anims:i:1
                                        disable themes:i:0
                                        disable cursor setting:i:0
                                        bitmapcachepersistenable:i:1
                                        full address:s:CAMCOMPNAME
                                        audiomode:i:0
                                        redirectprinters:i:1
                                        redirectcomports:i:0
                                        redirectsmartcards:i:1
                                        redirectclipboard:i:1
                                        redirectposdevices:i:0
                                        autoreconnection enabled:i:1
                                        authentication level:i:2
                                        prompt for credentials:i:0
                                        negotiate security layer:i:1
                                        remoteapplicationmode:i:0
                                        alternate shell:s:
                                        shell working directory:s:
                                        gatewayhostname:s:remote._MYDOMAIN_.ru
                                        gatewayusagemethod:i:1
                                        gatewaycredentialssource:i:4
                                        gatewayprofileusagemethod:i:1
                                        promptcredentialonce:i:1
                                        gatewaybrokeringtype:i:0
                                        use redirection server name:i:0
                                        rdgiskdcproxy:i:0
                                        kdcproxyname:s:
                                        username:s:_MYDOMAIN_\CAMUSERNAME
                                        

                                          0
                                          Мы используем шлюзе несколько предсозданных политик с парой «группа компьютеров»-«группа пользователей», в скрипте они уже не создаются, просто добавляем в группы.
                                          На вход скрипта подается пара пользователь-компьютер.
                                          Логика работы скрипта:
                                          1. Добавить пользователя в пользовательскую группу
                                          2. Добавить компьютер в компьютерную группу
                                          3. Добавить пользователя на компьютер в Remote Desktop Users
                                          4. Опционально: фикс клавиатуры, отключение NLA.
                                          5. Сгенерировать rdp файл
                                          6. Подписать rdp файл сертификатом шлюза (чтобы не меняли настройки)
                                          Настройки RDP
                                          session bpp:i:16
                                          connection type:i:4
                                          networkautodetect:i:0
                                          bandwidthautodetect:i:1
                                          allow font smoothing:i:0
                                          disable wallpaper:i:1
                                          allow desktop composition:i:1

                                          0
                                          Чет ничего не понял — в Windows 10 сразу через UDP работает или нет?
                                            0
                                            Сразу работает если открыт порт на клиенте udp\3389 и на Remote Desktop Gateway (если используется) udp\3391
                                              0
                                              Спасибо, теперь понятнее!
                                            +2

                                            Спасибо за статью. Редко, когда увидишь неругательную статью о RDP… ИМХО возможности Remotefx (особенно RDP 8+) незаслуженно неизвестны. Я бы хотел видеть в статье упоминания о реальных "улучшайзерах", входящих (и уже давно) в RDP/Remotefx: сжатие в H.264 на стороне сервера/разжатие на стороне клиента, тэгирование разных областей десктопа в соответствии с их использованием( текст, видео,...) и назначение разных кодеков в связи с этим, video optimized remoting( VOR у меня на плохом длинном канале от мск до сан Франциско давал нормальный показ видео окошек, тогда как все текстовые жутко тормозили), usb redirection и т.п. Вкупе с UDP это сильно улучшает качество работы и снижает трафик. Засады? Конечно есть, и одна и основных — несоответствие версии клиента rdp/remotefx на клиенте версии сервера. К сожалению и rdp 8 на не-Win клиенте не широко распространено. Но если поискать, то и RDP 10 можно найти на не-Win терминалах.

                                              0
                                              Изменения протокола RDP — это бездна, можно убедиться в этом, почитав спецификации. Поскольку настраивать (с видимым результатом) там уже нечего, я повременил с академическим интересом. Нет практической задачи организации работы на тонком канале — у 99% сотрудников дома интернет 50-100Mbit/s с задержкой 30-50ms (максимум 100ms).
                                              0
                                              Если в качестве сервера используется Windows 7 sp1 X86, будет ли работать описанная схема? (Все обновления поставил, политикой все включил, но нет ключа [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows NT\Terminal Services] )
                                                0
                                                Будет работать, добавьте через reg файл
                                                [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services]
                                                "fServerEnableRDP8"=dword:00000001
                                                0
                                                Скажите, а при использовании на клиентах (или на сервере) продуктов от касперского проблем с трафиком не возникает? Как-то мне сомнительно, что др.веб и касперский используют принципиально разные алгоритмы.
                                                  0
                                                  На домашних клиентах Kaspersky Free, на сервере KSWS 10.1.2.996 CORE7. Компонент «Защита трафика» не установлен (из тех же соображений). В такой конфигурации проблем нет.
                                                  0
                                                  Что насчет другого клиента RDP на домашнем компе? Parallels, mRemoteNG?
                                                  0

                                                  Самое главное то не сказали — вопрос лицензирования rd gw! VPN в отличие от, лицензирования не требует. А денег сейчас ни у кого нет.

                                                    0
                                                    Денег нет, но мы держимся. Да, в Microsoft все авторизованные подключения пользователей требуют CAL, поэтому если у вас SAMBA+Windows 10+OpenVPN, то RDGW в схему не вписывается.
                                                    0

                                                    Там с какой-то версии протокола, насколько я помню, убрали выбор глубины цвета. Т.е. на клиенте можно поставить 16 bpp, но работать всё равно будет в 32. В Windows Server 2008 R2 ещё работало, в 2012 R2 уже нет.

                                                      0

                                                      Спасибо за статью. Давно интересует такой момент — можно ли через RDP работать в приложении, использующем OpenGL для ускорения графики? На пример Archicad. При подключении к серверу с архикадом — последний начинает ощутимо тормозить в 3d окне. И при запуске пишет соответствующее предупреждение. При работе через тим-вьювер таких проблем нет, но и работать сложно из-за задержки...

                                                        0
                                                        Иногда приезжают лишние раскладки. Можно отключить проброс раскладки с клиента
                                                        [HKLM\System\CurrentControlSet\Control\Keyboard Layout]
                                                        «IgnoreRemoteKeyboardLayout»=dword:00000001


                                                        Подключаюсь с 10-ки на 10-ку, не работает (все равно в русский приезжает еще и англ. раскладка). Гугл недоуменно разводит руками. Я тем более.
                                                        Может, подскажете еще какой вариант?
                                                          0
                                                          Меняете на сервере, после этого перезагружались?
                                                            0
                                                            Да, всё так.
                                                            И наличие/порядок раскладок на обоих компах одинаковый.
                                                          0
                                                          Я «админ локалхоста», поэтому в качестве сервера у меня виртуалки, а на них я захожу с хоста по RDP.

                                                          Так вот, после
                                                          [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services]
                                                          "fServerEnableRDP8"=dword:00000001

                                                          попытка войти по RDP на машину с Windows 7 начала заканчиваться сообщением «The connection was denied because the user account is not authorized».

                                                          Решение найденное методом тыка: нужно сходить в «Мой компьютер → Свойства → Удаленный доступ → Выбрать пользователей» и, несмотря на то, что там написано «username уже имеет доступ», вручную добавить пользователя в список.
                                                            0
                                                            Права на подключение находятся в Local Security Policy\User Rights Assignment\Allow Logon through RDS. По умолчанию право дано локальным группа Administrators, Remote Desktop Users. Добавляете во вторую группу, и всё.
                                                            0
                                                            RDP-UDP поддерживается начиная с RDP 8.
                                                            На клиенте должен быть открыт порт udp/3389


                                                            Если порт RDP задан нестандартный, то фокус с UDP вообще не заработает, т.е.?
                                                              0
                                                              Лучше в Wireshark посмотреть, что происходить. Если вы одновременно публикуете, допустим tcp\13389 -> tcp\3389 и udp\13389 -> udp\3389, то не работает?

                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                            Самое читаемое