Сеть работает, а Windows пишет «Нет доступа к интернету» — разбираем NCSI, DNS, прокси и VPN
· Го Комура · Windows, Разработка под Windows, Сети, NCSI, DNS, Прокси, VPN, PowerShell
Веб-сайты открываются. Сообщения в чате доходят. И всё же только отображение Windows сообщает «Нет доступа к интернету».
«Сеть сейчас работает — почему же написано, что её нет?» Этот вопрос возникает сам собой, но причина есть. У Windows есть собственная проверка подключения, и её результат отделён от результата обмена данными того приложения, которым вы пользуетесь сейчас. Например, обычные веб-сайты могут быть доступны, а вот назначение проверки подключения Windows — нет.1
Поэтому, прежде чем удалять настройки Wi-Fi или сбрасывать сеть целиком, разделите вопрос: искажено только отображение или нужный вам обмен данными тоже не проходит?
В этой статье сначала объясняется механизм расхождения, а затем — частые ситуации, разбор по симптомам и практические шаги проверки. Кому нужен механизм — читайте до главы 3; кто занимается диагностикой — главы 4 и 5; разработчикам приложений для Windows стоит прочитать и главу 6. Основное внимание уделено Windows 11, рассмотрены и отличия от Windows 10, а в примерах используются Windows PowerShell 5.1 и curl.exe.
1. Windows смотрит не только на тот сайт, который вы открыли сейчас
Представим, что на рабочем компьютере компании открывается привычный веб-сайт. Если браузер может обменяться данными с этим сайтом, страница отобразится. Параллельно и независимо от этого Windows забирает небольшой файл для проверки подключения.
А что, если сеть компании настроена так, что трафик к обычным сайтам пропускается, а к назначению проверки подключения — нет? Обмен данными браузера будет успешным, а проверочный трафик Windows — неудачным. Даже на одном и том же компьютере результат может расходиться, если проверяется что-то разное.1
flowchart TB
accTitle: Пример, когда сайт открывается, а проверка подключения не проходит
accDescr: Гипотетический пример: браузер на том же компьютере достигает обычного сайта, тогда как проверочный запрос NCSI не доходит до другого назначения. Это не схема, которая определяет итоговое состояние NCSI по одному запросу.
pc["Тот же компьютер"] --> browser["Трафик браузера"]
pc --> probe["Проверочный трафик Windows"]
browser --> site["Обычный сайт<br/>страница открывается"]
probe --> blocked["Назначение проверки подключения<br/>не проходит только этот трафик"]
Рис. 1: Гипотетический пример для понимания механизма. Обычный трафик и проверка подключения обращаются к разным сторонам.
За это решение о связности отвечает NCSI (Network Connectivity Status Indicator). Он определяет, есть ли подключение к интернету или оно остаётся локальным, и предоставляет сведения, которые используют индикатор сети и приложения. Он не следит за доступностью отдельных веб-сайтов или корпоративных систем.1
Смотрите не на то, «что-то вернулось», а на то, вернулось ли содержимое проверки
Начиная с Windows 10 версии 1607 стандартное назначение HTTP-проверки — следующий URL. Ожидаемое тело ответа — Microsoft Connect Test. На компьютерах, которыми управляет организация, назначение проверки иногда меняют.2
http://www.msftconnecttest.com/connecttest.txt
Если вы запросили этот файл, а вернулся экран входа в гостиничную сеть или корпоративная страница блокировки, значит от назначения что-то пришло, но это не ожидаемый результат проверки. Даже при статусе HTTP 200 тело ответа не обязательно совпадает.3
flowchart TB
accTitle: Что проверяет HTTP-проба
accDescr: При запросе к назначению проверки смотрим, вернулись ли ожидаемый ответ и тело ответа.
start["HTTP-запрос к назначению проверки"] --> response{"Ответ получен"}
response -->|"Нет"| failed["Разобраться с незавершённой передачей или сбоем связи"]
response -->|"Да"| content{"Это ожидаемый ответ и тело ответа"}
content -->|"Да"| success["Основание считать подключение установленным"]
content -->|"Нет"| changed["Разобраться с проверкой подлинности, блокировкой или подменой содержимого"]
Рис. 2: Отделяйте факт получения ответа от назначения проверки от факта получения ожидаемого содержимого.
Заметим, что NCSI работает не только по этому проверочному трафику. Способ, при котором он проверяет связность по своей инициативе, называется активной пробой, а способ, при котором он судит по полученным пакетам и другим сведениям, — пассивной пробой; используются оба. Поэтому один неудачный HTTP-запрос из схемы не равнозначен тому, что итоговое состояние подключения стало «нет доступа».1
Главное к этому моменту: подключение к Wi-Fi, доступность какого-то сайта и решение Windows «Internet» — это разные проверки. Само подключение к Wi-Fi ничего не говорит ни о маршруте наружу, ни о проверке подлинности для доступа, а доступность одного сайта не гарантирует работу другого назначения или другого приложения.
На схеме сплошная линия обозначает отношение, которое выполняется всегда, а пунктирная — условное отношение (условия указаны в пояснении к каждому отношению на странице сведений). Полный список отношений (всего 5, с доказательствами и степенью уверенности) и определения основных понятий собраны на странице сведений карты знаний (на японском). Данные: JSON-LD / Turtle
2. Три частые ситуации, когда отображение и трафик расходятся
В компании браузер и проверка подключения иногда идут разными путями
Сделаем пример компании из начала статьи конкретнее. В корпоративных сетях бывает схема, при которой наружу выходят не напрямую, а через промежуточный узел — прокси. Механизм, который выбирает этот узел по запрашиваемому URL и подобным критериям, — это PAC-файл. Иногда применяется и автоматическое определение.4
В такой схеме для обычных сайтов может выбираться подходящий прокси, а назначение проверки подключения остаётся вне правил. Случаи, когда определение прокси не успевает сработать или блокируется только HTTP-трафик к назначению проверки, тоже стоит рассматривать.1
flowchart TB
accTitle: Проверять путь браузера и путь NCSI отдельно
accDescr: Успех трафика браузера не гарантирует успех NCSI, который использует другое назначение и другой выбор прокси.
pc["Тот же компьютер"] --> browser["Запрос браузера"]
pc --> ncsi["Проверочный запрос NCSI"]
browser --> bpath["Прокси и проверка подлинности для этого запроса"]
ncsi --> npath["Прокси и проверка подлинности для проверочного запроса"]
bpath --> site["Использованный веб-сайт"]
npath --> probe["Назначение проверки подключения"]
Рис. 3: «Тот же компьютер» не значит «тот же путь». Для каждого запроса проверяйте назначение, прокси и проверку подлинности.
Поэтому смотрите не только на то, успешен ли браузер, но и на то, какой прокси выбран для запроса NCSI и под какой учётной записью и с какой проверкой подлинности он выполнялся. То же относится и к ручной проверке через curl, о которой речь пойдёт дальше. Не считать эти три случая трафиком в одинаковых условиях — отправная точка диагностики.
В гостинице после подключения к Wi-Fi может остаться вход в сеть
В Wi-Fi гостиниц и подобных мест после подключения к радиосети может потребоваться принять условия использования или войти. Этот шлюз проверки подлинности и есть captive portal (портал авторизации). Если проверочный запрос перенаправляется на страницу проверки подлинности или возвращается экран входа, это уже не обычный ответ проверки. То, что Windows открывает браузер и предлагает войти, тоже связано с этим механизмом.3
flowchart TB
accTitle: Разница между подключением к Wi-Fi и проверкой подлинности на портале
accDescr: Даже после успешного беспроводного подключения трафик наружу может оставаться ограниченным, пока на стороне сети не завершена проверка подлинности.
wifi["Подключение к Wi-Fi"] --> portal{"Проверка подлинности для доступа пройдена"}
portal -->|"Не пройдена"| signin["Пройти проверку подлинности по официальной странице"]
portal -->|"Пройдена"| test["Проверить заново реальный трафик и решение"]
signin --> test
Рис. 4: Завершение подключения к Wi-Fi не означает, что пройдена проверка подлинности для использования этой сети.
Бывает, что доступна только информационная страница заведения, поэтому по одной открывшейся странице нельзя заключить, что «весь трафик наружу разрешён». Пройдите проверку подлинности по официальным инструкциям заведения и лишь затем проверьте реальный трафик и показания Windows. Не вводите данные учётной записи или карты на подозрительном экране входа.
С VPN меняется то, «из какого подключения получен результат»
До и после подключения VPN маршрут трафика и условия использования DNS могут измениться. Ситуации, когда настройки не складываются сразу после подключения или проверочный трафик уходит по непредусмотренному маршруту, тоже могут быть причиной сбоя NCSI.2
В этом случае не рассматривайте компьютер как единое «подключён или не подключён», а разделите физический LAN или Wi-Fi и VPN. Например, если физическая сторона показывает LocalNetwork, а схема предполагает выход в интернет через VPN, одной строки о физической стороне недостаточно, чтобы считать что-то неисправным. Читайте профили подключений из главы 4 вместе с фактически использованным маршрутом.56
flowchart TB
accTitle: Разделять маршрут подключения и семейство IP
accDescr: Разделите физический LAN и VPN, IPv4 и IPv6 и сопоставьте использованный трафиком маршрут с каждым решением.
pc["Перечислить подключения"] --> physical["Физический LAN и Wi-Fi"]
pc --> vpn["VPN-адаптер"]
physical --> p["Решения по IPv4 и IPv6"]
vpn --> v["Решения по IPv4 и IPv6"]
p --> route["Сопоставить с фактическим маршрутом трафика"]
v --> route
Рис. 5: Сохраняя различие между физическим подключением и VPN, а также между IPv4 и IPv6, сравнивайте с фактическим маршрутом трафика.
С IPv4 и IPv6 так же. NCSI выполняет активные пробы для обоих параллельно, и успеха по одному из них достаточно, чтобы считать, что подключение к интернету есть. То, что один из них не Internet, само по себе не означает, что весь компьютер не подключён. Какое из них использовало конкретное приложение, выясняют отдельно, наблюдая за его трафиком.1
Если для сравнения вы отключаете VPN, делайте это на разрешённом организацией тестовом компьютере или в согласованное окно изменений. Не отключайте постоянно действующий VPN самовольно ради диагностики.
3. Сначала разделите: «только отображение или трафик тоже не проходит»
Когда причины-кандидаты известны, примерьте их к своим симптомам. Сначала проверьте, работает ли новый обмен данными прямо сейчас, например открыв новую страницу на разрешённом сайте. Экран, открытый с прошлого раза, ничего не говорит о текущем состоянии связи.
Вместо «сеть работает» добейтесь конкретности до формулировки «в это время, в этом приложении, к этому назначению, эта операция прошла успешно» — так круг поиска сузится.
| Что происходит сейчас | Где проверить в первую очередь |
|---|---|
| Не работает ни веб, ни бизнес-приложение | Не ограничивайтесь NCSI: проверьте настройки IP, DNS, маршруты и проверку подлинности для доступа |
| Веб работает, но только Windows показывает «нет» | Посмотрите назначение проверки NCSI и записи о сбое этого трафика |
| Отображение меняется только при подключении VPN | Сравните адаптеры, IPv4/IPv6, DNS и маршруты до и после подключения |
| После подключения к Wi-Fi появляется экран проверки подлинности | Пройдите официальную проверку подлинности и проверьте трафик и повторное решение |
| Ручной HTTP проходит, а NCSI — нет | Ищите различия во времени, учётной записи запуска, прокси и маршруте |
| Windows показывает Internet, но одно приложение даёт сбой | Проверьте назначение, проверку подлинности, TLS и тайм-ауты этого приложения |
Это таблица не для установления причины, а для выбора места следующей проверки. Даже если поводом стало расхождение в отображении, при сбое нужного бизнес-приложения отдельно сохраните и результат его обмена данными.
Дальше идут шаги диагностики. Идите в таком порядке: зафиксировать состояние → прочитать настройки назначения проверки → сравнить с ручным трафиком → подтвердить по собственным записям NCSI. Не меняйте корпоративные настройки прокси, VPN и безопасности без разрешения; начните с чтения и нескольких проверок связи.
4. Прежде чем менять настройки, выясните, где произошёл сбой
4.1 Зафиксируйте время возникновения и состояние подключения
Сначала запишите время возникновения, сборку ОС, способ подключения, наличие VPN и приложение, в котором происходит сбой. Версию ОС можно посмотреть командой winver. Затем выведите профили подключений в PowerShell.5
Get-Date -Format o
Get-NetConnectionProfile |
Select-Object Name, InterfaceAlias, InterfaceIndex,
NetworkCategory, IPv4Connectivity, IPv6Connectivity |
Format-Table -AutoSize
Читать нужно имя подключения, InterfaceAlias и InterfaceIndex, а также IPv4Connectivity и IPv6Connectivity. Если строк несколько, читайте их, сохраняя привязку каждого результата к своему подключению. Это нужно, чтобы сравнить результаты того же времени и того же подключения с последующими ручными тестами и журналами.
Значения Public / Private / DomainAuthenticated у NetworkCategory — это классификация, отдельная от решения о подключении к интернету. Смена Public на Private не является общим шагом восстановления при «Нет доступа к интернету». Вывод может содержать имена внутренних сетей, поэтому перед передачей третьим лицам скройте лишние идентифицирующие сведения.5
4.2 Прочитайте, на какое назначение настроен этот компьютер
Прежде чем пробовать стандартное назначение проверки, убедитесь, что на этом компьютере те же настройки. Приведённый код только выводит значения и не изменяет реестр. Он считывает назначения проверки для IPv4 и IPv6, ожидаемое тело ответа и политики, которые управляют, в частности, активной проверкой.17
$internetKey = 'HKLM:\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet'
Get-ItemProperty -LiteralPath $internetKey |
Select-Object EnableActiveProbing, ActiveWebProbeHost,
ActiveWebProbePath, ActiveWebProbeContent,
ActiveWebProbeHostV6, ActiveWebProbePathV6,
ActiveWebProbeContentV6 |
Format-List
$policyKey = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\NetworkConnectivityStatusIndicator'
if (Test-Path -LiteralPath $policyKey) {
Get-ItemProperty -LiteralPath $policyKey |
Select-Object NoActiveProbe, DisablePassivePolling |
Format-List
} else {
'По этому пути реестра политика NCSI отсутствует.'
}
ActiveWebProbeHost и ActiveWebProbePath — это назначение проверки, а ActiveWebProbeContent — ожидаемое тело ответа. Значения с суффиксом V6 тоже сохраните. Если настроено собственное назначение проверки, согласуйте приведённые ниже ручные тесты с этой настройкой и политикой управления.
Вывод об отсутствии ключа политики означает, что по этому пути настроек нет. Это не доказательство того, что управляющих настроек нет вовсе, в том числе через MDM. Не создавайте ненайденный ключ по догадке — уточните у администратора.
Прокси проверяют на экранах настроек Windows и в политиках управления. Для настроек WinHTTP материалом для сравнения послужат netsh winhttp show advproxy в поддерживающих средах и netsh winhttp show proxy в более старых. Однако здесь видна только конфигурация. Маршрут, который NCSI фактически выбрал через PAC или автоматическое определение, нужно сопоставлять с записями трафика, описанными ниже.84
4.3 Разделите, разрешается ли имя и устанавливается ли соединение TCP
Дальше идут ручные сравнительные тесты к стандартному назначению проверки. Выяснить нужно, не разрешается ли имя назначения и не останавливается ли всё на соединении с ним. Сначала проверьте отдельно разрешение имён и соединение TCP.
Resolve-DnsName -Name 'www.msftconnecttest.com' -Type A -DnsOnly
Test-NetConnection -ComputerName 'www.msftconnecttest.com' -Port 80 -InformationLevel Detailed
-Type A в Resolve-DnsName указывает искать IPv4-адрес. Сначала наблюдайте с обычными настройками DNS. Немедленный переход на публичный DNS изменит и внутреннее разрешение имён, и политику управления, из-за чего исходную проблему станет сложнее отследить.9
Test-NetConnection -Port 80 показывает соединение TCP с указанным назначением. Он не проверяет ни тело HTTP, ни проверку подлинности на прокси. В среде, где прямые подключения запрещены и разрешён только трафик через HTTP-прокси, сбой этого TCP-теста может быть нормальным. Сохраните также InterfaceAlias и SourceAddress, чтобы понимать, по какому маршруту получен результат.6
flowchart TB
accTitle: На какие вопросы отвечают ручные тесты
accDescr: Разрешение имени, соединение TCP и ответ HTTP охватывают разное, поэтому не считайте успех на одном уровне гарантией для следующего.
name["Разрешить имя через DNS"] --> tcp["Проверить соединение TCP с назначением"]
tcp --> http["Проверить ответ HTTP и тело ответа"]
http --> own["Сравнить с собственными записями NCSI"]
tcp -.-> proxy["Другой маршрут там, где прокси обязателен"]
Рис. 6: Разрешение имени, соединение TCP и ответ HTTP по порядку подтверждают разные вещи.
4.4 В HTTP смотрите не только на статус, но и на тело ответа
Теперь посмотрите, возвращается ли проверочное тело ответа, описанное в главе 1. На машине, где доступен curl.exe, выполните следующее несколько раз. Пишите .exe явно, чтобы не спутать с синонимом PowerShell.
curl.exe -q --connect-timeout 5 --max-time 15 --include 'http://www.msftconnecttest.com/connecttest.txt'
--include выводит и заголовки, и тело ответа. Тайм-ауты заданы и для соединения, и для всей операции, а поскольку -L не указан, автоматического перехода по перенаправлению не будет и вы увидите первый ответ. Ведущий -q говорит curl не читать файл конфигурации по умолчанию, но переменные среды, связанные с прокси, он не очищает.10
Минимальный пример ожидаемого содержимого приведён ниже. Он пояснительный и не является измеренным журналом из этой статьи. В реальности присутствуют и другие заголовки.2
HTTP/1.1 200 OK
...
Microsoft Connect Test
| Что вернулось | Что смотреть дальше |
|---|---|
| Ответа нет | Где остановилось: разрешение имени, соединение или тайм-аут |
| Перенаправление, например 302 | Куда перенаправляет и не осталась ли непройденной проверка подлинности для доступа |
| 403 | Кто вернул отказ и есть ли запись о блокировке трафика к назначению проверки |
| 407 | Не требует ли прокси проверки подлинности |
| 200, но тело ответа — экран входа и подобное | Кто возвращает содержимое, не являющееся проверочным файлом |
| Ожидаемый статус и тело ответа | Этот ручной запрос успешен. Далее сравните с собственными записями NCSI |
Важно здесь то, что ручной тест не заменяет NCSI, а служит материалом для сравнения. curl — это не тест, который так же наследует PAC-настройки Windows или состояние проверки подлинности браузера. Результат «браузер успешен, curl — нет» сам по себе не подтверждает неисправность NCSI.
Уточните у администратора, как следует использовать прокси, и не записывайте учётные данные прямо в историю команд. И даже если эта проверка HTTP успешна, это не гарантия того, что пройдут HTTPS и проверка подлинности бизнес-API.
4.5 И последнее: найдите записи о том, где NCSI действительно дал сбой
Когда ручные тесты обозначили кандидатов, проверьте поведение самого NCSI. Точка входа — просмотр событий, раздел «Журналы приложений и служб → Microsoft → Windows → NCSI». Проверьте операционный журнал (Operational) вблизи времени возникновения.11
Смотрите не одну строку с ошибкой, а читайте подряд: на каком интерфейсе всё началось и завершилось ли, какова причина сбоя и как изменилось состояние подключения после этого. Сопоставляйте по тому же времени и тому же маршруту, что и ручные тесты, а при необходимости добавьте согласованный сбор пакетов.11
flowchart TB
accTitle: Порядок чтения журналов NCSI
accDescr: Свяжите начало, завершение, причину сбоя и изменение состояния по времени и интерфейсу.
start["По какому маршруту началось"] --> finish["Завершилось ли"]
finish --> reason["Код результата и причина сбоя"]
reason --> state["Состояние подключения после этого"]
state --> correlate["Сопоставить с записями трафика того же времени"]
Рис. 7: Связав начало и изменение состояния, легче проследить, чем ручной тест отличался от NCSI.
Если код результата — ошибка WinHTTP, посмотрите её значение в таблице WinHTTP. Например, 12007 означает, что имя не удалось разрешить, а 12002 — тайм-аут. Однако это лишь подсказка о том, на каком этапе произошёл сбой; сам по себе он не доказывает отказ DNS-сервера или обрыв линии.12
Если подробностей не хватает, администратор включает журнал Analytic через «Показать аналитические и отладочные журналы». Это изменение настроек диагностики, поэтому зафиксируйте время включения, воспроизведите проблему и после сбора верните исходное состояние. Включение не позволяет позже извлечь подробные события за время до него.11
Кроме того, переподключение Wi-Fi или отключение адаптера для воспроизведения может разорвать и служебные подключения, например RDP. Не выполняйте это без предупреждения на рабочей машине или на машине, которой управляете удалённо. Записи трафика могут содержать имена узлов, IP-адреса и сведения, связанные с проверкой подлинности, поэтому ограничьте и место хранения, и круг лиц.
В примере с компанией из начала статьи здесь сопоставляют 403 от ручного HTTP, журнал NCSI за то же время и записи об отказах прокси, доступные администратору. Если отклонялось только назначение проверки — исправьте это правило и проверьте снова. Если другой маршрут был только у ручного теста — пересмотрите условия сравнения. Не решайте по одной лишь цифре 403, что это «ошибка NCSI» или «проблема нашего прокси»; выбирайте следующее действие по записям. Это гипотетический пример диагностики, а не результаты реального проекта.
5. Не пытайтесь исправить только отображение старыми способами
Не путайте DNS-трафик Windows 11 с DNS-пробой старых версий
В старых руководствах встречается DNS-проба к dns.msftncsi.com. Однако официальный FAQ по NCSI объясняет, что начиная с Windows 11 активная проба использует HTTP. Даже если в записи Windows 11 есть DNS-трафик, это может быть разрешение имени для HTTP-назначения.2
flowchart TB
accTitle: Различать роль DNS-трафика
accDescr: Читайте разрешение имени для HTTP-назначения в Windows 11 и DNS-пробу старых версий как разные вещи.
dns["В записи есть DNS-трафик"] --> purpose{"Для чего этот трафик"}
purpose --> http["Разрешение имени HTTP-назначения"]
purpose --> legacy["DNS-проба старых версий"]
http --> win11["Может потребоваться и в Windows 11"]
legacy --> version["Проверить версию ОС и фактические журналы"]
Рис. 8: DNS-трафик, который ищет HTTP-назначение, и сама DNS-проба — разные вещи.
Поэтому старое объяснение «все DNS-запросы, отдельные от HTTP, должны проходить» нельзя сделать правилом, общим для всех версий Windows. Читайте версию исследуемой ОС вместе с фактическими журналами.
Ещё одна путаница — название места настройки. В Windows 11 компонент, выполняющий NCSI, перешёл от традиционного NLA на сторону Network List Manager, но для настроек вроде назначения проверки по-прежнему используется путь реестра с NlaSvc из главы 4. Не определяйте выполняющую службу только по тому, что в пути указан NlaSvc.1
Остановка проверки не восстанавливает трафик, который не проходил
Установка EnableActiveProbing в 0 или запрет активной проверки политикой — это настройки, ограничивающие проверку подключения. Это не операции, восстанавливающие сбой DNS или маршрут через прокси. Отделяйте принятие этого как политики управления для изолированной сети от изменения, цель которого — убрать предупреждение. Microsoft также не рекомендует отключать активную пробу как решение проблем NCSI.71
По той же причине поддельный ответ об успехе, полное отключение брандмауэра или отключение IPv6 без оснований не становятся первыми шагами. Изменение отображения и улучшение нужного вам трафика — разные вещи.
flowchart TB
accTitle: Не судить об исправлении только по отображению
accDescr: После изменения настроек проверяйте не только изменение отображения, но и место сбоя и улучшение нужного трафика.
change["Обоснованное изменение"] --> probe["Проверить проверочный трафик заново"]
change --> app["Проверить нужный трафик заново"]
probe --> judge["Судить об улучшении по обоим результатам"]
app --> judge
Рис. 9: Даже после обоснованного изменения проверяйте и проверочный трафик, и нужный вам трафик.
Когда исправляют правила разрешений в организации, тоже не заканчивают статической регистрацией IP-адресов из старой статьи. Инфраструктура доставки публичного назначения проверки NCSI может меняться, и Microsoft рекомендует избегать правил разрешения, зависящих от конкретных IP-адресов. Согласуйте с администратором правила, соответствующие фактическому назначению проверки, сервису и маршруту.2
6. Разработчикам: не решайте, что «связи нет», только по NCSI
Всё сказанное выше касается и проектирования приложений для Windows. Если ОС показывает «Нет доступа к интернету» и вы, не попробовав ни разу нужный запрос, помечаете приложение как «офлайн», вы можете остановить трафик, который на самом деле проходил бы. И наоборот, ошибочно считать, что бизнес-API обязательно ответит успехом раз ОС сообщает Internet.
INetworkListManager::get_IsConnectedToInternet, который возвращает решение о связности всей ОС, — это API, возвращающий состояние подключения к интернету локальной машины. Он не гарантирует, что отдельный API или общая папка работают, что проверка подлинности проходит и что у вас есть права на их использование.13
В терминах проектирования это можно сформулировать так: состояние подключения ОС используйте как подсказку для отображения и переподключения, а успех или сбой нужного трафика ведите отдельно. Цель — уметь одновременно держать два факта: «решение Windows — локальное подключение, а бизнес-API был доступен».
flowchart TB
accTitle: Вести решение ОС и результат бизнес-трафика раздельно
accDescr: Состояние подключения ОС используйте как подсказку, а для нужного трафика предусмотрите независимую обработку успеха и сбоя.
status["Состояние подключения ОС"] --> hint["Подсказка для отображения и переподключения"]
request["Нужный запрос"] --> outcome{"Фактический результат"}
outcome --> ok["Обработать как успех"]
outcome --> error["Зафиксировать причину сбоя"]
error --> retry["Повторить, убедившись в безопасности"]
Рис. 10: Используйте решение ОС как подсказку, а для бизнес-трафика предусмотрите отдельную обработку успеха и сбоя.
Журнал тоже не сводите к одному слову «офлайн»: фиксируйте наблюдённый этап сбоя — DNS, соединение, TLS, проверку подлинности, ответ HTTP и подобное. Для запросов задавайте тайм-ауты и отмену, чтобы интерфейс не оставался в ожидании.
Однако у повторной попытки после тайм-аута есть отдельная оговорка. Обновляющая операция, например оформление заказа или перевод денег, может быть уже выполнена на другой стороне, даже если ответ не успел прийти. Не решайте «раз тайм-аут, значит не выполнено» и не отправляйте снова; определите как часть спецификации приложения, допустима ли повторная попытка, какой механизм предотвращает дублирование и как уточнить результат. Это не та проблема, которую NCSI решит за вас.
7. Итог: читайте отображение и трафик как отдельные факты
«Сеть работает, но написано, что интернета нет» — не обязательно противоречие. Подключение к Wi-Fi, обмен данными с нужной стороной и собственное решение Windows по NCSI подтверждают разные вещи.
Сначала разделите, расходится ли только отображение или нужный трафик тоже не проходит. При диагностике используйте настройки назначения проверки и ручные тесты как материал для сравнения, а фактическое поведение подтверждайте по журналам самого NCSI. И после изменения смотрите не только на значок, но и на то, улучшились ли проверочный трафик и нужный вам трафик.
От «должно быть подключено» — к «какой трафик и где дал сбой». Размышляя в этом порядке, вы сузите круг поиска прежде, чем начнёте менять настройки наугад.
Похожие статьи
Источники
Дата проверки: 11 сентября 2026 года. При расхождениях между версиями ОС приоритет отдаётся официальному FAQ по NCSI, а процедуры из старых руководств для прежних клиентов не рассматриваются как фиксированная спецификация Windows 11. Названия журналов в интерфейсе и доступные команды тоже сверяйте со своей фактической сборкой ОС и настройками управления.
-
Microsoft Learn, NCSI overview. Активная и пассивная пробы, компонент, выполняющий NCSI в Windows 11, места настройки, IPv4 и IPv6, а также предостережения об отключении. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Microsoft Learn, Answers to common questions about NCSI. HTTP-проба в Windows 11, назначение проверки, кандидаты на сбой вроде VPN и DNS, а также предостережения о правилах разрешения по фиксированным IP-адресам. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, An Internet Explorer or Edge window opens when your computer connects to a corporate network or a public network. Портал проверки подлинности и открывающийся браузер, а также HTTP-ответ для проверки. Приведено как объяснение, охватывающее и старые версии. ↩ ↩2
-
Microsoft Learn, WinHTTP AutoProxy Support. Место PAC и автоматического определения прокси. ↩ ↩2
-
Microsoft Learn, Get-NetConnectionProfile. Профили подключений, NetworkCategory и состояния IPv4 и IPv6. ↩ ↩2 ↩3
-
Microsoft Learn, Test-NetConnection. Диагностика соединения TCP, маршрута и адреса источника. ↩ ↩2
-
Microsoft Learn, Connectivity Policy CSP. Политика управления, управляющая активными проверками NCSI. ↩ ↩2
-
Microsoft Learn, Netsh.exe commands. Отображение настроек прокси WinHTTP. В поддерживающих средах используйте show advproxy. ↩
-
Microsoft Learn, Resolve-DnsName. Область DNS-запроса и его параметры. ↩
-
curl project, curl man page. Подавление файла конфигурации, тайм-ауты, вывод заголовков, обработка перенаправлений и прокси. ↩
-
Microsoft Learn, How to collect data to diagnose NCSI issues. Сопоставление журналов Operational и Analytic с записями трафика. ↩ ↩2 ↩3
-
Microsoft Learn, Error Messages (Winhttp.h). Значение кодов результата WinHTTP. ↩
-
Microsoft Learn, INetworkListManager::get_IsConnectedToInternet. API, возвращающий состояние подключения ОС к интернету. ↩
Похожие статьи
Недавние статьи с теми же тегами помогут подробнее изучить близкие темы.
Порядок разрешения имён в Windows — hosts, кэш DNS, LLMNR/mDNS и DoH
Какой слой ответил — hosts, кэш DNS, DNS-сервер или LLMNR/mDNS — решает, почему часть ПК не подключается. Порядок разрешения имён Windows...
Что на самом деле делает быстрый запуск — почему «Завершение работы» в Windows не то же самое, что перезагрузка
Завершение работы Windows по умолчанию — гибридное: ядро и драйверы сохраняются в hiberfil.sys. Почему только перезагрузка их сбрасывает ...
Time Travel Debugging — записывать и перематывать ошибки, которые не воспроизводятся в долгоживущих приложениях
Ошибка раз в месяц оставляет в дампе только результат. Записывайте и перематывайте исполнение через WinDbg Time Travel Debugging (TTD): T...
Декларативное управление конфигурацией Windows через DSC — IaC начинается с dsc.exe
Не пора ли отказаться от сценариев-инструкций, которые ломаются при повторном запуске? Разбираем DSC v3 (dsc.exe): конфигурацию Windows о...
Пул потоков Win32 — параллелизм через CreateThreadpoolWork без своих потоков
Не плодите ли вы CreateThread по всему нативному коду? Разбираем API пула потоков Win32, переработанный в Vista: четыре объекта work, tim...
Связанные темы
Эти страницы показывают тему статьи в более широком контексте услуг и решений.
Технические темы Windows
Раздел о разработке Windows, расследовании сбоев и использовании существующих активов.
Услуги по этой теме
Статья напрямую связана со следующими услугами.
Расследование ошибок и причин
Разбираем случай, когда браузер работает, а в офлайн уходит только бизнес-приложение, разделяя решение о связности, учётную запись запуска, прокси и журналы трафика.
Разработка приложений для Windows
Обращайтесь к нам по проектированию и доработке бизнес-приложений для Windows, которые не полагаются чрезмерно на отображаемое состояние подключения и корректно обрабатывают реальные результаты обмена данными и повторные попытки.
Частые вопросы
Вопросы, которые часто возникают при консультациях по теме статьи.
- Почему Windows показывает «Нет доступа к интернету», хотя Wi-Fi подключён?
- Потому что подключение к Wi-Fi, обмен данными с нужным сервисом и решение о связности, которое Windows принимает через NCSI, — это три разные вещи. Показания могут расходиться не только при аварии на самой линии, но и из-за проблем с DNS, прокси, VPN или captive portal, которые влияют на проверочный трафик. Сначала выясните, что действительно может обмениваться данными.
- Если сайт открывается в браузере, можно ли считать, что и NCSI в порядке?
- Нельзя. Назначение, выбранный прокси, состояние проверки подлинности, IPv4 или IPv6, а также время запроса могут различаться. Ручной доступ используйте как материал для сравнения, а подтверждайте по журналам событий самого NCSI и, при необходимости, по записи пакетов.
- Требуется ли в Windows 11 DNS-проба к dns.msftncsi.com?
- В официальном FAQ по NCSI объясняется, что начиная с Windows 11 активная проба использует HTTP. Различайте DNS-трафик, который разрешает имя HTTP-назначения, и DNS-пробу, применявшуюся в старых версиях. Важно не считать, что все запросы из старой инструкции обязательны.
- Поможет ли установка EnableActiveProbing в 0?
- Этот параметр останавливает проверочный трафик, а не устраняет причину вроде сбоя DNS или маршрутизации. Кроме случаев, когда его принимают как политику управления, например для изолированной сети, не меняйте его ради того, чтобы убрать предупреждение, — сначала выясните, где происходит сбой.
- Если NCSI сообщает Internet, гарантирован ли доступ к корпоративным системам?
- Не обязательно. Решение ОС о связности не гарантирует, что отдельный API или общая папка работают, что проверка подлинности проходит и что у вас есть права на их использование. Приложение должно отправлять действительно нужный ему трафик и обрабатывать тайм-ауты, отмену, вид сбоя и безопасность повторной попытки.
Об авторе
Страница с профилем автора статьи.
Го Комура
Представитель KomuraSoft LLC
Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.