Рукостискання свіже у wg show, кінцева точка правильна, ключі ніколи не змінювалися — а ping усе ще каже, що маршруту до піра немає. Ви змінили підмережу тунелю годину тому. Цей симптом — підпис невідповідності префікса, а не проблеми з ключами: WireGuard завершив рукостискання, а потім відкинув дані, бо адреса джерела більше не відповідає тому, що прийме приймальний пір. Є два розумні способи провести зміну підмережі, і вони відмовляють у різних місцях.

Два способи провести зміну, і скільки коштує кожен

Варіант A — перенумерація на місці: змініть адресу інтерфейсу, діапазони пірів, маршрути й кожну копію конфігурації, потім перезавантажте. Варіант B — побудувати другий інтерфейс на новому префіксі поряд зі старим, перенести пірів і видалити старий інтерфейс, коли трафік справді переїхав.

A: renumber in placeB: parallel interface
DowntimeThe reload window, per hostNone if peers are added to both
RollbackRe-apply the previous filesPoint peers back at the old interface
RiskHalf-applied change: new address, old rangesTwo live interfaces with overlapping intent
EffortSmall, if the deployment has one ownerHigher, and needs a cleanup step
FitsTwo or three peers you controlMany 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 у приймача, перш ніж чіпати ключі.
  • Пошук маршруту вказує не на той інтерфейс: маршрутом володіє менеджер або контейнер, а не ваш файл.
  • Числова адреса гаразд, а ім'я хоста зламане: старе посилання, а не петля маршрутизації.
  • Зміна завершена лише тоді, коли після перезапуску все ще використовується новий префікс.

Схожі статті