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 з тим самим шляхом робить лаунчер незалежним від обох.
Перш ніж завершити, експортуйте профіль, запишіть його адаптер, підмережу й підмережу, яку він маршрутизує, і тримайте сертифікати кожного клієнта в його власній підтеці. Потім переконайтеся, що тека належить клієнту, який ви насправді запускаєте, і видаляйте через клієнт, коли в цього клієнта є сховище імпорту. Саме цей порядок не дає тому самому профілю знову з'явитися після наступного перезавантаження.