Диагностика и исправление Диагностика и устранение неполадок Обновлено 6 general

WireGuard: почему туннель отключается сам по себе

Разбираем частые причины самопроизвольного отключения WireGuard-туннеля и даём пошаговый план диагностики: от настройки PersistentKeepalive до проблем с питанием и MTU.

WireGuardVPNобрыв туннелядиагностикаNATPersistentKeepalive
Содержание
КороткоЕсли WireGuard-туннель регулярно обрывается — сначала проверьте PersistentKeepalive, затем состояние интерфейса и рукопожатия, маршруты, работу файрвола и энергосбережение. В большинстве случаев проблему решает значение keepalive 25 секунд и корректная маршрутизация.

WireGuard — современный и быстрый VPN, но у него есть особенность: он не держит постоянное соединение. Туннель активируется только при передаче данных. Поэтому внезапные «отвалы» — частая жалоба. В этой статье разберём, почему WireGuard отключается сам по себе, и как это исправить. Диагностику начнём с самых распространённых причин.

1. Не настроен PersistentKeepalive — главный виновник

Из-за особенности WireGuard, если нет трафика, рукопожатие (handshake) происходит только через определённое время. Однако NAT на роутере или файрволе закрывает порт для неактивного соединения. Когда сервер попытается отправить пакет, он не сможет пробиться через NAT, и туннель «засыпает».

Решение — включить постоянный keepalive в конфигурации клиента (и, возможно, сервера). В файле конфигурации у пира нужно указать:

[Peer]
PersistentKeepalive = 25

Значение 25 секунд — хороший баланс для большинства домашних и мобильных сетей. Если вы находитесь за строгим NAT или используете мобильный интернет, попробуйте уменьшить до 15 секунд. После изменения перезапустите конфигурацию.

Проверьте для своей версии: в некоторых ранних версиях WireGuard PersistentKeepalive поддерживался только в конфигурации клиента, на сервере его можно не задавать.

2. Проверьте интерфейс, рукопожатие и маршруты

Если keepalive уже настроен, но обрывы продолжаются, нужно убедиться, что интерфейс жив. Выполните на клиенте и сервере:

sudo wg show

Обратите внимание на поле latest handshake (последнее рукопожатие). Если оно постоянно увеличивается — туннель работает. Если рукопожатие «застыло», значит, соединение потеряно.

Также проверьте, не исчезли ли маршруты. Если вы используете полный туннель, маршрут по умолчанию должен указывать на интерфейс WireGuard:

ip route show default

В выводе должен быть dev wg0. Если маршрут пропал, причина может быть в перезапуске сетевого менеджера или dhclient. В таких случаях помогут настройки AllowedIPs = 0.0.0.0/0 в конфигурации пира (клиента) и явное указание таблицы маршрутизации в wg-quick.

Иногда обрывает маршрут при смене сети (например, переключении с Wi-Fi на мобильный интернет). Это нормально, но правильная конфигурация должна автоматически пересоздавать маршруты.

3. Файрволы и DPI-фильтры

Следующая по частоте причина — блокировка на сетевом уровне. Антивирус, межсетевой экран или DPI (глубокий анализ пакетов) может прерывать UDP-соединение. WireGuard по умолчанию использует порт 51820/udp — этот порт легко вычислить и заблокировать.

Что делать:

  • Попробуйте сменить порт на нестандартный, например, 443 или 53 (UDP). Однако учтите, что некоторые провайдеры блокируют и их для VPN-трафика.
  • Проверьте, не блокирует ли ваш собственный файрвол. На сервере и клиенте убедитесь, что правило разрешает исходящий и входящий трафик на выбранном UDP-порту.
  • Если используете антивирус с функцией VPN-детекта, добавьте свой трафик в исключения.

Обратите внимание: при смене порта нужно заново открыть его в файрволе и не забыть про NAT на роутере. Проверьте для своего региона — в некоторых странах стандартные VPN-порты блокируются на государственном уровне, но мы не можем давать рекомендации по обходу.

4. Энергосбережение и сон системы

На ноутбуках и особенно на мобильных устройствах операционная система или приложение может «усыпить» сетевой интерфейс, чтобы экономить батарею. Соединение WireGuard при этом рвётся. Симптомы: туннель отключается сразу после того, как экран погас или через время простоя.

