Остановите Windows NLA от повторного обнаружения локальной сети как новой, неопознанной сети

11

Я управляю сетью малого бизнеса с несколькими ПК с Windows 10 и 7. Периодически, но довольно часто пользователи жалуются, что они больше не могут получить доступ к общим папкам с другими коллегами. Быстрое устранение неполадок определяет, что проблема связана с печально известной «Обнаружена неопознанная сеть», которая затем применяет «общедоступный» сетевой профиль вместо «частного» сетевого профиля, поэтому домашняя группа / общий доступ к файлам и т. Д. Не работает. Из моих поисков это общая проблема для многих пользователей. Я не вижу никаких предлагаемых решений, которые работают.

Среда:

  • Все ПК с Windows подключены через проводной Ethernet (хотя они могут иметь Wi-Fi NIC)
  • Все они подключены к 48-портовому управляемому коммутатору Avaya L2, все в одной подсети 10.10.10.x
  • Коммутатор подключен к домашнему маршрутизатору Asus RTN-66U
  • Маршрутизатор Asus подключается к кабельному модему
  • Маршрутизатор Asus обеспечивает DHCP для компьютеров Windows
  • Я настроил маршрутизатор с резервированием DHCP для каждого ПК с Windows, то есть ПК всегда получают один и тот же IP-адрес при загрузке
  • Нет контроллера домена

Проблема:

Несмотря на то, что я настроил все активные сетевые профили на компьютерах с Windows = частный, они часто (каждые пару недель или около того) возвращаются обратно к общедоступным, что предотвращает обмен файлами и т. Д.

Попытки исправить:

На каждом ПК с Windows я модифицировал локальную групповую политику Computer Configuration->Security Settings->Network List Manager Policies:

  • Неопознанные Сети = Частные
  • Идентификация сетей = Частная

Замечания:

Я полагаю, что проблема заключается в том, что служба Windows Network Location Awareness (NLA) обнаруживает новую сеть, в результате чего создается новый профиль сети, который по умолчанию становится общедоступным (несмотря на то, что выше для локальной политики группы по умолчанию установлено значение Private) , Многие из компьютеров показывают, что Windows много раз обнаруживала новые неопознанные сети, то есть они показывают «Сеть 14», то есть существует 14 различных сетевых профилей. Я вижу эти несколько профилей при просмотре профилей здесь, в реестре: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles,

Все 14 профилей соответствуют фактическому подключению компьютера к той же сети, которая описана выше.

Я не смог найти ресурс, который точно описывает, как NLA генерирует уникальный идентификатор для сети и, следовательно, почему он может обнаружить, что обнаружил новую сеть.

Вопрос:

Как я не позволяю Windows неправильно идентифицировать мою локальную сеть как новую сеть? Возможно, это помогло бы, если бы я знал, какие шаги выполняет NLA для создания уникального идентификатора сети?

PaulH
источник
1
Я немного отредактировал ваш вопрос, чтобы сосредоточиться на вопросе о решении актуальной проблемы. Увидеть XY проблема ,
Twisty Impersonator
NLA идентифицирует сеть на основе MAC-адреса шлюза по умолчанию, указанного для этого сетевого адаптера. Возможно ли, что ваш маршрутизатор стал недоступен для этих компьютеров? Кажется ли, что проблема затрагивает несколько компьютеров за короткий промежуток времени, или это только один пользователь в один день, затем другой пользователь в совершенно другое время?
Twisty Impersonator
Возможно, посмотрите на Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ NetworkList \ Signatures \ Unmanaged или хотя бы на это место в реестре - и посмотрите, соответствуют ли DefaultGatewayMAC и DNSSuffix тому, что вы ожидаете
Ross
PaulH - Послушайте мой ответ, когда вы получите момент, это то, что я использовал с довольно солидным успехом в производственной среде, как я положил в Способ 1 раздел, но я также предоставил более подробную информацию с Способ 2 раздел моего ответа. Я надеюсь, что вы найдете какое-либо из этих решений столь же полезным, как и я, для этой проблемы.
Pimp Juice IT

Ответы:

4

Способ 1

Одним из способов решения этой проблемы в критически важной системе Windows Server в одной среде, которую я поддерживаю, был пакетный скрипт, который использует Set-NetConnectionProfile а также Netsh и явно установите для каждого доверенного сетевого адаптера / адаптера на компьютере значение частный в запуск системы с Диспетчер задач с помощью Run whether user is logged on or not а также Run with highest privileges вариант.

enter image description here enter image description here

