Рукостискання є, адреса зникла: три стани WireGuard
Свіже рукостискання доводить, що партнер відповів, а не те, що інтерфейс зберігає свою адресу чи що наступний пакет піде потрібним висхідним каналом.
WireGuard може одночасно мати свіже рукостискання і не мати адреси, і цей стан узгоджений, а не суперечливий. Рукостискання є подією партнера, адреса належить інтерфейсу, а маршрут вирішує, яким висхідним каналом пакет залишає хост. Три рівні, три власники, і кожен може відмовити, поки два інші виглядають здоровими.
Читання їх як одного статусу перетворює діагностику, що мала тривати дві хвилини, на цілий день перезапусків служб.
Рукостискання є подією партнера, а не подією адресації
Рукостискання WireGuard доводить, що налаштований партнер відповів чинним ключем і що сеансові ключі актуальні. Воно нічого не каже про локальну адресу на інтерфейсі й про те, чи веде туди якийсь маршрут. Адресу призначає помічник або мережевий менеджер, а конфігурація протоколу лише називає партнерів і ключі. Плутанина між цими двома і є причиною, чому здорове рукостискання читають як робочий тунель.
Тому wg show може повідомити про рукостискання віком у секунди на інтерфейсі, який не прийме жодного пакета від застосунку.
Менеджер, який перестворює інтерфейс, може скинути адресу, не торкаючись конфігурації партнера, і наступне рукостискання одразу успішне, бо ключі не змінювалися. Рядок журналу про успішне рукостискання точний і не стосується збою.
| Observation | Which layer it belongs to | Wrong conclusion it invites |
|---|---|---|
| Handshake a few seconds old | Peer and keys | The tunnel is usable for application traffic |
Address present on wg0 | Interface configuration | Traffic actually egresses through it |
Route points at wg0 | Forwarding table | The outer packet uses the intended uplink |
У адреси інтерфейсу є свій власник
Адреса на тунельному пристрої може прийти з рядка Address помічника, від DHCP-клієнта, що працює на інтерфейсі, або від демона керування, який створює її під час підключення. Яким би він не був, цей компонент володіє адресою і відновить її чи ні за своєю логікою. Читання адреси без називання її власника залишає вас без пояснення, чому вона зникла.
Два власники на одному інтерфейсі є класичним збоєм. Запуск помічника й настільного мережевого менеджера на одному пристрої створює гонку, у якій один видаляє те, що інший щойно налаштував, а кінцева точка весь цей час відповідає.
Виберіть одного власника і дозвольте іншому інструменту спостерігати, а не керувати. Це рішення варто записати, бо симптом з'являється через тижні й виглядає як випадкова втрата адреси.
Висхідний канал вибирає маршрут, а не інтерфейс
Внутрішній маршрут, що вказує на wg0, вирішує, що трафік входить у тунель. Окреме рішення надсилає зашифровані зовнішні пакети до партнера, і на хості з кількома висхідними каналами це рішення приходить із таблиці пересилання та правил політики. Роумінг Wi-Fi може змінити зовнішній шлях, не торкаючись внутрішньої адреси.
Отже, робочий тунель і недоступний партнер є сумісними станами, як і коректний партнер зі зламаним внутрішнім маршрутом. Три спостереження треба брати разом, в один момент, інакше порівняння безглузде.
Порівняйте три стани за один прохід
Три команди лише для читання відповідають на три питання в тому порядку, який найшвидше ізолює збій. Запустіть їх, нічого не змінюючи між ними.
ip address show dev wg0
ip route get 10.80.0.1
wg show wg0 latest-handshakes transfer
Перша показує, чи має інтерфейс адресу взагалі, а друга — який пристрій використав би конкретне призначення просто зараз. Третя повідомляє час останнього рукостискання та лічильники байтів, і тільки вона з трьох описує партнера, а не локальний хост.
Читайте лічильники поряд із позначкою часу. Рукостискання, яке постійно оновлюється, поки передавання стоїть на місці, означає, що партнер відповідає, але нічого корисного не проходить, і це вказує на маршрутизацію або ACL, а не на ключі. Позначка часу, яка перестає рухатися за наявної адреси, вказує вгору за течією. Обидва прочитання беруться з того самого рядка виводу, і жодне не видно, якщо перевіряти лише наявність рукостискання.
Виправте той конкретний стан, який неправильний, а потім перевірте застосунок, а не тунель. Свіже рукостискання є доказом про партнера, а доказ про партнера не доводить, що наступний запит із вашого браузера знайде адресу, маршрут і робочий висхідний канал. посібник з wg-quick прямо каже, що з цього налаштовує помічник, а що належить протоколу.