WireGuard может одновременно иметь свежее рукопожатие и не иметь адреса, и это состояние согласовано, а не противоречиво. Рукопожатие — событие партнёра, адрес принадлежит интерфейсу, а маршрут решает, через какой восходящий канал пакет покидает хост. Три уровня, три владельца, и каждый может отказать, пока два других выглядят здоровыми.

Чтение их как одного статуса и превращает двухминутную диагностику в целый день, уходящий на перезапуск служб.

Рукопожатие — событие партнёра, а не событие адресации

Рукопожатие WireGuard доказывает, что настроенный партнёр ответил действительным ключом и что сеансовые ключи актуальны. Оно ничего не говорит о локальном адресе на интерфейсе и о том, ведёт ли туда какой-либо маршрут. Адрес назначает помощник или сетевой менеджер, а конфигурация протокола лишь называет партнёров и ключи. Путаница между этими двумя и есть причина, по которой здоровое рукопожатие читают как работающий туннель.

Поэтому wg show может сообщить о рукопожатии возрастом в секунды на интерфейсе, который не примет ни одного пакета от приложения.

Менеджер, пересоздающий интерфейс, может сбросить адрес, не трогая конфигурацию партнёра, и следующее рукопожатие сразу успешно, потому что ключи не менялись. Строка журнала об успешном рукопожатии точна и не имеет отношения к сбою.

ObservationWhich layer it belongs toWrong conclusion it invites
Handshake a few seconds oldPeer and keysThe tunnel is usable for application traffic
Address present on wg0Interface configurationTraffic actually egresses through it
Route points at wg0Forwarding tableThe 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 прямо говорит, что из этого настраивает помощник, а что относится к протоколу.

Похожие статьи