Исправление:

  • В Windows: «Диспетчер устройств» → сетевой адаптер → «Свойства» → «Управление питанием» → снимите галочку «Разрешить отключение этого устройства для экономии энергии».
  • В Linux: проверьте настройки NetworkManager и команду power save для беспроводного адаптера. Отключите агрессивную экономию через iw dev wlan0 set power_save off.
  • В Android и iOS: в настройках приложения WireGuard разрешите «Фоновую активность» и отключите оптимизацию батареи для этого приложения.

Также полезно настроить keepalive (см. п.1), чтобы система быстрее замечала разрыв и восстанавливала соединение.

5. Проверка логов и времени

Если ничего выше не помогло, переходим к логированию. На сервере обычно используется systemd:

journalctl -u wg-quick@wg0

ищите строки об ошибках handshake, перезапуске интерфейса или сбоях сокета. На клиенте смотрите системный журнал (например, dmesg или журнал приложения WireGuard).

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

6. MTU и фрагментация пакетов

Иногда туннель отключается только при работе с большими объёмами данных (например, при загрузке файлов). Это признак проблем с MTU. Стандартный MTU для Ethernet — 1500, но при добавлении WireGuard-заголовка пакет увеличивается. Если на пути встречается устройство с MTU меньше, происходит фрагментация, а некоторые провайдеры блокируют фрагментированные UDP-пакеты.

Решение — установить MTU ниже стандартного, например 1280 (гарантированный минимум для IPv6). В файле конфигурации интерфейса укажите:

[Interface]
MTU = 1280

Проверьте, стабильна ли работа после этого. Также можно проверить MTU командой ping -M do -s 1472 1.1.1.1, меняя размер пакета, чтобы найти максимальное значение.

Если ни одна из проверок не помогла, повторите диагностику сначала — возможно, вы пропустили тонкость. Запишите, когда именно отключается туннель (через 10 минут? при запуске приложения?), и используйте полученные данные для поиска в официальных рассылках WireGuard.

Важно: все команды и настройки даны для типовых конфигураций. Проверьте актуальный синтаксис для вашей версии WireGuard и операционной системы — они могут незначительно отличаться.

Мини-чеклист

  • Настроен ли PersistentKeepalive со значением 25 секунд (или меньше для строгого NAT)?
  • Выполнена ли команда `sudo wg show` — есть ли актуальное latest handshake?
  • Отключено ли энергосбережение для VPN-интерфейса на клиенте?
  • Проверены ли журналы wg-quick и systemd на наличие ошибок?

Частые ошибки

  • Ошибка: не указан или настроен слишком большой интервал PersistentKeepalive (например, 600 секунд), что не спасает от закрытия NAT.
  • Ошибка: при смене порта WireGuard забывают обновить правила файрвола или проброс порта на роутере.
  • Ошибка: на клиенте включено энергосбережение, из-за чего интерфейс «засыпает» через несколько минут бездействия.
  • Ошибка: не синхронизировано время на сервере и клиенте, из-за чего рукопожатие отклоняется.

Источники и документация

FAQ

Почему WireGuard отключается каждые несколько минут, хотя keepalive включён?

Если keepalive уже настроен, но обрывы происходят каждые пару минут, вероятно, проблема в маршрутизации или файрволе. Проверьте, не исчезает ли маршрут (ip route show default) и откройте нужный UDP-порт на клиенте и сервере. Также смотрите логи wg-quick — возможно, интерфейс перезапускается из-за ошибки.

Как определить, что туннель WireGuard отключился?

Самый простой способ — выполнить `sudo wg show` и посмотреть на время последнего рукопожатия. Если оно растёт на 5-10 секунд и не уменьшается, а пинг до сервера не проходит — туннель оборвался. В графических клиентах обычно есть индикатор статуса.

Влияет ли MTU на стабильность WireGuard?

Да. Если MTU установлен слишком большим (например, 1500), пакеты могут фрагментироваться, а некоторые сети блокируют фрагменты UDP. Рекомендуется MTU 1280 для гарантированной совместимости. Проверить можно командой ping с флагом -M do.

Нужен быстрый рабочий доступ?

Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.

Получить доступ

Дальше по теме

Связанные статьи