Що насправді відбувається під час запуску VPN у Linux
Запуск VPN у Linux створює інтерфейс, встановлює маршрути й змінює резолвер. Розуміння того, яка служба відповідає за кожен крок, пояснює більшість помилок налаштування.
Натисніть «підключитися», і на машині Linux змінюються три речі: з'являється інтерфейс, встановлюються маршрути й резолвер починає відповідати інакше. Більшість помилок налаштування виникають через те, що одна з цих трьох речей відбувається без інших, або через те, що дві програми не сходяться в тому, кому вони належать. Розуміння послідовності пояснює збій швидше, ніж читання виводу журналу клієнта.
Інтерфейс з'являється раніше, ніж будь-що запрацює
Клієнт тунелю відкриває віртуальний інтерфейс і передає йому пакети. Пристрій TUN переносить пакети IP, що потрібно маршрутизованому VPN; пристрій TAP переносить кадри Ethernet, що потрібно мостовій схемі. Модуль ядра надає пристрій, і клієнт володіє ним увесь час, поки триває сеанс.
Поява інтерфейсу не те саме, що працюючий тунель. Він може існувати з адресою, поки партнер недоступний, і саме тому список інтерфейсів — перша перевірка, а не остання. Пристрій, який повідомляє, що він піднятий, описує погляд ядра на віртуальне з'єднання, а не готовність партнера відповідати.
Залиште наданий режим інтерфейсу без змін. Перетворення профілю TUN на TAP не робить маршрутизований сервер мостовим і зазвичай дає з'єднання, яке встановлюється й нічого не передає.
Маршрути встановлює той, кому належить тунель
Маршрути — це друга зміна, і їхня належність важливіша за вміст. Профіль NetworkManager, модуль systemd і клієнт, запущений вручну, можуть встановлювати маршрути, і якщо двоє з них роблять це одночасно, виходить таблиця, яку потім ніхто не зможе пояснити.
ip -br addr show ip route show ip -6 route show
Профіль повного тунелю замінює маршрут за замовчуванням; профіль розділеного тунелю додає конкретніші маршрути й залишає маршрут за замовчуванням як є. Обидва варіанти нормальні, і другий — причина, чому видалення маршруту за замовчуванням є поганою першою перевіркою на машині, якою ви керуєте віддалено. Видалення — також найшвидший спосіб втратити сеанс, який ви використовуєте, щоб виправити проблему.
Читайте таблицю, а не припускайте. Конкретніший маршрут або правило політики може спрямовувати трафік у тунель, поки маршрут за замовчуванням усе ще вказує на фізичний інтерфейс, що виглядає суперечливо, доки не прочитаєш усю таблицю. Таке поєднання нормальне для розділеного тунелю й бентежить того, хто чекає, що один рядок опише схему. Шукайте маршрут, що відповідає вашому реальному призначенню, а не той, що відповідає діаграмі.
Резолвер переходить в інші руки
DNS — третя зміна і та, якою найчастіше керують десь, куди ви не зазирали. На настільній системі NetworkManager може передавати налаштування резолвера для кожного з'єднання. У системі з systemd-resolved налаштування застосовуються для кожної ланки, і /etc/resolv.conf може бути заглушкою або символьним посиланням, а не файлом, який варто редагувати.
resolvectl status readlink -f /etc/resolv.conf cat /etc/resolv.conf
Якщо ручна правка файлу резолвера зникає після перепідключення, це сигнал знайти компонент, який його підтримує, і замість цього змінити профіль. Редагування створеного файлу — це зміна, яку перепідключення зітре.
Приватні імена зазвичай потребують внутрішнього резолвера й доменів пошуку, які надав оператор. Заміна на публічний резолвер може зламати саме той ресурс, для якого існує VPN, і симптом виглядає як збій маршрутизації, а не DNS. Перевірте ім'я й адресу окремо, бо робота одного й збій іншого точно вказують, куди дивитися. Одне це порівняння економить годину налагодження маршрутів.
Один керівник на з'єднання
Формат профілю вирішує, яка програма може його використовувати. Профілю OpenVPN потрібен OpenVPN або сумісний плагін, а конфігурація WireGuard має власний формат із ключами партнера й дозволеними префіксами. Діалог імпорту не перекладає одне в друге, що б не підказувало розширення файлу.
Виберіть одного керівника й дозвольте йому володіти з'єднанням. Підняття одного й того самого тунелю двома інструментами робить таблицю маршрутів і поведінку при перепідключенні неоднозначними, і зазвичай перемагає другий, що запускається, важко відтворюваними способами.
Встановіть пакети, які підтримує ваш дистрибутив, і отримайте профіль в оператора. Ставтеся до нього як до облікових даних, бо він зазвичай містить закритий ключ або еквівалентний матеріал, і зберігайте його там, де живуть решта ваших секретів. Профіль, залишений у папці завантажень, — це ключ, залишений на столі.
Що перевіряти, коли все піднято, але не працює
Коли інтерфейс піднятий і клієнт повідомляє про успіх, рухайтеся назовні: чи вибирає таблиця маршрутів тунель для призначення, чи відповідає резолвер за приватне ім'я і чи має протилежний бік зворотний шлях. Кожне має свою команду й свого власника.
nmcli connection show --active nmcli device status wg show
Довідник із nmcli описує команди стану й з'єднання, якщо вам потрібен повний набір. Тут важлива різниця між активним профілем і пристроєм, який переносить трафік, бо вони можуть розходитися.
Перепідключіться один раз через того самого керівника, перш ніж називати налаштування завершеним, і перевірте, що DNS досі працює після відключення. Конфігурація, яка працює лише до першої зміни мережі, не завершена, вона просто працює в цей момент.