Comments 68
Даже если VPN позволяет подключиться к рабочим машинам напрямую — это не лучший вариант.
Почему?
С шлюзом легко решается задача мониторинга подключенных сотрудников — если в разгар рабочего дня число подключений стало стремительно падать — значит у нас проблема. Так же решается задача наработанного времени, хотя я ее и считаю бессмысленной, шлюз отлично пишет в журнал событий параметры завершенной сессии, в SQL тоже может писать, но нас не устроило то, что пишет NPS.
На шлюзе сразу отчетливо видна градация RCP, HTTP, UDP, можно обоснованно решать тикеты с проблемой «тормозит».
Итог: отчет через репортинг.
Всё красиво. Кто, откуда, куда, дата подключения и отключения.
Для себя в качестве 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
Но у сотрудников на домашних компьютерах она установлена, наверное штук 10 наберется. Видеть я ее, конечно, давно уже не видел — TeamViewer на XP не работает. :-)
На этих XP не то что бы Convenience Rollup не установлен, на них местами даже SP3 нет.
На стабильных тонких клиентах, которые выполняют свою задачу. Зачем мне обновлять парк машин на селике с 512 оперативки, если они по RDP успешно работают с сервером где у них нормальная ОС?
Иногда нужно развернуть еще какой-либо веб-сервис, других внешних IP-адресов нет, а перевешивать RDPGW на другой порт уже нет возможности (всем заново рассылать ярлыки)
К слову, мы рассылаем не файлы rdp, а персональную ссылку на их скачивание.
Всегда можно перекачать, и кто-то их каждый раз перекачивает. Содержимое этих файлов уже поменялось многократно, пока подобрали все устраивающие настройки.
Не пробовали перед RDP-шлюзом поставить что-нибудь типа nginx или haproxy?
я так понимаю, это убьёт UDP
Много лет работает через прокси на nginx и squid (в смысле на разных площадках по разному) с маппингом по имени домена.
Проблем нет. UDP тоже работает.
Не сталкивались с зависанием видеопотока в рдп? Причём мышь видна и нажатия отрабатывает, что видно после перезахода. Вин10 и вин2019 последние, через сстп-туннель. Скорость в туннеле ограничена до 10мб.
10mbit/s должно быть более чем достаточно, да в пике бывают всплески, но если усреднить (на 200-700 подключений), то одна сессия в среднем утилизирует полосу в 100kb/s.
Страдаю от аналогичной проблемы. И клиент и сервер win 10 ltsc. Проявляется регулярно, журналы никаких ошибок/предупреждений не содержат. Скорость — гигабит. Никакие пляски с бубном не помогают.
Была на некоторых машинах такая проблема, каким советуют помогло отключение на них UDP
Нет, вай-фай подключения в маршруте нет. Тут проблема в том, что тсп + удп в сстп. Плюс я умолчал, что в первой удаленке открывается вторая. Воткнул в первой на сервер отмену удп — не помогло. Дополнительно воткнул в первой на клиент отмену удп. Пока жду. Админ говорит, что потерь нет в сети ощутимых. В моей тоже — нет. На интернет не жалуюсь. Собственно, скорость в канале ограничена, чтобы с моей стороны не было нагрузки на оборудование админа и всем хватило канала.
Если ваша сеть не склонна к потере пакетов, UDP существенно (для CAD — радикально) повышает отзывчивость сервера за счет использования FEC для сокращения ретрансмиссии
Выделенное «не» тут не лишнее? как может помочь FEC в сетях без потерь?
На своей рабочей стации наблюдал не один раз, что если проблема началась с WiFi, то не согласуется UDP. Открываешь Wireshark — есть пара обменов на уровне Hello, и потом тишина. Может выпадают какие-то критичные для поднятия DTLS и тогда не будет UDP. Я попробовал посмотреть в спецификации протокола, но не нашел.
Но когда выпадает несколько пакетов из 1000, ничего плохого не происходит.
всё равно я ваш пассаж не понял.
на проводных сетях обычно потери малы и вполне нормально обрабатываются обычным tcp с sack. для rdp тут может быть полезным не fec, а отсутствие slowstart после каждого случая потерь пакетов.
там же, где есть потери, fec может быть полезным. но вы пишете, что зачастую в этих случаях согласование не проходит и идёт fallback на tcp.
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
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.
Apache Guacamole как единая точка входа\GW для RDP,VNC,SSH.
В последнее время только разработка притормозилась, жаль.
Если вы много пользуетесь SSH, то после распыления pub ключей и обновления ssh-agent на свежий с github, то Windows Terminal тоже неплох.
RDP-UDP
Несколько раз с удивлением замечал, что Remmina из-под Ubuntu работает по ощущениям шустрее родного клиента, авторизуется вообще мгновенно. Не потому ли, что умеет в UDP из коробки?
habr.com/en/post/501132/#comment_21593652
и вы про какой родной клиент?
Не потому ли, что умеет в UDP из коробки?
тогда уж «что не умеет UDP»
никакие настройки не помогают. Два раза наступил на эти грабли на линукс минте.
В первый раз как-то удалось откатиться после обновления, уже не помню подробности,
скорее всего сам обновлялся из девелоперского ппа.
А на днях пришла обнова стандартным способом, обновился и привет слайдшоу, откатиться не удалось.
Пришлось перейти на xfreerdp.
Было два хоста на одном внешнем IP + самоподписанные (фактически не настроенные) сертификаты для RDP. После настройки сертификатов скорость подключения стала почти мгновенной (именно подключения).
В работе принципиальной разницы не заметил с UDP и без (канал 4G). Хотя, к сожалению, RDP по-прежнему полностью уделывает реализаци VNC для Windows (в частности, например, WinVNC не соизволит обновлять экран при вводе с клавиатуры, совсем беда)
создает группы в 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
На вход скрипта подается пара пользователь-компьютер.
Логика работы скрипта:
- Добавить пользователя в пользовательскую группу
- Добавить компьютер в компьютерную группу
- Добавить пользователя на компьютер в Remote Desktop Users
- Опционально: фикс клавиатуры, отключение NLA.
- Сгенерировать rdp файл
- Подписать rdp файл сертификатом шлюза (чтобы не меняли настройки)
connection type:i:4
networkautodetect:i:0
bandwidthautodetect:i:1
allow font smoothing:i:0
disable wallpaper:i:1
allow desktop composition:i:1
Спасибо за статью. Редко, когда увидишь неругательную статью о RDP… ИМХО возможности Remotefx (особенно RDP 8+) незаслуженно неизвестны. Я бы хотел видеть в статье упоминания о реальных "улучшайзерах", входящих (и уже давно) в RDP/Remotefx: сжатие в H.264 на стороне сервера/разжатие на стороне клиента, тэгирование разных областей десктопа в соответствии с их использованием( текст, видео,...) и назначение разных кодеков в связи с этим, video optimized remoting( VOR у меня на плохом длинном канале от мск до сан Франциско давал нормальный показ видео окошек, тогда как все текстовые жутко тормозили), usb redirection и т.п. Вкупе с UDP это сильно улучшает качество работы и снижает трафик. Засады? Конечно есть, и одна и основных — несоответствие версии клиента rdp/remotefx на клиенте версии сервера. К сожалению и rdp 8 на не-Win клиенте не широко распространено. Но если поискать, то и RDP 10 можно найти на не-Win терминалах.
Вы можете посмотреть, как это сделано в mRemoteNG:
RdpProtocol9.cs
using AxMSTSCLib;
О выборе протокола в mRemoteNG.
Самое главное то не сказали — вопрос лицензирования rd gw! VPN в отличие от, лицензирования не требует. А денег сейчас ни у кого нет.
Там с какой-то версии протокола, насколько я помню, убрали выбор глубины цвета. Т.е. на клиенте можно поставить 16 bpp, но работать всё равно будет в 32. В Windows Server 2008 R2 ещё работало, в 2012 R2 уже нет.
Спасибо за статью. Давно интересует такой момент — можно ли через RDP работать в приложении, использующем OpenGL для ускорения графики? На пример Archicad. При подключении к серверу с архикадом — последний начинает ощутимо тормозить в 3d окне. И при запуске пишет соответствующее предупреждение. При работе через тим-вьювер таких проблем нет, но и работать сложно из-за задержки...
Иногда приезжают лишние раскладки. Можно отключить проброс раскладки с клиента
[HKLM\System\CurrentControlSet\Control\Keyboard Layout]
«IgnoreRemoteKeyboardLayout»=dword:00000001
Подключаюсь с 10-ки на 10-ку, не работает (все равно в русский приезжает еще и англ. раскладка). Гугл недоуменно разводит руками. Я тем более.
Может, подскажете еще какой вариант?
Так вот, после
[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 уже имеет доступ», вручную добавить пользователя в список.
RDP-UDP поддерживается начиная с RDP 8.
На клиенте должен быть открыт порт udp/3389
Если порт RDP задан нестандартный, то фокус с UDP вообще не заработает, т.е.?
Как сделать работу с Microsoft Remote Desktop лучше