Хотя технология NetBIOS устаревшая, глючная и подвержена атакам хакеров, Microsoft все равно продолжает ее поддерживать несмотря на то, что много раз заявляла об окончании поддержки.
Хочу рассказать свою историю о том, как Microsoft в очередной раз подкинула проблем на ровном месте.
Я был приглашен в одну организацию «NONAME» для решения проблемы с сетевым окружением. Проблема в организации возникла после приобретения нового персонального компьютера с установленной Windows 10 (часть компьютеров исчезла из сетевого окружения). Точнее, были видны все устройства с методом обнаружения WSD (Web Services on Devices), а машины с методом обнаружения NetBIOS канули в Лету.
Компьютерный парк в организации состоит из 12 машин, 2 МФУ и 1 принтера. Персональные компьютеры используются как печатные машинки, выделенных серверов нет, а Active Directory и Linux вообще матерные слова. По большому счету им оно и не надо. Операционная система в основном Windows 7 и пару Windows 8. Обмен документами через общие папки. Рабочая группа у всех одна.
В процессе общения с пользователями было выяснено, что все машины в организации на ночь выключаются и вновь приобретённый компьютер включается в 99,9% случаях первым, т.е. 100% становится Master Browser в сети.
Первым делом у него была остановлена служба «Браузер компьютеров», что привело к проведению новых выборов Master Browser. Им стала машина с операционной системой Windows 8 и через некоторое время все устройства стали снова видны в сетевом окружении. Стало понятно, что виновата новая машина с Windows 10 (хотя это было понятно сразу, но чистота эксперимента превыше всего). Следующим шагом стала настройка всех машин как клиентов (чтоб не участвовали в выборах Master Browser). Машина с Windows 10 была настроена как Master Browser (всегда выигрывает выборы) и одна машина с Windows 7 как Backup Browser. Как это делается описывать не буду – в сети море статей по этому вопросу. После этого все хосты были перезапущены и первой включена машина с Windows 10, т.е. эта машина стала снова Master Browser. Результат: ничего не изменилось, часть компьютеров не видна (да и не должно было ничего измениться). Но было замечено, что машина с Windows 10 (Master Browser) видит в сетевом окружении все устройства, как WSD, так и NetBIOS. Мистика!!!! Сразу же после этого на машину с Windows 10 был установлен сниффер сетевых пакетов (в начале Wireshark, который мало помог, затем старенький Microsoft Network Monitor 3.4 (заточен под Windows)). Сниффер показал, что при запросе от клиентов у Master Browser (машина с Windows 10) списка серверов, Windows 10 возвращает ответ с ошибкой «Сервис не запущен». Были перепроверены все необходимые взаимосвязанные сервисы. Проверены настройки брандмауэра, который был затем отключен. Результат нулевой, все тоже самое – ошибка «Сервис не запущен».
Начались поиски на сайте Microsoft хоть какой-либо информации по данному вопросу и после 3-х дневного поиска наталкиваюсь на статью на сайте под названием «Рефакторинг процесса узла службы», которая при открытии меняет название на «Изменения для группировки узла службы в Windows 10» (Ссылка на оригинал статьи: https://docs.microsoft.com/ru-ru/windows/application-management/svchost-service-refactoring), которая гласит:
«Начиная с Windows 10 Creators Update версии 1703, службы, которые были ранее сгруппированные, будут разделены— каждая из них будет выполняться в собственном процессе SvcHost. Это изменение выполняется автоматически для систем с более чем 3,5 ГБ ОЗУ под управлением номера SKU клиентского рабочего стола. В системах с объемом ОЗУ 3,5 ГБ или меньше мы будем продолжать группировать службы в общий процесс SvcHost.».
Запускаю диспетчер задач и вижу, что почти все службы разгруппированы, т.е. запущены в отдельных процессах svchost.exe, да и памяти на машине с Windows 10 гораздо больше, чем 3,5 Гб (8 Гб).
А вот это уже горячо. Искусственно подрезаю размер памяти до 3484 МБ в настройках Windows 10. Перегружаю устройства и «бинго!» - все стало на свои места: машина с Windows 10 является Master Browser и на всех хостах в сетевом окружении правильно отображается список всех сетевых устройств, вне зависимости от метода обнаружения.
Осталось за малым: нужно вернуть настройки памяти для Windows 10 в исходное состояние и сохранить работоспособность Master Browser. Понятно, что для сохранения работоспособности Master Browser необходимо снова сгруппировать службы, отвечающие за правильную работу Master Browser, т.е. они должны быть в одном адресном пространстве.
Делается это следующим образом (описание в вышеупомянутой статье на сайте Microsoft). Две основные службы необходимые для правильной работы Master Browser это – служба «Браузер компьютеров» и служба «Сервер». Для их группировки в соответствующих ключах службы в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
необходимо создать или изменить значение ключа SvcHostSplitDisable (REG_DWORD)
в 1, т.е. проделать следующее:
1. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer] "SvcHostSplitDisable"=dword:00000001
2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Browser] "SvcHostSplitDisable"=dword:00000001
После проделанных манипуляций с реестром нужно выключить все хосты, а затем включить машину с Windows 10 первой и затем все остальные. Теперь в диспетчере задач можно увидеть, что эти две службы снова сгруппированы, т.е. работают в одном адресном пространстве.
Теперь все работает красиво. Весь этот процесс можно сделать в виде скрипта Powershell.
Исходя из выше сказанного, можно сделать следующие выводы:
В Windows 10 32-bit для сборки 1703 и выше данная проблема не существует, т.к. Windows использует меньше 4 Гб при своей работе.
В Windows 10 64-bit для сборки 1703 и выше данная проблема также не существует, если размер оперативной памяти меньше или равно 4Гб, но если вдруг Вы решите добавить оперативной памяти в эту систему, то получите побочный эффект (спасибо Microsoft). После перезагрузки система увидит, что памяти стало больше 4 Гб и автоматически разгруппирует службы и сетевое окружение перестанет правильно работать и догадаться, что это произошло из-за увеличения количества памяти будет очень затруднительно. В случае размера оперативной памяти более 4 Гб проблема существует и ее «лечение» необходимо выполнить вышеописанным способом.
Для сборок Windows 10 ниже 1703 данная проблема не существует вне зависимости от разрядности Windows и размера оперативной памяти для 64-bit версии.
Описанная проблема актуальна и для Windows 11
Комментарии (14)
VaalKIA
04.08.2022 23:33Вопрос, а можно для мастербраузера отключить широковещательные запросы и заставить работать через WINS? P-node на машинах выставлен, wins сервер прописан, но нифига это не работало… :(
blef5 Автор
05.08.2022 12:34Вы точно уверены, что широковещательные запросы относятся к NetBIOS. Некоторые протоколы также используют широковещательные запросы для своей работы.
Если в сети есть DHCP сервер, то он также может изменять настройки клиентов.
-
Корректно ли настроен брандмауэр, как на клиентах так и на сервере WINS.
Если все настройки в норме, тогда можно попробовать следующее. Взять бытовой коммутатор (чтобы отсечь нюансы построения локальной сети) подключить к нему сервер wins и парочку клиентов. Отключить везде брандмауэр, присвоить всем статические адреса, установить на сервер wins сниффер ( Microsoft Network Monitor - он заточен под протоколы windows) и с его помощью посмотреть какие пакеты (протоколы) гуляют по сети. Локализовать те которые относятся к wins и уже там смотреть причину
lazyest
05.08.2022 23:45в случае таких непритязательных запросов от клиента гораздо проще вернуть обратно всю smb1, побочным эффектом ещё и вся старая инфраструктура мастербраузера восстановится. в одну комманду через дисм.
mvv-rus
06.08.2022 06:10В процессе общения с пользователями было выяснено, что все машины в организации на ночь выключаются и вновь приобретённый компьютер включается в 99,9% случаях первым, т.е. 100% становится Master Browser в сети.
В древней документации было написано, что при выборе Master Browser приоритет получает компьютер с наибольшей версией.
Как сейчас — не знаю (с нынешей MS станется этот номер версии в PDU протокола заморозить). Если не заморозила, то тогда включение первым другого компьютера не поможет.
PS Статья полезная, благодарю.
DreamingKitten
Ваше решение похоже на какой-то нештатный хак.
Может, надо было всё-таки выяснить, какой именно сервис десятка считает не запущенным и запустить? Тогда и не надо было бы заморачиваться с разделением.
blef5 Автор
Все сервисы запущены как и до сборки 1703. Но так как службы "Браузер компьютеров" и "Сервер" являются не исполняемыми файлами, а dll, их запускает суррогатный процесс svchost.exe. У сборок позже 1703 менеджер сервисов при наличии памяти > 3,5 запускает 2 процесса svchost.exe для 2 служб, т.е. dll оказываются изолированными друг от друга, а им для правильной работы необходимо общее адресное пространство. Поэтому Microsoft и оставила возможность сгруппировать сервисы как и раньше через реестр (чувствовали что будут косяки).
DreamingKitten
вы хотите сказать, что это баг в менеджере сервисов винды и обе эти службы не будут работать корректно при наличии в системе большого объёма памяти? это ведь не то чтобы пограничный случай.
blef5 Автор
Именно так. Все зависит от количества памяти установленной в Windows. Посмотрите статью https://docs.microsoft.com/ru-ru/windows/application-management/svchost-service-refactoring
blef5 Автор
И это не баг, а изменение поведения менеджера сервисов на сборках выше 1703.
DreamingKitten
Изменение, приводящее к нарушению штатной функциональности подсистемы. Баг, регрессия и т.п.
sbidenko
У MS к сожалению в последнее время, что не решение, то хак. В сборке 1703 служба обозревателя сети действительно работает некорректно. Вариант, аналогичный рассмотренному в статье, предложен сотрудником MS в качестве решения: https://social.technet.microsoft.com/Forums/en-US/bd0af6aa-51ec-477a-8c81-888a4e60bd94/master-browser-service-broken-after-creator-update?forum=win10itpronetworking
Alkarasu
Я так понял, что сервис как раз запущен - но так как он выделен в отдельный процесс, его не приспособленная к этому античная архитектура не позволяет работать нормально.
blef5 Автор
Именно так.