Хотя технология 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.


Исходя из выше сказанного, можно сделать следующие выводы:

  1. В Windows 10 32-bit для сборки 1703 и выше данная проблема не существует, т.к. Windows использует меньше 4 Гб при своей работе.

  2. В Windows 10 64-bit для сборки 1703 и выше данная проблема также не существует, если размер оперативной памяти меньше или равно 4Гб, но если вдруг Вы решите добавить оперативной памяти в эту систему, то получите побочный эффект (спасибо Microsoft). После перезагрузки система увидит, что памяти стало больше 4 Гб и автоматически разгруппирует службы и сетевое окружение перестанет правильно работать и догадаться, что это произошло из-за увеличения количества памяти будет очень затруднительно. В случае размера оперативной памяти более 4 Гб проблема существует и ее «лечение» необходимо выполнить вышеописанным способом.

  3. Для сборок Windows 10 ниже 1703 данная проблема не существует вне зависимости от разрядности Windows и размера оперативной памяти для 64-bit версии.

  4. Описанная проблема актуальна и для Windows 11

Комментарии (14)


  1. DreamingKitten
    04.08.2022 19:26
    +4

    Ваше решение похоже на какой-то нештатный хак.

    Может, надо было всё-таки выяснить, какой именно сервис десятка считает не запущенным и запустить? Тогда и не надо было бы заморачиваться с разделением.


    1. blef5 Автор
      05.08.2022 09:50
      +3

      Все сервисы запущены как и до сборки 1703. Но так как службы "Браузер компьютеров" и "Сервер" являются не исполняемыми файлами, а dll, их запускает суррогатный процесс svchost.exe. У сборок позже 1703 менеджер сервисов при наличии памяти > 3,5 запускает 2 процесса svchost.exe для 2 служб, т.е. dll оказываются изолированными друг от друга, а им для правильной работы необходимо общее адресное пространство. Поэтому Microsoft и оставила возможность сгруппировать сервисы как и раньше через реестр (чувствовали что будут косяки).


      1. DreamingKitten
        05.08.2022 09:54

        запускает 2 процесса svchost.exe для 2 служб, т.е. dll оказываются изолированными друг от друга, а им для правильной работы необходимо общее адресное пространство.

        вы хотите сказать, что это баг в менеджере сервисов винды и обе эти службы не будут работать корректно при наличии в системе большого объёма памяти? это ведь не то чтобы пограничный случай.


        1. blef5 Автор
          05.08.2022 10:41
          +2

          Именно так. Все зависит от количества памяти установленной в Windows. Посмотрите статью https://docs.microsoft.com/ru-ru/windows/application-management/svchost-service-refactoring


          1. blef5 Автор
            05.08.2022 10:43

            И это не баг, а изменение поведения менеджера сервисов на сборках выше 1703.


            1. DreamingKitten
              05.08.2022 10:49
              +1

              Изменение, приводящее к нарушению штатной функциональности подсистемы. Баг, регрессия и т.п.


    1. sbidenko
      05.08.2022 09:54
      +1

      У 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


    1. Alkarasu
      05.08.2022 10:44
      +1

      Я так понял, что сервис как раз запущен - но так как он выделен в отдельный процесс, его не приспособленная к этому античная архитектура не позволяет работать нормально.


      1. blef5 Автор
        05.08.2022 10:44
        +2

        Именно так.


  1. ciuafm
    04.08.2022 21:22
    +1

    Спасибо за статью. Подробно изложено, ясно описано.


  1. VaalKIA
    04.08.2022 23:33

    Вопрос, а можно для мастербраузера отключить широковещательные запросы и заставить работать через WINS? P-node на машинах выставлен, wins сервер прописан, но нифига это не работало… :(


    1. blef5 Автор
      05.08.2022 12:34

      1. Вы точно уверены, что широковещательные запросы относятся к NetBIOS. Некоторые протоколы также используют широковещательные запросы для своей работы.

      2. Если в сети есть DHCP сервер, то он также может изменять настройки клиентов.

      3. Корректно ли настроен брандмауэр, как на клиентах так и на сервере WINS.

        Если все настройки в норме, тогда можно попробовать следующее. Взять бытовой коммутатор (чтобы отсечь нюансы построения локальной сети) подключить к нему сервер wins и парочку клиентов. Отключить везде брандмауэр, присвоить всем статические адреса, установить на сервер wins сниффер ( Microsoft Network Monitor - он заточен под протоколы windows) и с его помощью посмотреть какие пакеты (протоколы) гуляют по сети. Локализовать те которые относятся к wins и уже там смотреть причину


  1. lazyest
    05.08.2022 23:45

    в случае таких непритязательных запросов от клиента гораздо проще вернуть обратно всю smb1, побочным эффектом ещё и вся старая инфраструктура мастербраузера восстановится. в одну комманду через дисм.


  1. mvv-rus
    06.08.2022 06:10

    В процессе общения с пользователями было выяснено, что все машины в организации на ночь выключаются и вновь приобретённый компьютер включается в 99,9% случаях первым, т.е. 100% становится Master Browser в сети.

    В древней документации было написано, что при выборе Master Browser приоритет получает компьютер с наибольшей версией.
    Как сейчас — не знаю (с нынешей MS станется этот номер версии в PDU протокола заморозить). Если не заморозила, то тогда включение первым другого компьютера не поможет.
    PS Статья полезная, благодарю.