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

3026
PaulH

Я управляю сетью малого бизнеса с несколькими ПК с 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) обнаруживает новую сеть, в результате чего создается новый профиль сети, который по умолчанию становится общедоступным (даже несмотря на то, что для локальной локальной групповой политики по умолчанию установлено значение «Личная»)., Многие из компьютеров показывают, что Windows много раз обнаруживала новые неопознанные сети, то есть они показывают «Сеть 14», то есть существует 14 различных сетевых профилей. Я вижу эти несколько профилей при рассмотрении профилей здесь в реестре: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles.

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

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

Вопрос:

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

11
Я немного отредактировал ваш вопрос, чтобы сосредоточиться на вопросе о решении актуальной проблемы. См. [Проблема XY] (https://meta.stackexchange.com/a/66378/271445). Twisty Impersonator 6 лет назад 1
NLA идентифицирует сеть на основе MAC-адреса шлюза по умолчанию, указанного для этого сетевого адаптера. Возможно ли, что ваш маршрутизатор стал недоступен для этих компьютеров? Кажется ли, что проблема затрагивает несколько компьютеров за короткий промежуток времени, или это только один пользователь в один день, затем другой пользователь в совершенно другое время? Twisty Impersonator 6 лет назад 0
Возможно, посмотрите на компьютер \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ NetworkList \ Signatures \ Unmanaged или хотя бы вокруг этого расположения в реестре - и посмотрите, соответствуют ли DefaultGatewayMAC и DNSSuffix тому, что вы ожидаете Ross 6 лет назад 0
PaulH - Послушайте мой ответ, когда вы получите момент, это то, что я использовал с довольно солидным успехом в производственной среде, как я описал в разделе ** Метод 1 **, но я также предоставил более подробную информацию о методе ** 2 ** раздел моего ответа. Я надеюсь, что вы найдете какое-либо из этих решений столь же полезным, как и я, для этой проблемы. Pimp Juice IT 6 лет назад 0

2 ответа на вопрос

4
Pimp Juice IT

Способ 1

Один из способов решения этой проблемы в критически важной системе Windows Server в одной среде, которую я поддерживаю, заключался в пакетном сценарии, который использует Set-NetConnectionProfile и netsh, и явно устанавливал для каждого доверенного сетевого адаптера / адаптера на компьютере значение private при запуске системы с помощью Планировщик заданий с помощью 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. Перейдите к свойствам одного сетевого подключения, помеченного как « Неопознанный », но в частной локальной сети.

  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\

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

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

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

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

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

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

источник

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

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

Services.msc

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

Хм, не уверен, что это хорошая идея в доменной среде ... или при переносе ноутбука между доверенными и ненадежными сетями. Есть какие-либо отзывы по любому из этих сценариев? Twisty Impersonator 6 лет назад 0
Я делаю это в среде моего домена. Работает отлично. Если вы используете свой ноутбук в ненадежной среде, вам нужны другие средства защиты. НЛА не спасет тебя. Все, что он мог сделать, это автоматически отключить акции. Я бы посоветовал не пускать какие-либо акции на ноутбуки. HackSlash 6 лет назад 0
Без NLA как ваши системы переключаются между доменом и частными профилями, например, когда сотрудник забирает ноутбук домой? Twisty Impersonator 6 лет назад 0
Без NLA нет профилей вообще. Для чего вы используете эти профили? HackSlash 6 лет назад 0
Многие системы, которыми я управляю, разрешают входящий трафик при подключении к сети домена, но такой трафик блокируется, когда системы покидают домен. Это то, как мы реализуем глубокую защиту ... порты открываются только там, где это необходимо, и закрываются повсюду. Twisty Impersonator 6 лет назад 0
NLA, очевидно, не является надежным способом определить, безопасно ли открывать порты. Я бы порекомендовал вам больше не делать этого сейчас, когда вы знаете, что это ненадежно. HackSlash 6 лет назад 0
Это работает безупречно на 98% моих систем. Те, с кем он не работает, всегда повторяются. Это явный признак проблемы, связанной с окружающей средой, а не то, что NLA является принципиально ошибочной функцией. Я буду помнить ваш ответ, когда профили не повышают ценность, но я не могу согласиться с тем, чтобы полностью отказаться от него только из-за нескольких крайних случаев. Twisty Impersonator 6 лет назад 0
98% не безупречна. Кроме того, это просто не эффективная безопасность. Любая сеть может обмануть ваш ноутбук, чтобы открыть его порты. Прочитайте это: https://support.microsoft.com/en-in/help/3022777/ms15-005-vulnerability-in-network-location-awareness-service-could-all HackSlash 6 лет назад 0