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

Этот разрыв между здоровой плоскостью управления и молчащей плоскостью данных и есть вся тема здесь. Два отсчёта одних и тех же счётчиков скажут, на какой стороне вы находитесь.

Рукопожатие доказывает ключи, а не доставку

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

Так туннель может быть полностью установлен, пока каждый пакет внутри него отбрасывается. Неправильно маршрутизированный внутренний пакет и ответ, идущий другим путём, со стороны клиента выглядят одинаково.

Один внутренний адрес — это весь тест

Выберите одно назначение и держитесь его. Собственный адрес туннеля противоположной стороны — самый простой случай, а хост за ней добавляет ровно один переход. Переключение между ними без записи изменения даёт результаты, которые никто не сможет сравнить.

Затем посмотрите на маршрут, который выбирает клиент. Более конкретный локальный маршрут может отправить пакет в другое место ещё до того, как WireGuard вообще будет опрошен, и это происходит всякий раз, когда домашняя LAN пересекается с удалённым диапазоном.

ip route get 10.30.8.10
ip -4 addr show wg0
ip route show table all | grep -w wg0

Адрес, который разрешается в физический интерфейс, уже ответил на вопрос. Туннель ничего не отбрасывает. Пакет так в него и не попал.

Счётчики — это доказательства, а не приговор

wg show сообщает отправленные и полученные байты для каждой стороны, и эти два числа движутся независимо. Снимите показание, выполните один разрешённый запрос, затем в ту же минуту снимите ещё одно.

wg show wg0 transfer
wg show wg0 latest-handshakes
ping -c 4 10.30.8.10
wg show wg0 transfer

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

Фиксированное число байт тоже не порог успеха. Значения счётчиков следуют за трафиком, а отношение к одному числу как к доказательству здоровья даёт уверенную чушь.

Противоположная сторона сама проверяет обратный пакет

Удалённая сторона принимает внутренний пакет только тогда, когда источник попадает в её allowedips. Маршрута, который есть у отправителя, недостаточно. Отсутствующая запись источника у получателя тихо отбрасывает обратный трафик.

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

Держите эксперимент честным

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

Небольшой успешный обмен тоже не исключает всех проблем с путём. Большие пакеты могут не проходить там, где проходят маленькие, а фильтр, совпадающий по размеру или протоколу, под нагрузкой может вести себя иначе.

Держите рукопожатие как известную рабочую стадию и двигайтесь дальше от неё. Следующее полезное доказательство — где останавливается один внутренний запрос, а не новый набор ключей и ещё один круг догадок.

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