Замечания: В то время как в награду говорится Решение не должно вызывать потерю подключения к сети для реализации «Я хотел бы упомянуть, что, поскольку при возникновении этой проблемы у вас в любом случае происходит сбой в сети, при запуске этого сценария, если проблема возникает случайным образом, когда система не перезагружается, просто при запуске этого же сценария все равно будет быстро решена проблема и получена ОС доступ к сети машины снова в рабочем и ожидаемом порядке.

Кроме того, вы можете использовать Get-NetConnectionProfile чтобы получить псевдонимы NIC и номера индексов для включения в приведенный ниже пример пакета сценария для ваших нужд и / или систем.

Пакетный скрипт

@ECHO ON

::: The below PowerShell will set all the nework adapters to private rather than public and unknown as happens.
:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO Set-NetConnectionProfile -InterfaceIndex 12 -NetworkCategory Private>>"%PSScript%" 
ECHO Set-NetConnectionProfile -InterfaceIndex 20 -NetworkCategory Private>>"%PSScript%" 
ECHO Set-NetConnectionProfile -InterfaceIndex 22 -NetworkCategory Private>>"%PSScript%" 
ECHO Set-NetConnectionProfile -InterfaceIndex 24 -NetworkCategory Private>>"%PSScript%"

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

:: The below will disable and then re-enable each NIC one-by-one so the unidentfied goes away after set to "private" above
:ResetNICs
SET Array="Ethernet", "Ethernet 2", "Ethernet 3", "Ethernet 4"
FOR %%A IN (%Array%) DO (
    netsh int set int "%%~A" admin=disable
    netsh int set int "%%~A" admin=enable
)
EXIT

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

Метод 2 (несколько методов)

Неопознанная сеть - переход от публичного к частному или доменному

Если NLA не может определить местоположение соединения, она называет его   «Неопознанный» и помечает местоположение как Общедоступное. Выбирает Public   потому что это наиболее безопасно, и вы бы не хотели ничего меньше, если   соединение на DMZ.

Есть два простых способа это исправить. Один использует локальную безопасность   Политика для изменения местоположения по умолчанию неопознанных сетей.   второй метод использует изменение свойств сетевого подключения к   предоставить NLA информацию, необходимую для правильного определения местоположения.

Использование локальной политики безопасности

Внимание: Это следует использовать только в том случае, если компьютер никогда не будет подключен к публичной локальной сети. В противном случае вы рискуете   использование менее защищенного профиля брандмауэра для вашей публики   подключение.

  1. Открыто " Политика локальной безопасности ».

  2. Нажмите на " Политики диспетчера списка сетей "на левой панели. (Этот выбор скрыт в более старых версиях Windows.)

  3. Двойной клик на " Неопознанные Сети "на правой панели.

  4. Для компьютеров, которые существуют только в частной сети, это нормально, чтобы установить " Тип местоположения "до" частный ».

    enter image description here

Использование свойств сетевого подключения

Речь идет не о добавлении IP-адреса шлюза, так как он не работает должным образом   многодомный сервер. Вместо этого мы будем добавлять суффикс DNS, чтобы   NLA может правильно найти контроллер домена, который, как он знает,   пометить местоположение как «Доменная сеть».

  1. Идти к Сетевые соединения (в Центре управления сетями и общим доступом нажмите «Изменить настройки адаптера».)

  2. Перейти к СВОЙСТВА s одного сетевого подключения помечены как " неопознанный "но в частной локальной сети.

  3. Перейти к свойства для IPv4 ,

  4. Нажмите " продвинутый ... ».

  5. Выберите DNS Вкладка.

  6. Введите свое доменное имя в текстовое поле для " DNS-суффикс для этого соединения: ».

Отключите и затем включите соединение, чтобы заставить NLA повторно идентифицировать   место нахождения. После включения соединения статус должен измениться на   доменное имя и категория сети на «Доменная сеть». В зависимости от   ваши настройки, вероятно, вам нужно только "исправить" одно соединение с   получить все связанные соединения, чтобы увидеть домен.

Переход от частного к общему

Существует два распространенных способа заставить NLA пометить соединение как общедоступное.   Одним из них является использование правила брандмауэра для блокировки NLA, чтобы у него не было выбора   но использовать местоположение по умолчанию. Другой заключается в использовании реестра для   отключить NLA для соединения.

Использование брандмауэра

