Удаленный пользователь не может подключиться к RDS ферме

Обновлено 24.09.2019

RDP logo

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов России Pyatilistnik.org. В прошлый раз мы с вами успешно научились решать ошибку "pfn list corrupt" в операционной системе Windows 10. Движемся дальше, в данной публикации я бы хотел с вами поделиться небольшим опытом поиска проблемы с подключением по RDP. В данной публикации мы рассмотрим вопрос, почему удаленный пользователь не может подключиться к RDS ферме Windows Server 2012 R2.

Описание проблемы

И так, есть RDS ферма построенная на базе Windows Server 2012 R2, состоящая из 15 хостов. В нее было добавлено еще 5 RDSH хостов. В компании люди работают с терминальным столом, как локально, так и удаленно, посредством подключения через VPN в корпоративную сеть и дальше уже к ферме. Вот как раз у таких VPN пользователей и стали возникать непонятные ситуации. При попытке подключения по RDP у них появлялась ошибка:

Удаленному рабочему столу не удалось подключиться к удаленному компьютеру по одной из следующих причин:

  1. Не включен удаленный рабочий стол
  2. Удаленный компьютер выключен
  3. Удаленный компьютер не подключен к сети

Удостоверьтесь, что удаленный компьютер включен, подключен к сети и удаленный доступ к нему включен

Ошибка подключения к RDS

Решение проблемы

Ошибка вроде очевидная, что не включен RDP доступ, если бы это был рядовой сервер я бы понял, но тут служба удаленного доступа точно работала и была включена, так как на данный сервер так же распространялась групповая политика делающая, это автоматически, я проверил применение GPO, все было хорошо. Первым делом я полез смотреть логи Windows, это можно сделать классическим методом или через модный Windows Admin Center.

Журналы которые нас будут интересовать находятся в таких расположениях:

  • Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational
  • Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational
  • Microsoft-Windows-TerminalServices-SessionBroker/Admin
  • Microsoft-Windows-TerminalServices-SessionBroker/Operational
  • Microsoft-Windows-TerminalServices-SessionBroker-Client/Operational

Строим алгоритм обычного пользователя работающего удаленно. Сотрудник подключается к VPN серверу, после успешного подключения, он запускает клиента удаленного рабочего стола и производит подключение к RDS ферме. Далее сотрудник проходит успешно аутентификацию, его логин и пароль принимается брокерами RDS, далее идет процесс подключения, который заканчивается представленной выше ошибкой.

Первое, что мне бросилось в глаза, это предупреждение с кодом ID 101:

ID 101 RemoteDesktopServices-RdpCoreTS: The network characteristics detection function has been disabled because of Reason Code: 2(Server Configuration).

D 101 RemoteDesktopServices-RdpCoreTS: The network characteristics detection function has been disabled because of Reason Code: 2(Server Configuration)

Далее было такое предупреждение:

Событие с кодом ID 226: RDP_UDPLOSSY: An error was encountered when transitioning from UdpLossyStateSynRecv in response to UdpEventErrorHandshakeTO (error code 0x80040004).

Событие с кодом ID 226: RDP_UDPLOSSY: An error was encountered when transitioning from UdpLossyStateSynRecv

Далее нужно посмотреть, как RDCB брокеры взаимодействовали с сессией пользователя. В журнале "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" я обнаружил событие с кодом ID 1149, в котором я вижу, что определенный пользователь был успешно аутентифицирован на RDS ферме, он получил некий IP адрес.

Remote Desktop Services: User authentication succeeded:
User: vpn_user
Domain: Root.PYATILISTNIK.ORG
Source Network Address: 10.10.31.47

ID 1149

Далее я стал изучать информацию из журнала "Microsoft-Windows-TerminalServices-SessionBroker/Operational". Тут я так же обнаружил, что брокер успешно ответил и отправил пользователя на определенный RDSH хост. Тут есть событие с кодом ID 787.

Remote Desktop Services: User authentication succeeded

Событие с кодом ID 787: Session for user ROOT\vpn_user successfully added to RD Connection Broker's database.
Target Name = term01.root.pyatilistnik.org
Session ID = 18
Farm Name = TermRoot

Событие с кодом ID 787: Session for user ROOT\vpn_user successfully added to RD Connection Broker's database

