Профіль працював у вівторок, а в п’ятницю клієнт крутиться тридцять секунд і здається. На вашій машині нічого не змінилося. У тому й річ: завантажена конфігурація описує один хост в один момент, і оператор на іншому кінці не зобов’язаний тримати цей опис правдивим. Спокуса — почати правити налаштування безпеки, доки тунель не підніметься знову. Саме цей інстинкт призводить до того, що люди запускають профіль з вимкненою перевіркою сертифіката, а це гірше, ніж зовсім без тунелю.

Файл описує мить, а не договір

Файл конфігурації — це набір тверджень: це ім’я хоста слухає на цьому порту з цим протоколом, пред’являє сертифікат, що відповідає цьому імені, і приймає ці облікові дані. Коли будь-яке з них перестає бути правдивим, файл застарів, і виправлення належить стороні оператора за межею, а не вашим налаштуванням.

Публічні списки вузлів роблять це очевидним за своєю природою. Вузли тримають волонтери, вони з’являються й зникають, адреси перевикористовуються, а порти блокує та мережа, за якою вони перебувають. Список — це знімок, який перестворюється, а копія на вашому диску — фотографія старішого знімка.

Комерційні сервіси змінюються повільніше, але не ніколи. Центри сертифікації змінюються, слухач переїжджає зі спільної адреси на окрему, старий протокол виводиться з експлуатації, і надходить новий список шифрів. Кожне з цього невидиме, доки ваш клієнт не спробує підключитися й не отримає іншу відповідь, ніж очікує файл.

Прочитайте етап відмови, перш ніж торкатися налаштування

Повідомлення про помилку каже, яке твердження не витримало, і кожне твердження має зовсім інше виправлення. Правити шифри, коли ім’я хоста вже не розв’язується, — змарнувати півдня й нікого нічому не навчити.

What happensThe assertion that brokeSupported response
Name never resolvesThe host still exists under that nameGet a current endpoint from the operator
TCP connect times outThe listener is on that port and reachableCheck the current published port, then the local network
TLS or key exchange failsThe peer presents the expected identityCompare the certificate, not the cipher list
Authentication rejectedThe account is still validGet credentials reissued or stop using the service
dig +short vpn.example.net
curl -sS -o /dev/null -w 'connect=%{time_connect} tls=%{time_appconnect}\n' --max-time 8 https://vpn.example.net:443/
openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief </dev/null

Середній рядок відокремлює заблокований шлях від зламаного рукостискання, а третій показує видавця й дати чинності сертифіката, який справді пред’являється. Якщо цей видавець не той, який закріпив профіль, сертифікат змінився, і жодна клієнтська опція не зробить старий пін знову правильним.

Зміни сертифіката й ідентичності — найтихіші

Більшість відмов самі про себе оголошують. Зміни ідентичності — ні, бо клієнт, який закріпив ім’я сертифіката, відхилить цілком добрий новий сертифікат із повідомленням, яке багато хто читає як помилку в програмі. Тунель гаразд. Пін застарів.

Пошукайте опції ідентичності, перш ніж щось висновувати:

grep -nE '^(remote|proto|auth|verify-x509-name|tls-crypt|key-direction|ca) ' profile.ovpn
openssl x509 -in profile-ca.crt -noout -subject -dates

Якщо профіль несе вбудований CA, а оператор перейшов на новий центр, старий файл не може перевірити новий сервер. Замінити блок CA на опублікований оператором — законне виправлення. Видалити директиву перевірки — ні, і це ті самі натискання клавіш із зовсім іншим результатом.

Оновлення клієнта може дати той самий симптом без жодних змін з боку оператора. Опції, які мовчки толерувалися, тепер відхиляються, або застарілий протокол вилучається. Це межа сумісності у вашому програмному забезпеченні, і варто перевірити другий профіль на тому ж клієнті, перш ніж звинувачувати сервер.

Лише оператор може опублікувати чинну заміну

Коли вузол зникає, заміна має прийти з того самого джерела, яке опублікувало оригінал. Профіль, що надходить у особистому повідомленні, бо «використовує те саме ім’я сервера», — це неперевірена конфігурація від невідомої сторони, і його імпорт віддає цій стороні контроль над вашою маршрутизацією.

Перевірка дешева. Візьміть поточний файл з опублікованого місця, порівняйте кінцеву точку й протокол зі списком і підтвердьте відбиток матеріалу CA, замість того щоб довіряти імені файлу:

curl -sS -o current.ovpn https://example.org/nodes/current.ovpn
sha256sum current.ovpn profile.ovpn
grep -nE '^(remote|proto) ' current.ovpn

Якщо два хеші різняться лише пробілами, у вас зміна форматування. Якщо вони різняться кінцевими точками, оператор щось переніс, і опублікований файл — авторитет. Якщо опублікований файл старіший за ваш, ви, ймовірно, дивитеся в кеш, і застаріла відповідь відправить вас не туди.

Виведіть старий запис з обігу й запишіть, що сталося

Після перевірки робочої заміни видаліть старий профіль, а не тримайте його як резерв. Застарілий запис, що підключається наполовину, — це пастка: його оберуть під час збою, він відмовлятиме повільно, і той, хто шукає причину, проведе перші десять хвилин із неправильним файлом.

Тримайте короткий запис поза конфігурацією: дату, стару кінцеву точку, етап відмови й те, що її замінило. Публічні вузли змінюються, і через шість тижнів те саме питання приходить з іншою людиною. Один рядок у файлі нотаток відповідає на нього за секунди.

Якщо з однієї мережі кожен вузол відмовляє однаково а з іншої — жоден, припиніть правити профілі й подивіться на локальний шлях. Захоплений портал, відфільтрований діапазон портів або перехоплювальний проксі дадуть однакові помилки в незв’язаних провайдерів, і саме ця закономірність — єдина ознака того, що проблема ніколи не була у файлі.

Схожі статті