WireGuard: немає маршруту до піра після зміни підмережі — два виходи
Зміна підмережі ламає WireGuard у двох місцях: AllowedIPs і зворотний шлях. Порівняйте перенумерацію на місці з перебудовою інтерфейсу.
Рукостискання свіже у wg show, кінцева точка правильна, ключі ніколи не змінювалися — а ping усе ще каже, що маршруту до піра немає. Ви змінили підмережу тунелю годину тому. Цей симптом — підпис невідповідності префікса, а не проблеми з ключами: WireGuard завершив рукостискання, а потім відкинув дані, бо адреса джерела більше не відповідає тому, що прийме приймальний пір. Є два розумні способи провести зміну підмережі, і вони відмовляють у різних місцях.
Два способи провести зміну, і скільки коштує кожен
Варіант A — перенумерація на місці: змініть адресу інтерфейсу, діапазони пірів, маршрути й кожну копію конфігурації, потім перезавантажте. Варіант B — побудувати другий інтерфейс на новому префіксі поряд зі старим, перенести пірів і видалити старий інтерфейс, коли трафік справді переїхав.
| A: renumber in place | B: parallel interface | |
|---|---|---|
| Downtime | The reload window, per host | None if peers are added to both |
| Rollback | Re-apply the previous files | Point peers back at the old interface |
| Risk | Half-applied change: new address, old ranges | Two live interfaces with overlapping intent |
| Effort | Small, if the deployment has one owner | Higher, and needs a cleanup step |
| Fits | Two or three peers you control | Many peers, remote sites, or no maintenance window |
Саме наполовину застосований стан робить варіант A небезпечним, бо він не виглядає зламаним. Інтерфейс піднімається, рукостискання проходить, і відмовляє лише шлях даних. Варіант B вимагає більше роботи, але тримає робочий шлях живим, поки ви шукаєте кожне посилання.
Що має рухатися разом на вашому боці
Чотири речі на локальному хості описують ту саму підмережу, і зміна однієї є зміною всіх: адреса інтерфейсу, AllowedIPs кожного піра, маршрут, який система використовує для цих призначень, і все, що менеджер встановлює від вашого імені. З wg-quick останні дві генеруються з конфігурації щоразу, коли інтерфейс піднімається, тож застаріла копія мовчки повертає старий префікс.
Порівнюйте налаштоване з живим, а не покладайтеся на одне з двох:
wg show
wg showconf wg0
ip addr show wg0
ip route get 10.90.0.5Пошук маршруту — крок, який люди пропускають. Він відповідає, що ядро насправді зробить для призначення, включно з конкретнішим маршрутом, який залишив менеджер або середовище виконання контейнерів. Якщо він указує інший інтерфейс, а не тунель, проблема не в конфігурації.
Для працюючого інтерфейсу застосуйте змінений файл, не розбираючи тунель:
wg syncconf wg0 <(wg-quick strip wg0)Це оновлює пірів і діапазони на місці. Це не оновлює адресу інтерфейсу або маршрути, бо вони не є налаштуваннями WireGuard — тому перенумерація все ще потребує перестворення інтерфейсу або зміни адреси через ip, а потім повторної перевірки маршрутизації.
Що має рухатися разом на дальньому кінці
Саме тут зміна підмережі зазвичай помирає. AllowedIPs — не лише підказка для маршрутизації; це ще й список адрес джерела, які пір має право пред'явити. Коли ви перенумеровуєте клієнтів і залишаєте AllowedIPs сервера на старому префіксі, сервер приймає рукостискання, отримує зашифровані пакети й відкидає їх, бо внутрішнє джерело не збігається з жодним діапазоном, який він пов'язує з цим піром. Помилка не записується, і клієнт бачить тайм-аут.
Тому оновлюйте приймальний бік свідомо: запис піра на сервері має перелічувати новий префікс клієнта, власний зворотний маршрут сервера має вказувати на тунель для цього префікса, і будь-яка нижча мережа за сервером має вивчити новий шлях. Правилам брандмауера, які називали старий діапазон, потрібне те саме, як і всьому, що робить вибір за джерелом.
Діагностика, що розділяє дві відмови, дешева. Свіже рукостискання без даних означає, що тунель піднято і внутрішня адресація не узгоджується. Повна відсутність рукостискання означає, що ви дивитеся на доступність або ключі. Не змінюйте ключі через проблему з префіксом; це скидає єдине, що працювало.
Застарілі копії, що переживають вашу правку
Правка файлу — не те саме, що зміна працюючої системи, і копій більше, ніж люди очікують: юніт або менеджер, якому належить інтерфейс, другий профіль із тим самим ім'ям в іншому каталозі, контейнер із конфігурацією, запеченою в образ, інтерфейс маршрутизатора зі своєю зміненою версією і клієнтський застосунок, який під час запуску повторно імпортує збережений тунель. Кожна з них може повернути старий префікс після того, як ваша правка виглядає завершеною.
Імена теж подорожують. Якщо числовий маршрут працює, а ім'я хоста — ні, внутрішній запис DNS або конфігурація служби все ще вказує на стару адресу тунелю. Виправте посилання, замість розширювати кожен діапазон піра: це приховало б справжню проблему і водночас збільшило б ACL джерела.
Поки працюєте, тримайте відкритим один шлях відновлення: другий спосіб потрапити на хост, послідовну консоль або заплановане відкочування конфігураційних файлів. Зміна тунелю, яка замикає вас ззовні машини, яку ви змінюєте, — найчастіший спосіб перетворити це завдання на вечір.
Вибір між двома, і перевірка перемикання
Обирайте A, коли вам належить кожен пір, число мале і короткий простій прийнятний. Обирайте B, коли піри — далекі руки, якими ви не керуєте, коли канал між майданчиками має залишатися піднятим або коли ви не можете гарантувати, що кожна копія оновиться за один прохід. У такому разі додайте новий префікс на обидва інтерфейси, переносьте пірів по одному, стежте за трафіком на новому і лише потім видаляйте старий інтерфейс та його маршрути.
За будь-якого варіанта зміна завершена, коли проходять чотири перевірки: рукостискання свіже, пошук маршруту для призначення з новим префіксом називає тунель, навантаження в кілька сотень байтів проходить в обидва боки, і те саме правильно після перезапуску хоста або менеджера. Офіційне керівництво wg(8) є довідкою про те, що AllowedIPs означає в кожному напрямку, і його варто перечитати, перш ніж розширювати діапазон, щоб симптом зник.
- Свіже рукостискання і немає даних: подивіться AllowedIPs у приймача, перш ніж чіпати ключі.
- Пошук маршруту вказує не на той інтерфейс: маршрутом володіє менеджер або контейнер, а не ваш файл.
- Числова адреса гаразд, а ім'я хоста зламане: старе посилання, а не петля маршрутизації.
- Зміна завершена лише тоді, коли після перезапуску все ще використовується новий префікс.