За ним я видел событие с кодом ID 801, которое имело вот такое сообщение:

RD Connection Broker successfully processed the connection request for user ROOT\vpn_user. Redirection info:
Target Name = TERM01
Target IP Address = 10.10.31.47
Target Netbios = TERM01
Target FQDN = term01.root.pyatilistnik.org
Disconnected Session Found = 0x0

RD Connection Broker successfully processed the connection request for user ROOT\vpn_user. Redirection info

тут видно, что брокер даже смог обнаружить предыдущую сессию на данном терминале, о чем говорит строка Disconnected Session Found = 0x0

И вы увидите событие с кодом ID 800:

RD Connection Broker received connection request for user ROOT\vpn-user.
Hints in the RDP file (TSV URL) = tsv://MS Terminal Services Plugin.1.TermRoot
Initial Application = NULL
Call came from Redirector Server = TERMRDCB.root.pyatilistnik.org
Redirector is configured as Virtual machine redirector

RD Connection Broker received connection request for user ROOT\vpn-user.

тут видно, что определенный брокер успешно направил пользователя на определенную коллекцию.

Далее переходим в журнал "Microsoft-Windows-TerminalServices-SessionBroker-Client/Operational" тут будет два события,об успешном общении RDS брокера и клиента.

Событие с кодом ID 1307: Remote Desktop Connection Broker Client successfully redirected the user ROOT\vpn-user to the endpoint term01.root.pyatilistnik.org.
Ip Address of the end point = 10.10.31.47

Событие с кодом ID 1307: Remote Desktop Connection Broker Client successfully redirected the user ROOT\vpn-user to the endpoint term01.root.pyatilistnik.org

Remote Desktop Connection Broker Client received request for redirection.
User : ROOT\vpn-user
RDP Client Version : 5

Remote Desktop Connection Broker Client received request for redirection

Исходя из данной информации я точно вижу, что брокер подключения все успешно обработал и перенаправил пользователя на хост RDSH.

Что стоит проверить

Первым делом проверьте не пытается ли по какой-то причине ваш RDSH брокер, направить пользователя на хост находящийся в режиме стока (Drain Mode). По идее туда могут попадать, только те пользователи, у кого там была сессия, так как режим стока обрубает новые. Если такая старая сессия есть, то попробуйте ее завершить, это можно сделать из консоли управления RDS фермой, или же специализированными утилитами rwinsta и ее аналогами.

Ошибка подключения к RDS

После завершения сессии дайте минут 5, чтобы брокеры забыли, что пользователь был на данном терминале. Пробуем войти на RDS ферму. Если ситуация обратная, брокер по логам перенаправляет на известный вам терминальный сервер, но пользователь все так же видит ошибку "Удаленному рабочему столу не удалось подключиться к удаленному компьютеру по одной из следующих причин", то попробуйте перевести данный хост в режим стока и повторить попытку. Еще в настройках терминальной фермы проверьте нет ли явных ограничений по приоритетам балансировки нагрузки, убедитесь, что хватает сеансов.

Настройка балансировки RDS

Далее если у вас есть оборудование фильтрующее трафик и ограничивающее порты при подключении к VPN, убедитесь, что они пропускают порт 3389. У меня как раз не хватало в правиле новой подсети. Проверить доступность порта можно через утилиту Telnet. Как выяснилось, все было банально просто. В результате чего у меня исчезла ошибка "Удаленному рабочему столу не удалось подключиться к удаленному компьютеру по одной из следующих причин". У вас не должно быть ошибок в виде "Не удалось открыть подключение к этому узлу, на порт 3389: Сбой подключения".

Ошибка подключения к RDS

Также в командной строке проверьте, что у вас правильно разрешаются имена, для этого есть команда nslookup, особенно актуально, кто балансирует подключения к брокеру по DNS, а не NLB. Если на RDSH сервере установлен антивирус, то так же посмотрите его монитор сетевой активности и логи, может быть он блокирует определенный вид трафика.

для тех у кого балансировка производится NLB кластером, то советую почитать ветку обсуждения https://community.spiceworks.com/topic/232715-remote-users-cannot-log-into-rdsh-farm

Так, что как оказалось ларчик просто открывался. В итоге удалось устранить ошибку подключения внешних пользователей к RDS ферме, на этом у меня все. С вами был Семин Иван, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *