Pull to refresh

Comments 68

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

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

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

На шлюзе сразу отчетливо видна градация RCP, HTTP, UDP, можно обоснованно решать тикеты с проблемой «тормозит».
Скриптом собираю лог винды gateway/operation, далее в csv, далее в SQL.
Итог: отчет через репортинг.
Всё красиво. Кто, откуда, куда, дата подключения и отключения.
Красивый вариант. В нашем случае учет забрали на себя разработчики.
Для себя в качестве 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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

Хорошо, давайте посмотрим документ [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
Ну лицензию ради воспроизведения бага — святое дело, сделаем. Но вообще странно. Я от XP и 10ки RDP пользовался и никаких проблем с доктор веб

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

Спасибо за статью, подскажите есть какая-то возможность включить UDP транспорт если сервером выступает Windows Server 2008R2? Испытываю сильные проблемы с производительностью на удаленный клиентах. В интернетах написано что нужно минимум Server 2012
Все верно, в старых статьях было написано так:
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.

UFO just landed and posted this here
Да, софтина неплохая, есть про нее пост.
В последнее время только разработка притормозилась, жаль.
Если вы много пользуетесь SSH, то после распыления pub ключей и обновления ssh-agent на свежий с github, то Windows Terminal тоже неплох.
RDP-UDP


Несколько раз с удивлением замечал, что Remmina из-под Ubuntu работает по ощущениям шустрее родного клиента, авторизуется вообще мгновенно. Не потому ли, что умеет в UDP из коробки?
Мне кажется, что tcpdump udp port 3389 может дать ответ.
Не потому ли, что умеет в UDP из коробки?

тогда уж «что не умеет UDP»

С ремминой есть странности. Если пользоваться старыми версиями (1.1, когда в авторах был указан Вик Ли), то при подключении к win7 работает отлично. А с более поздними (1.2-1.4, когда появились эти Джованни и Антеноре и remmina стала next), возникает натуральное слайдшоу, пользоваться невозможно,
никакие настройки не помогают. Два раза наступил на эти грабли на линукс минте.
В первый раз как-то удалось откатиться после обновления, уже не помню подробности,
скорее всего сам обновлялся из девелоперского ппа.
А на днях пришла обнова стандартным способом, обновился и привет слайдшоу, откатиться не удалось.
Пришлось перейти на xfreerdp.
Naves gotch edo1h wlr398 Разобрался.
Было два хоста на одном внешнем IP + самоподписанные (фактически не настроенные) сертификаты для RDP. После настройки сертификатов скорость подключения стала почти мгновенной (именно подключения).
В работе принципиальной разницы не заметил с UDP и без (канал 4G). Хотя, к сожалению, RDP по-прежнему полностью уделывает реализаци VNC для Windows (в частности, например, WinVNC не соизволит обновлять экран при вводе с клавиатуры, совсем беда)
Наваяли месяц назад скрипт на ракушке мощи, который из шаблона генерит 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

Мы используем шлюзе несколько предсозданных политик с парой «группа компьютеров»-«группа пользователей», в скрипте они уже не создаются, просто добавляем в группы.
На вход скрипта подается пара пользователь-компьютер.
Логика работы скрипта:
  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

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

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

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

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

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

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

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

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


Подключаюсь с 10-ки на 10-ку, не работает (все равно в русский приезжает еще и англ. раскладка). Гугл недоуменно разводит руками. Я тем более.
Может, подскажете еще какой вариант?
Меняете на сервере, после этого перезагружались?
Я «админ локалхоста», поэтому в качестве сервера у меня виртуалки, а на них я захожу с хоста по 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 уже имеет доступ», вручную добавить пользователя в список.
Права на подключение находятся в Local Security Policy\User Rights Assignment\Allow Logon through RDS. По умолчанию право дано локальным группа Administrators, Remote Desktop Users. Добавляете во вторую группу, и всё.
RDP-UDP поддерживается начиная с RDP 8.
На клиенте должен быть открыт порт udp/3389


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

Articles