Один VPN, два аккаунта Windows: почему ломается второй сеанс
Маршруты и резолверы действуют в масштабе всей машины, поэтому туннель одной учётной записи перенаправляет остальные. Затем найдите, какая политика или модуль входа удалил пункт «Сменить пользователя».
Два человека вошли в систему, один из них подключает корпоративный туннель, и браузер другой учётной записи перестаёт загружать страницы, которые ещё минуту назад работали. На той же машине с экрана входа пропал пункт «Сменить пользователя», поэтому второй человек не может вернуться в собственный сеанс. Проследить это от второго сеанса наружу — самый быстрый способ понять, потому что в подключении первого пользователя нет ничего скрытого, и в проблеме второго пользователя не остаётся ничего загадочного, как только видно, какие объекты общие.
Начните с сеанса, который сломался
Перейдите на рабочий стол второй учётной записи, а не первой. Откройте там терминал и посмотрите таблицу маршрутизации и список резолверов, пока другой сеанс подключён. Всё, что вы видите, принадлежит машине, а не другому пользователю, и это первая подсказка.
Get-NetRoute -AddressFamily IPv4 | Sort-Object RouteMetric | Select-Object -First 12 DestinationPrefix,NextHop,InterfaceAlias
Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object InterfaceAlias,ServerAddresses
Get-NetConnectionProfile | Select-Object Name,NetworkCategory,IPv4Connectivity
Если маршрут по умолчанию теперь указывает на интерфейс туннеля, трафик второго пользователя тоже идёт по нему. Если в списке резолверов появился частный сервер, их запросы теперь уходят туда, куда они не смогут попасть после обрыва туннеля. Ни то, ни другое не является ошибкой клиента; это следствия одного общего сетевого стека.
Третья команда объясняет вторую категорию жалоб. Когда адаптер переключает машину с общедоступной категории сети на частную, правила брандмауэра, привязанные к профилю, меняются сразу для всех учётных записей, поэтому приложения, разрешённые утром, могут быть заблокированы днём, хотя никто не трогал правило.
Подключение — на пользователя, сеть — нет
Windows хранит объект подключения в профиле создавшего его пользователя. Создаваемый им виртуальный адаптер, устанавливаемые маршруты и регистрируемые DNS-серверы действуют в масштабе всей машины. Это разделение и есть источник обоих симптомов из заголовка.
Это же объясняет, почему выход первого пользователя обычно исправляет второго. Удаление подключения удаляет адаптер и маршруты вместе с ним, и состояние в масштабе машины возвращается к тому, что было до чьего-либо подключения. Это полезная диагностика: если выход исправляет другую учётную запись, вы смотрите на общее состояние, а не на сломанный профиль.
Чего сделать нельзя — это дать второму сеансу другую таблицу маршрутизации. Таблица одна, и любые два сеанса делят её. Это свойство операционной системы, а не ограничение конкретного клиента. Это также значит, что любой проект, исходящий из обратного, будет продолжать сбоить, а сбои будут выглядеть как несвязанные ошибки приложений.
Найдите, что удалило пункт «Сменить пользователя», в этом порядке
Быстрое переключение пользователей исчезло по совершенно другой причине, и исправление не имеет отношения к маршрутизации. Пройдите четырёх кандидатов по порядку, потому что первые два откатываются за секунды, а последние имеют цену.
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' -Name HideFastUserSwitching
gpresult /h $env:TEMP\gp.html
Get-Service | Where-Object { $_.DisplayName -match 'Logon|Access|Credential' } | Select-Object Status,Name,DisplayName
Значение реестра — самое простое объяснение. Если оно существует и читается как 1, пункт скрыт политикой, а путь групповой политики: Computer Configuration, Administrative Templates, System, Logon, и параметр, названный для скрытия точек быстрого переключения пользователей. Задайте его как Not Configured и обновите с помощью gpupdate /force.
Вторая команда говорит, доставляется ли эта политика из домена, а не записана локально. Если она появляется в отчёте с победившей GPO, правка локального значения — временное исправление, которое откатится при следующем обновлении, и разговор должен идти с владельцем политики.
Третья команда охватывает другой механизм. Поставщик учётных данных или сетевого доступа, устанавливающий модуль входа, может подавлять пункт, пока работает, а некоторые клиенты также регистрируют компонент, запускаемый до входа и удерживающий заявку на экране входа. Отключение этой службы возвращает переключение, но также убирает функции предвхода или posture, для которых модуль существует.
| Cause | How to confirm | Cost of the fix |
|---|---|---|
| HideFastUserSwitching policy | Registry value present and set to 1 | None; remove the policy |
| Logon module service | Service running under a vendor name | Loses pre-logon and posture behaviour |
| GINA-era assumption | Only relevant on very old Windows | Nothing to fix; the mechanism is gone |
Измените это, не заблокировав себя
Держите открытым один административный сеанс, пока работаете, и никогда не меняйте настройки экрана входа на машине, до которой можно добраться только через этот экран. Сначала выйдите из остальных сеансов, примените изменение, обновите, а затем проверяйте переключением пользователей, а не перезагрузкой.
Запишите, какие функции posture вы отключили. Обновление клиента может переустановить или снова включить модуль входа, и симптом возвращается без очевидной причины, обычно посреди окна поддержки, когда никто не помнит о прежнем изменении.
На управляемом устройстве исходите из того, что параметр доставляется сверху. Проверка отчёта о политиках сначала экономит час локальных правок, которые откатываются. Она также подсказывает, кого спрашивать, когда ответ «нет». Заявка, называющая победившую политику, решается вдвое быстрее той, что описывает ключ реестра, который кто-то уже изменил.
Проверьте обе учётные записи и выберите модель
Проверяйте результат в том порядке, в каком его переживают оба пользователя. Войдите под второй учётной записью при отключённой первой, подтвердите обычный доступ, затем подключите туннель первой учётной записи и подтвердите, что ожидаемый путь второй учётной записи по-прежнему тот, что вы задумали.
qwinsta
Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object InterfaceAlias,NextHop,RouteMetric
Test-NetConnection -ComputerName intranet.example.internal -Port 443
Если обеим учётным записям действительно нужны разные сетевые пути одновременно, честный ответ — две машины, две виртуальные машины или политика, где требуется только один путь. Разделённый туннель на общем подключении может сузить то, что проходит, но не может дать каждому сеансу свою таблицу. Прийти к этому раньше дешевле, чем обнаружить после трёх попыток обхода.
Это решение, которое нужно принять явно, а не латать вокруг. Одна таблица маршрутизации, один список резолверов, один профиль брандмауэра: всё остальное следует из этого, и исправление, которое это уважает, будет работать и в следующем месяце.