Публічна конфігурація VPN перестала працювати? Прочитайте етап відмови
Завантажений профіль описує один хост в один день. Прочитайте, яке твердження не витримало, перевірте сертифікат, який пред’являє інша сторона, і ніколи не вимикайте перевірку.
Профіль працював у вівторок, а в п’ятницю клієнт крутиться тридцять секунд і здається. На вашій машині нічого не змінилося. У тому й річ: завантажена конфігурація описує один хост в один момент, і оператор на іншому кінці не зобов’язаний тримати цей опис правдивим. Спокуса — почати правити налаштування безпеки, доки тунель не підніметься знову. Саме цей інстинкт призводить до того, що люди запускають профіль з вимкненою перевіркою сертифіката, а це гірше, ніж зовсім без тунелю.
Файл описує мить, а не договір
Файл конфігурації — це набір тверджень: це ім’я хоста слухає на цьому порту з цим протоколом, пред’являє сертифікат, що відповідає цьому імені, і приймає ці облікові дані. Коли будь-яке з них перестає бути правдивим, файл застарів, і виправлення належить стороні оператора за межею, а не вашим налаштуванням.
Публічні списки вузлів роблять це очевидним за своєю природою. Вузли тримають волонтери, вони з’являються й зникають, адреси перевикористовуються, а порти блокує та мережа, за якою вони перебувають. Список — це знімок, який перестворюється, а копія на вашому диску — фотографія старішого знімка.
Комерційні сервіси змінюються повільніше, але не ніколи. Центри сертифікації змінюються, слухач переїжджає зі спільної адреси на окрему, старий протокол виводиться з експлуатації, і надходить новий список шифрів. Кожне з цього невидиме, доки ваш клієнт не спробує підключитися й не отримає іншу відповідь, ніж очікує файл.
Прочитайте етап відмови, перш ніж торкатися налаштування
Повідомлення про помилку каже, яке твердження не витримало, і кожне твердження має зовсім інше виправлення. Правити шифри, коли ім’я хоста вже не розв’язується, — змарнувати півдня й нікого нічому не навчити.
| What happens | The assertion that broke | Supported response |
|---|---|---|
| Name never resolves | The host still exists under that name | Get a current endpoint from the operator |
| TCP connect times out | The listener is on that port and reachable | Check the current published port, then the local network |
| TLS or key exchange fails | The peer presents the expected identity | Compare the certificate, not the cipher list |
| Authentication rejected | The account is still valid | Get 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Якщо два хеші різняться лише пробілами, у вас зміна форматування. Якщо вони різняться кінцевими точками, оператор щось переніс, і опублікований файл — авторитет. Якщо опублікований файл старіший за ваш, ви, ймовірно, дивитеся в кеш, і застаріла відповідь відправить вас не туди.
Виведіть старий запис з обігу й запишіть, що сталося
Після перевірки робочої заміни видаліть старий профіль, а не тримайте його як резерв. Застарілий запис, що підключається наполовину, — це пастка: його оберуть під час збою, він відмовлятиме повільно, і той, хто шукає причину, проведе перші десять хвилин із неправильним файлом.
Тримайте короткий запис поза конфігурацією: дату, стару кінцеву точку, етап відмови й те, що її замінило. Публічні вузли змінюються, і через шість тижнів те саме питання приходить з іншою людиною. Один рядок у файлі нотаток відповідає на нього за секунди.
Якщо з однієї мережі кожен вузол відмовляє однаково а з іншої — жоден, припиніть правити профілі й подивіться на локальний шлях. Захоплений портал, відфільтрований діапазон портів або перехоплювальний проксі дадуть однакові помилки в незв’язаних провайдерів, і саме ця закономірність — єдина ознака того, що проблема ніколи не була у файлі.