В процессе администрирования корпоративной инфраструктуры терминальных серверов под управлением Windows Server 2008 R2 и более свежих версий системные администраторы нередко сталкиваются с ситуацией, когда штатный клиент «Подключение к удаленному рабочему столу» (mstsc) выдает ошибку: «Удаленному рабочему столу не удалось найти компьютер. Это может означать, что компьютер не принадлежит к указанной сети. Проверьте имя и домен компьютера, к которому выполняется подключение». При этом подключение по прямому IP-адресу сервера проходит моментально и без сбоев, а по полному доменному имени (FQDN) проблема проявляется периодически — то успешно подключается, то падает на нескольких клиентских станциях.
Выясним причину такого поведения сетевого стека и разберем по шагам надежные способы устранения неполадки.
Поскольку соединение по IP-адресу устанавливается без задержек, сетевой уровень, маршрутизация, фильтрация портов брандмауэром и сама служба Remote Desktop Services функционируют штатно. Сбой локализован на уровне преобразования доменного имени в IP-адрес службой DNS на клиентском компьютере или контроллере домена Active Directory. Разберем ключевые факторы, приводящие к плавающему характеру ошибки:
Самая распространенная ошибка при развертывании доменной сети — указание на клиентских машинах внешних DNS-серверов (например, адреса роутера, 8.8.8.8 или DNS интернет-провайдера) в качестве вторичного адреса. Windows не использует альтернативный DNS как резервный при недоступности первого — клиент может отправлять запросы случайным образом на любой из указанных серверов. Внешний сервер ничего не знает о домене home.local и возвращает отрицательный ответ.
Рассмотрим правильную схему настройки:
dnsmgmt.msc на контроллере домена Active Directory.В результате рабочие станции обращаются исключительно к доменному контроллеру: внутренние запросы к домену разрешаются напрямую локальной зоной, а внешние интернет-адреса прозрачно перенаправляются наружу через настроенные серверы пересылки.
Проанализируем специфику доменного имени .local. Международный стандарт RFC 6762 закрепил суффикс .local за протоколом Multicast DNS (mDNS). Утилиты Apple Bonjour, службы сетевой печати, сетевые принтеры и служба Avahi в Linux перехватывают широковещательные запросы к зоне .local в широковещательном сегменте сети.
Если на клиентском ПК активны такие службы, они могут попытаться разрешить имя SERVER-RDP.home.local в обход DNS-сервера Active Directory через локальный широковещательный опрос. Не получив ответа от службы mDNS сервера, клиент прерывает попытку с ошибкой. Чтобы исключить эту проблему, необходимо проверить список запущенных служб на рабочих станциях, отключить неиспользуемые службы Bonjour/Avahi либо обеспечить приоритет unicast DNS в политиках ОС.
Если в сети произошел единичный таймаут пакета или кратковременная недоступность контроллера домена, служба Dnscache в Windows кэширует ошибку разрешения имени (ответ NXDOMAIN). Из-за этого последующие подключения не проходят даже после восстановления доступности сервера вплоть до очистки кэша командой:
ipconfig /flushdns
Чтобы исключить длительные простои из-за негативного кэша, настроим на клиентских машинах параметр реестра, ограничивающий время жизни таких записей. В ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters создадим параметр MaxNegativeCacheTtl типа DWORD со значением 0 (кэширование ошибок отключено) или 5 (хранить ошибку не более 5 секунд).
Проанализируем конфигурацию самого сервера Windows Server 2008 R2. Если на сервере терминалов установлено несколько сетевых адаптеров (например, основная сеть, интерфейс управления гипервизором, отдельная карта для резервного копирования или iSCSI), служба сетевого стека по умолчанию регистрирует IP-адреса всех активных адаптеров в DNS-зоне Active Directory.
В этом случае в оснастке DNS для одного имени SERVER-RDP будут существовать сразу несколько A-записей. Клиентские компьютеры по алгоритму Round-Robin получают разные адреса: при попадании на рабочий IP сессия RDP открывается, а при получении адреса изолированного сетевого интерфейса клиент выдает ошибку невозможности найти узел.
Разберем, как исправить эту ситуацию:
Протокол Интернета версии 4 (TCP/IPv4) -> Свойства -> Дополнительно -> вкладка DNS.
ipconfig /registerdns
Начиная с Windows 8 и Windows 10, операционная система использует механизм Smart Multi-Homed Name Resolution. Клиент отправляет DNS-запросы параллельно по всем интерфейсам (включая Wi-Fi, VPN и неактивные адаптеры) по протоколам IPv4 и IPv6. Если сторонний DNS отвечает быстрее с сообщением «Имя не найдено», система прекращает ожидание ответа от контроллера домена.
Для предотвращения конфликтов выполним настройку групповой политики: перейдем в редактор локальной или доменной политики gpedit.msc по пути Конфигурация компьютера -> Административные шаблоны -> Сеть -> DNS-клиент и включим политику «Отключить интеллектуальное разрешение имен на нескольких сетевых адаптерах». Если протокол IPv6 не настроен в локальной сети, снимем привязку компонента IPv6 на сетевых адаптерах клиентов и сервера.
Если диагностика сетевой топологии требует времени, а пользователям необходимо срочно восстановить доступ к 1С на терминале по привычному имени, временно пропишем статическое соответствие имени и IP-адреса на клиентских компьютерах в файле hosts. Откроем текстовый редактор от имени Администратора, отредактируем файл C:\Windows\System32\drivers\etc\hosts и добавим строку:
192.168.1.10 SERVER-RDP.home.local SERVER-RDP
Такой способ гарантирует немедленное разрешение имени, минуя сетевые сбои DNS, однако для постоянной работы корпоративной инфраструктуры необходимо реализовать базовую схему с единым доменным DNS и серверами пересылки.