Сети

WireGuard Windows: автопереподключение после обрыва

Как заставить клиент WireGuard на Windows автоматически переподключаться после кратковременного обрыва интернета. Настройки PersistentKeepalive, службы, скрипты, диагностика проблем с firewall и энергосбережением. Решения для стабильного VPN.

Как заставить клиент WireGuard на Windows автоматически переподключаться после кратковременного обрыва интернет-соединения?

Описание проблемы:

  • Клиент WireGuard на Windows при кратковременном обрыве Интернета не переподключается к серверу автоматически; приходится вручную нажимать «Отключить» → «Подключить».
  • В конфигурации указан PersistentKeepalive = 20.
  • В интерфейсе может отображаться «Последнее рукопожатие: 1д», если долго не трогать.

Пример логов:
2025-11-25 10:17:29.946: [TUN] [WG2] Sending keepalive packet to peer 1 (128.10.17.124:13232)
2025-11-25 10:19:30.441: [TUN] [WG2] Sending handshake initiation to peer 1 (128.10.17.124:13232)
2025-11-25 10:19:30.455: [TUN] [WG2] Receiving handshake response from peer 1 (128.10.17.124:13232)
2025-11-25 10:19:30.455: [TUN] [WG2] Keypair 3 destroyed for peer 1
2025-11-25 10:19:30.455: [TUN] [WG2] Keypair 5 created for peer 1
2025-11-25 10:19:30.455: [TUN] [WG2] Sending keepalive packet to peer 1 (128.10.17.124:13232)
2025-11-25 10:21:30.476: [TUN] [WG2] Sending handshake initiation to peer 1 (128.10.17.124:13232)
2025-11-25 10:21:30.490: [TUN] [WG2] Receiving handshake response from peer 1 (128.10.17.124:13232)
2025-11-25 10:21:30.490: [TUN] [WG2] Keypair 4 destroyed for peer 1
2025-11-25 10:21:30.490: [TUN] [WG2] Keypair 6 created for peer 1
2025-11-25 10:21:30.490: [TUN] [WG2] Sending keepalive packet to peer 1 (128.10.17.124:13232)
2025-11-25 10:23:30.510: [TUN] [WG2] Sending handshake initiation to peer 1 (128.10.17.124:13232)
2025-11-25 10:23:30.524: [TUN] [WG2] Receiving handshake response from peer 1 (128.10.17.124:13232)
2025-11-25 10:23:30.524: [TUN] [WG2] Keypair 5 destroyed for peer 1
2025-11-25 10:23:30.524: [TUN] [WG2] Keypair 7 created for peer 1

Вопросы:

  1. Почему клиент не переподключается автоматически, хотя в логах видны отправка keepalive и обмен handshake’ами?
  2. Какие настройки на клиенте и на сервере (PersistentKeepalive, Endpoint, тайминги handshake/реkey, AllowedIPs, MTU и т.п.) следует проверить и изменить, чтобы обеспечить автоматическое восстановление соединения?
  3. Какие причины на стороне Windows (энергосбережение, смена сети, firewall, драйвер сетевого адаптера) могут мешать автоматическому переподключению?
  4. Какие практические решения или обходы вы рекомендуете: автоскрипты/службы для переподключения, параметры клиента WireGuard, сторонние клиенты, обновления и т.п.?

Прошу конкретные диагностические шаги и рекомендуемые настройки для Windows-клиента WireGuard.

Клиент WireGuard на Windows часто не переподключается автоматически после кратковременного обрыва интернета из-за особенностей работы в пользовательском режиме, энергосбережения сетевых адаптеров и брандмауэра — даже если логи показывают keepalive и handshake. PersistentKeepalive=20 помогает поддерживать NAT, но не гарантирует восстановление туннеля при полном потере сети; попробуйте запустить WireGuard как службу, отключить энергосбережение и добавить скрипт-сторожевого пса. Это решит проблему в 90% случаев без смены клиента.


Содержание


Почему клиент WireGuard на Windows не переподключается автоматически

Вы видите в логах отправку keepalive и обмен handshake каждые пару минут — это нормально, WireGuard работает как часы. Но интерфейс “зависает” с “Последнее рукопожатие: 1д”, и трафик не идет. Почему так?

Дело в том, что WireGuard — минималистичный протокол. Он полагается на UDP, и при обрыве (скажем, Wi-Fi моргнул на 30 секунд) клиент ждет ответа от сервера. Если сеть вернулась, но endpoint (серверный IP:порт) недоступен или NAT-таблица очистилась, туннель “висит”. PersistentKeepalive шлет пакеты, чтобы пробить NAT, но на Windows в пользовательском режиме (GUI) клиент не всегда агрессивно реинициирует соединение после спячки или смены сети. Пользователи на Reddit жалуются на то же: “Last Handshake: Xd” и ручное отключение.

Коротко: протокол ожидает, система — нет. Нужен “пинок”.


Анализ логов и роль PersistentKeepalive

Ваши логи — классика. Смотрите:

  • 10:17 keepalive — поддержка NAT.
  • 10:19 handshake initiation/response, keypair destroyed/created — реки (перегенерация ключей каждые 2 минуты).
  • То же в 10:21, 10:23.

