Скопированный rasphone.pbk стёр другие VPN уровня системы
Замена глобальной телефонной книги ради поставки одного VPN удаляет все остальные соединения, которые в ней хранятся. Владейте именованным профилем, просмотрите его, затем докажите, что остальные выжили.
Новый VPN появился, аутентификация работала, а VPN сторонней организации, живший на машине два года, исчез в той же перезагрузке. Ничего в журнале развёртывания о нём не упоминало, потому что ничего в развёртывании им не занималось. Пакет заменил глобальную телефонную книгу, а то соединение было записью в этом файле. Это операция копирования, которая ведёт себя ровно так, как должна вести себя операция копирования.
Исправление не в лучшей копии. Оно в том, чтобы не копировать файл.
Что на самом деле содержит телефонная книга
Телефонная книга — это контейнер определений подключений, а не профиль. Записи отдельных пользователей живут в профиле пользователя, а записи всех пользователей живут в пути ProgramData уровня машины, поэтому развёртывание, которое пишет этот файл, затрагивает всех локальных пользователей сразу. Тот же файл несёт и записи, созданные другими поставщиками, и отсюда берётся сопутствующий ущерб.
Определение подключения тоже не вся история. Маршруты, политику DNS, материал доверенного CA и идентичность предоставляют отдельные владельцы.
Определите, какой области принадлежит профиль
Перечислите обе области, прежде чем что-либо писать. Get-VpnConnection возвращает записи текущего пользователя, а Get-VpnConnection -AllUserConnection возвращает записи уровня машины, и одно и то же имя может существовать в обеих с разными параметрами. Решите, какой областью владеет ваше развёртывание, и запишите это, потому что обновление не той области оставляет пользователя подключаться через старый профиль, пока ваше изменение лежит в файле, который никто не читает. Задача планировщика, работающая как SYSTEM тоже видит другой набор профилей, чем вошедший пользователь.
Назначение владельца — это шаг, который не даёт следующему инженеру повторить копирование всего файла.
Создайте или обновите именованное подключение, и ничего больше
Для штатного профиля Windows Add-VpnConnection создаёт одну запись, а -AllUserConnection выбирает область уровня машины. Сначала запустите его с -WhatIf, чтобы предпросмотр попал в вашу расшифровку, а не в жалобу пользователя:
Add-VpnConnection -Name 'Office VPN' -ServerAddress 'vpn.example.com' -TunnelType Ikev2 -AuthenticationMethod Eap -EapConfigXmlStream $approvedEapXml -AllUserConnection -WhatIfEAP XML должен прийти откуда-то законно: экспортирован из работающего эталонного профиля или создан вашими средствами управления для реального шлюза. Без правильных параметров доверия серверу профиль либо подключается не к тому, либо отказывает везде, и ни то ни другое не является успешным развёртыванием.
Если запись уже существует, сравните её параметры и обновите её с помощью Set-VpnConnection вместо удаления и повторного создания. Удаление — это путь, на котором работающая конфигурация теряет поля, которые никто не документировал, и на котором посторонние записи попадают под широкую чистку.
Проверьте, нет ли второй системы управления, которая вернёт старый профиль при следующем обновлении политики. Пилоты чаще срываются именно здесь, а не на самом cmdlet.
Проведите пилот на машине, где уже есть другой VPN
Выберите тестовую машину с посторонней записью уровня машины, разверните, а затем проверьте три вещи: новый профиль появляется в нужной области, аутентификация доходит до частного ресурса, и посторонняя запись по-прежнему подключается. Разверните ещё дважды и убедитесь, что второй прогон меняет только свой профиль. Эта третья проверка ловит пакет, который идемпотентен для собственной записи и разрушителен для всего остального.
Удаление подчиняется тому же правилу: Remove-VpnConnection -Name 'Office VPN' -AllUserConnection снимает одну запись и оставляет остальную часть файла в покое.
Держите предыдущую целевую конфигурацию доступной, чтобы ограниченный откат означал повторный импорт одного профиля, а не восстановление состояния всей машины.