Я не проверял это, но теория кажется обоснованной.

  1. Открыто " Брандмауэр Windows в режиме повышенной безопасности "(т.е. wf.msc ).

  2. Идти к Исходящие правила ,

  3. Нажмите на " Новое правило ...».

  4. Используйте эти настройки:

    • Тип правила: изготовленный на заказ
    • Программа: Выберите «Все программы», а затем нажмите «Настроить…». Выберите «Информация о расположении сети» (короткое имя     NlaSvc).
    • Протокол и порты: Тип протокола = Любой.
    • Объем: Локальные IP-адреса = Введите все ваши публичные IP-адреса. Дважды проверьте соединения с несколькими IP-адресами.
    • Действие: блок
    • Профиль: Все
  5. Как только правило включено, отключите и затем включите сетевое соединение, чтобы заставить NLA повторно идентифицировать местоположение.

Использование реестра

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

  1. Запустите regedit

  2. Идти к HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

  3. Внизу вы должны увидеть несколько клавиш, помеченных 0000, 0001, 0002 и т. Д. Просмотрите их и найдите адаптеры, где вы хотите   отключить NLA.

  4. Для каждого из адаптеров добавьте новое значение DWORD с именем "* NdisDeviceType" и установите его равным 1 (убедитесь, что вы получите * на   начало названия).

Получать радикальные

Профили местоположения размещены в реестре, и это кажется безвредным   удалить их и позволить Windows восстановить их. Вы обязательно захотите   сначала сделайте резервную копию реестра, и вам, вероятно, понадобится подключиться   на сервер через KVM, а не удаленно (RDP). Я не возьму   ответственность, если вы выберете этот шаг, так как я в первую очередь ставлю это   здесь для справки.

Расположение профилей:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles

источник

Pimp Juice IT
источник
Первый способ выглядит многообещающе. Я не уверен насчет других методов, которые включают перезапуск службы NLA, потому что это все равно всегда решает проблему, затрудняя узнать, был ли перезапуск службы решением или другим действием. Теперь мне просто нужна машина, которая делает это неправильно, чтобы проверить ....
Twisty Impersonator
@TwistyImpersonator Да, метод 1 - это метод, который я использовал, и он запускается только при запуске. В данном случае это виртуальный хост-сервер Hyper-V с 4 сетевыми картами, и его запуск при запуске позволил решить проблему с этой конкретной системой. Я думаю, что в другой раз это произошло из-за сетевого коммутатора или перезагрузки маршрутизатора, и вместо того, чтобы перезапускать сервер виртуального хоста, я просто запустил скрипт вручную, и это решило проблему. Я заметил вопрос и опубликовал решение, которое я использовал, и другой цитируемый ресурс, который выглядел актуальным и потенциально полезным.
Pimp Juice IT
Я заметил, что вы положили награду, но, думаю, я не осознавал, что это было для вас, а не просто пытался получить ответ от ОП. Это тоже хорошо знать.
Pimp Juice IT
0

У меня была эта проблема бесконечно только на одной конкретной системе. Это сломало бы все при каждой перезагрузке. Я перепробовал все решения, которые вы упомянули. После исчерпания всего остального я прибег к отключению сервиса «Network Location Awareness». Из того, что я могу сказать, это не нужно. Это навсегда решило мою проблему. Единственный побочный эффект, который я заметил, это то, что окно «Центр управления сетями и общим доступом» выглядит забавно. Этот сервис не существовал до Windows 7 и совершенно бесполезен для меня.

Services.msc

«Информация о сетевом расположении», Тип запуска = «Отключено»

HackSlash
источник
Хм, не уверен, что это хорошая идея в доменной среде ... или при переносе ноутбука между доверенными и ненадежными сетями. Есть какие-либо отзывы по любому из этих сценариев?
Twisty Impersonator
Я делаю это в среде моего домена. Работает отлично. Если вы используете свой ноутбук в ненадежной среде, вам нужны другие средства защиты. НЛА не спасет тебя. Все, что он мог сделать, это автоматически отключить акции. Я бы посоветовал не допускать никаких акций на ноутбуках.
HackSlash
Без NLA как ваши системы переключаются между доменом и частными профилями, например когда сотрудник забирает ноутбук домой?
Twisty Impersonator
Без NLA нет профилей вообще. Для чего вы используете эти профили?
HackSlash
Многие системы, которыми я управляю, разрешают входящий трафик при подключении к сети домена, но такой трафик блокируется, когда системы покидают домен. Это то, как мы реализуем глубокую защиту ... порты открываются только там, где это необходимо, и закрываются повсюду.
Twisty Impersonator