OpenVPN Connect и OpenVPN GUI: где Windows хранит профили
Два клиента Windows, две модели профилей: GUI перечисляет файлы .ovpn из папки, Connect держит хранилище импорта. Затем удалите или импортируйте правильно.
В Windows на вопрос "где мой профиль OpenVPN" есть два разных ответа, и неверный выбор стоит целого дня. Общественный OpenVPN GUI считает каталог своим списком профилей: каждый файл .ovpn в настроенной папке появляется в меню в трее, а удалённый из этой папки файл исчезает. OpenVPN Connect работает из хранилища импорта, поэтому сохраняет профиль, удалённый с диска, и игнорирует файл, скопированный туда. Сравнение ниже — то, которым я пользуюсь, чтобы решить, какую папку открыть, прежде чем что-либо трогать.
Список папки против хранилища импорта
Общественный GUI перечисляет файлы при запуске: он читает один каталог конфигурации, выбранный при установке, и файл .ovpn, лежащий там, является профилем. Закройте клиент, скопируйте файл в эту папку, запустите его снова, и запись появится в меню.
Connect, наоборот, строит свой список из записей, созданных при импорте, поэтому скопированный файл невидим, а импортированный профиль переживает удаление исходной загрузки. Именно это единственное различие объясняет большинство сообщений о том, что два клиента хранят профили в разных местах, потому что так и есть.
Общественный GUI: какая папка действительно используется
Важны две папки. Установка для одного пользователя читает %USERPROFILE%\OpenVPN\config; установка для всех пользователей читает C:\Program Files\OpenVPN\config, или путь x86, когда клиент 32-bit. Если профиль появляется только для одной учётной записи Windows, он лежит в папке для одного пользователя, и другая учётная запись его никогда не увидит.
Не выводите путь из установщика. GUI принимает аргумент --config_dir и помнит каталог, с которым был запущен, поэтому ярлык может указывать совсем в другое место. Проверьте цель ярлыка и поле Start in или настройки GUI, прежде чем создавать любой файл.
Удаление — это удаление файлов. Сначала закройте GUI, чтобы он не держал запись в памяти, удалите .ovpn вместе с любыми файлами сертификата или ключа, лежащими рядом, затем запустите клиент снова.
Папка для всех пользователей требует удаления с повышенными правами. Удаление, которое там молча ничего не делает, — это UAC, а не ошибка клиента.
Connect: хранилище импорта и двойная ловушка AppData
Текущие сборки 2.x и 3.x хранят профили в %APPDATA%\OpenVPN Connect\profiles. Сборки около 2.5 использовали вместо этого %ProgramFiles(x86)%\OpenVPN Technologies\OpenVPN Client\etc\profile, поэтому старые и новые ответы на форумах выглядят противоречивыми. Машина, обновлённая на месте, всё ещё может хранить оба варианта.
Пути искажаются при пересказе. %AppData% уже разворачивается в AppData\Roaming, поэтому запись %AppData%\Roaming\OpenVPN Connect\profiles расширяется до AppData\Roaming\Roaming и никуда не указывает. Используйте переменную или буквальный путь, никогда не смесь двух.
Удаляйте через клиент: откройте Profiles, используйте значок карандаша, выберите Delete. Это удаляет запись и сохранённую копию вместе. Удаление папки, пока Connect работает, может оставить запись, которая ничего не открывает, и это жалоба "profile still shows up" в другой её форме.
Импортированная копия — та, которую запускает клиент. Редактирование .ovpn, оставленного в Downloads, ничего не меняет, потому что Connect читает свою сохранённую копию; чтобы изменить remote или cipher, редактируйте профиль внутри клиента, или отредактируйте файл и импортируйте его заново .
Почему удалённый профиль возвращается
Обычная причина — две установки одного семейства клиентов. GUI для одного пользователя и GUI для всех пользователей имеют отдельные каталоги конфигурации, поэтому удаление из одного оставляет другой нетронутым, и в трее по-прежнему отображается имя. Programs and Features — место, где вы убеждаетесь, установлены ли оба.
Вторая причина — профиль, которого никогда не было в проверенной папке. Открытие .ovpn один раз из сетевой папки или папки Downloads может скопировать его в каталог конфигурации для одного пользователя, а импортированные профили Connect существуют только в AppData. Прежде чем что-либо редактировать, поищите имя файла и в %USERPROFILE%, и в %APPDATA%. Папка профиля обычно содержит закрытый ключ рядом с .ovpn, поэтому никогда не вставляйте папку в тикет или чат, чтобы доказать, какой профиль вы удалили, — вместо этого укажите имя файла и метку времени.
Более старые сборки GUI также хранят настройки клиента в реестре. Если в трее по-прежнему отображается имя после исчезновения файла и установлена только одна копия, перезапустите клиент один раз и перепроверьте каталог конфигурации ярлыка, прежде чем думать о правке ключей реестра.
Два туннеля одновременно: сначала адаптеры, потом маршрут
GUI может держать несколько подключений, по одному на виртуальный адаптер; добавьте адаптеры из пункта меню Start, который устанавливает TAP-Windows6, затем подтвердите количество в Network Connections, потому что двум одновременным туннелям нужны два адаптера, и оба должны получать адрес автоматически. Маршрутизация — более жёсткий предел. Два профиля, каждый из которых перенаправляет весь трафик, конкурируют за маршрут по умолчанию, и владеть им может только один, поэтому вы получаете периодические сбои вместо двух работающих туннелей. Оставьте один полный туннель, а второму дайте профиль split-tunnel, который выталкивает только его собственную подсеть.
Перекрывающиеся частные диапазоны нельзя исправить добавлением адаптера. Если оба сервера выдают 10.8.0.0/24, второй туннель конфликтует на уровне адреса, и никакая конфигурация клиента их не разделит.
Имена адаптеров говорят, на что вы смотрите. Get-NetAdapter в PowerShell перечисляет адаптеры TAP-Windows и адаптер Wintun по имени, что быстрее, чем считать значки в Network Connections, когда туннель поднялся на неправильном.
Запуск именованного профиля из скрипта
GUI принимает имя профиля относительно своего каталога конфигурации, поэтому лаунчер выглядит так: "C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect "myvpn.ovpn". Абсолютный путь или процесс, запущенный в другом рабочем каталоге, тихо завершается неудачей, поэтому ярлык, работающий двойным щелчком, ломается под Task Scheduler.
Задайте рабочий каталог вместо надежды. В лаунчере AutoHotkey это SetWorkingDir, C:\Program Files\OpenVPN\config; в Task Scheduler это поле Start in действия. Передача --config_dir с тем же путём делает лаунчер независимым от обоих.
Прежде чем закончить, экспортируйте профиль, запишите его адаптер, его подсеть и подсеть, которую он маршрутизирует, и храните сертификаты каждого клиента в его собственной подпапке. Затем убедитесь, что папка принадлежит клиенту, который вы действительно запускаете, и удаляйте через клиент, когда у этого клиента есть хранилище импорта. Именно этот порядок не даёт одному и тому же профилю появиться снова после следующей перезагрузки.