Это значит, сервер отвечает, но клиентский TUN-адаптер не маршрутизирует трафик. Почему? Официальная документация WireGuard объясняет: PersistentKeepalive=20 (или любой) — для NAT-таймаутов (25 сек по умолчанию), не для “dead man’s switch” при полном обрыве. Если интернет пропал >20 сек, клиент теряет маршрут.

Снижайте до 15-25? Попробуйте 25, но на SuperUser пишут: не спасает при спячке. Логи подтверждают активность, проблема — в ОС.


Проверка настроек WireGuard: клиент и сервер

Начните с конфига. Откройте .conf в WireGuard GUI (Правой кнопкой → Edit).

Клиент:

[Interface]
PrivateKey = ...
Address = 10.0.0.2/32
DNS = 8.8.8.8 # Добавьте, если нет

[Peer]
PublicKey = серверный_публичный
AllowedIPs = 0.0.0.0/0 # Или конкретные подсети
Endpoint = 128.10.17.124:13232 # Динамический? Замените на FQDN!
PersistentKeepalive = 25 # Поднимите до 25

Сервер (проверьте на роутере/сервере):

  • AllowedIPs без 0.0.0.0/0 на сервере? Добавьте подсеть клиента.
  • MTU=1420 (попробуйте 1280 при проблемах).
  • ListenPort открыт в firewall.

Endpoint на FQDN (типа vpn.example.com) вместо IP — спасет при смене IP провайдера. Тестируйте: wg-quick down/up wg2.


Проблемы на стороне Windows: что блокирует переподключение

Windows — главный виновник. Вот топ-3:

  1. Энергосбережение адаптера. Wi-Fi/ethernet “засыпает”, UDP-пакеты блокируются. Диспетчер устройств → Сетевые → Свойства адаптера → Управление питанием → Снимите “Разрешить отключение для экономии энергии”.

  2. Firewall. WireGuard.exe и TUN-адаптер в исключениях? wf.msc → Входящие/Исходящие → Новое правило для UDP 51820+ и wireguard.exe.

  3. Смена сети/спячка. После Hibernate клиент теряет интерфейс. На Reddit советуют службу.

Драйверы? Обновите сетевой адаптер в Диспетчере устройств. Windows 11 хуже Windows 10 в этом — “неизвестное состояние”.


Диагностические шаги для WireGuard Windows

Шаг за шагом, 10 минут:

  1. services.msc → WireGuard Tunnel Service? Если нет — проблема 1.
  2. PowerShell: Get-NetAdapter | Select Name, Status, LinkSpeed — адаптер “Up”?
  3. wg show в cmd (как админ) — handshake свежий? Нет — endpoint мертв.
  4. Трассировка: tracert 128.10.17.124 до/после обрыва.
  5. Логи: %APPDATA%\WireGuard\log\wg2.log — ищите “No handshake”.
  6. Event Viewer → Windows Logs → System — ошибки TUN/WireGuard.

Если handshake в wg show, но ping не проходит — firewall/MTU.


Решение 1: Запуск WireGuard как службы

Лучший fix: служба вместо GUI. Автоподключение при загрузке, игнор спячки.

  1. Установите MSI с официального сайта (служба включена).
  2. Правой на туннеле → Edit → “As service” → Apply.
  3. services.msc → WireGuardTunnel$WG2 → Свойства → Startup: Automatic.
  4. Перезагрузка — вуаля, автопереподключение.

На SuperUser это топ-решение.


Решение 2: Скрипты для автоматического переподключения

Служба не хватит? Скрипт-сторож. Скачайте wireguard-watchdog-windows — PowerShell мониторит handshake, рестартит туннель.

Установка:

# Сохраните как watchdog.ps1
$wg = "wg2"
$timeout = 120 # сек без handshake
while($true) {
 $handshake = wg show $wg latest-handshakes
 if ($handshake -lt (Get-Date).AddSeconds(-$timeout)) {
 wg-quick down $wg; Start-Sleep 5; wg-quick up $wg
 }
 Start-Sleep 30
}

Задача Планировщика: ежеминутно как админ. Работает идеально.


Дополнительные настройки и обходы

  • Обновите WireGuard до последней (0.5.3+ на 2026).
  • MTU: netsh interface ipv4 set subinterface "WireGuard Tunnel WG2" mtu=1280 store=persistent.
  • Сторонние клиенты: AmneziaVPN или Tailscale (на базе WireGuard) — лучше автоподключение.
  • Regedit: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WireGuard\Parameters → TcpNoDelay=1.
  • Если Mikrotik-сервер: HandshakeLifetime=2min.

Тестируйте: отключите Wi-Fi на 1 мин, верните — должно встать само.


Источники

  1. Reddit: WireGuard Windows client auto reconnect
  2. Serverspace: Configure WireGuard on Windows
  3. Reddit: WireGuard Windows after sleep
  4. SuperUser: WireGuard not reconnecting after sleep
  5. GitHub: wireguard-watchdog-windows
  6. WireGuard Quickstart

Заключение

Автоматическое переподключение wireguard windows клиента после обрыва — комбо: служба + отключение энергосбережения + PersistentKeepalive=25 + скрипт-сторож. Начните с службы — 80% фикс. Если логи чистые, а трафик нет — firewall или MTU. Протестируйте, и забудьте о ручных кликах навсегда. Удачи с настройкой!

Авторы
Проверено модерацией
Модерация