Диагностика и исправление Ошибки Обновлено 12 linux, windows, android, ios, macos

WireGuard подключается, но не пингуется: маршруты, firewall и peer

Handshake есть, а пинг не проходит? Причина — не в шифровании, а в маршрутизации и firewall. Разбираем, как исправить.

wireguardtroubleshootingмаршрутизацияfirewallping
Содержание
КороткоЕсли WireGuard установил соединение (handshake), но ICMP-пакеты не проходят, проверьте: 1) AllowedIPs на обоих пирах, 2) обратные маршруты, 3) правила firewall (включая FORWARD), 4) NAT на сервере, 5) разрешение ICMP.

Представьте: вы настроили WireGuard, видите, что handshake состоялся, но при попытке пропинговать удалённый узел — тишина. Это одна из самых частых проблем, с которой сталкиваются пользователи. Хорошая новость: в большинстве случаев решение лежит на поверхности и не требует глубоких знаний сетевых технологий. Плохая новость: без понимания основ маршрутизации и работы firewall вы будете долго блуждать в потёмках.

В этой статье мы разберём, почему WireGuard может подключаться, но не пропускать ICMP-пакеты (и не только их). Вы узнаете, как проверить маршруты, настроить firewall и правильно указать AllowedIPs. Мы рассмотрим типичные сценарии, дадим пошаговые инструкции и предостережём от распространённых ошибок. К концу вы сможете самостоятельно диагностировать и устранять проблему «не пингуется» в своей конфигурации WireGuard.

Почему handshake есть, а ping не проходит?

WireGuard — это VPN-туннель, который работает на уровне 3 (IP). Handshake — это процесс установления криптографического соединения между пирами. Если handshake прошёл, значит, пиры видят друг друга и могут обмениваться зашифрованными пакетами. Однако сам по себе handshake не гарантирует, что IP-пакеты будут маршрутизироваться корректно. Пинг (ICMP Echo Request) — это обычный IP-пакет, и для его доставки нужна работающая маршрутизация и отсутствие блокировок на пути.

Чаще всего проблема кроется в одном из четырёх аспектов:

  • Неправильные AllowedIPs — определяют, какие подсети должны идти через туннель.
  • Отсутствие обратных маршрутов — когда ответный пакет не знает, как вернуться.
  • Firewall блокирует ICMP — на одном из пиров или на промежуточном устройстве.
  • Неправильная настройка NAT — если сервер должен транслировать адреса.

Рассмотрим каждый пункт подробнее.

Пошаговая диагностика

Шаг 1. Проверьте статус WireGuard

Убедитесь, что туннель активен и handshake состоялся. На Linux используйте:

sudo wg show

Вы должны увидеть строку latest handshake с недавним временем. Если handshake отсутствует, значит, проблема не в маршрутизации, а в соединении (см. другие статьи). Если handshake есть, переходите к следующему шагу.

Шаг 2. Проверьте AllowedIPs

AllowedIPs — это список подсетей, которые должны быть доступны через туннель. Если вы хотите пинговать удалённый узел, его IP-адрес должен входить в AllowedIPs на вашей стороне. Например, если у сервера адрес 10.0.0.1, а у клиента 10.0.0.2, и вы хотите пинговать сервер, то на клиенте в AllowedIPs должен быть указан 10.0.0.1/32 (или более широкая подсеть).

Но важнее обратное: на сервере в AllowedIPs для клиента должен быть указан адрес клиента (или подсеть). Если вы хотите, чтобы клиент мог пинговать машины за сервером (например, 192.168.1.0/24), то эта подсеть должна быть в AllowedIPs на клиенте. Подробнее о разборе конфигурации читайте в статье Разбор конфигурационного файла WireGuard.

Шаг 3. Проверьте маршруты

После установки туннеля WireGuard автоматически добавляет маршруты для подсетей из AllowedIPs. Проверьте таблицу маршрутизации:

ip route

На клиенте должен быть маршрут к 10.0.0.1/32 через интерфейс wg0 (или как у вас называется). Если маршрута нет, возможно, вы используете Policy Routing или что-то переопределяет маршруты. Также проверьте, что на сервере есть маршрут к клиенту.

Особое внимание уделите обратным маршрутам. Если клиент отправляет пакет на сервер, сервер должен знать, как отправить ответ. Если сервер не имеет маршрута к клиенту (например, к 10.0.0.2/32), ответ не уйдёт. Обычно маршрут создаётся автоматически, но если у вас сложная сеть, проверьте вручную.

Шаг 4. Проверьте firewall

Firewall может блокировать ICMP-пакеты. На Linux проверьте правила iptables/nftables:

sudo iptables -L -n -v

Убедитесь, что политика для INPUT и FORWARD разрешает ICMP. Если у вас есть правила, блокирующие входящие ICMP, добавьте исключения для интерфейса wg0:

sudo iptables -A INPUT -i wg0 -p icmp -j ACCEPT

Также проверьте FORWARD, если пакеты должны транзитом проходить через сервер.

Шаг 5. Проверьте NAT

Если вы используете WireGuard для доступа в интернет или в удалённую сеть, на сервере должен быть настроен NAT (маскарадинг). Без NAT пакеты из туннеля не смогут выйти в другие сети. Проверьте правила iptables:

sudo iptables -t nat -L -n -v

Должно быть правило MASQUERADE для интерфейса wg0 или для выходного интерфейса (например, eth0). Если его нет, добавьте:

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

Замените подсеть на вашу.

Шаг 6. Проверьте ICMP на клиенте

Иногда проблема в том, что клиент сам блокирует ICMP. На Windows проверьте, разрешён ли входящий ping в брандмауэре. На Android/iOS также могут быть ограничения.

Самостоятельная проверка результата

После внесения изменений перезапустите WireGuard и выполните пинг:

ping 10.0.0.1

Если пинг проходит, проблема решена. Если нет, продолжайте диагностику. Используйте tcpdump на сервере, чтобы увидеть, приходят ли ICMP-пакеты:

sudo tcpdump -i wg0 icmp

Если пакеты приходят, но ответ не уходит, значит, проблема в маршрутизации или firewall на сервере. Если пакеты не приходят, проблема на клиенте или в промежуточной сети.

Ограничения и безопасность

Не забывайте, что WireGuard — это VPN, и его настройка требует внимания к безопасности. Никогда не используйте сгенерированные онлайн-конфиги или чужие ключи — это может привести к компрометации вашего трафика. Подробнее об этом в статье Бесплатные конфиги и генераторы: риски.

Также помните, что ICMP может быть заблокирован провайдером или промежуточными устройствами. Если пинг не проходит, но другие сервисы (например, HTTP) работают, возможно, дело в фильтрации ICMP.

Для IPv6 убедитесь, что у вас настроены соответствующие маршруты и firewall (см. Работа с IPv6). Если вы используете CGNAT, могут быть сложности с пробросом портов — читайте CGNAT и DDNS.

В заключение: проблема «WireGuard не пингуется» почти всегда решается проверкой AllowedIPs, маршрутов и firewall. Надеемся, эта статья помогла вам.

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

  • Проверить, что handshake активен (wg show)
  • Убедиться, что AllowedIPs включают IP-адрес назначения на обоих пирах
  • Проверить таблицу маршрутов на обоих пирах (ip route)
  • Разрешить ICMP в firewall для интерфейса wg0
  • Настроить NAT (MASQUERADE) на сервере, если нужен доступ к другим сетям

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

  • AllowedIPs = 0.0.0.0/0 на клиенте без необходимости — это отправляет весь трафик через VPN, что может вызвать проблемы с маршрутизацией
  • Забыли указать обратный маршрут на сервере к подсети клиента
  • Firewall блокирует ICMP в цепочке FORWARD на сервере
  • Не настроен NAT, поэтому пакеты из туннеля не попадают во внешнюю сеть
  • Использование одинаковых IP-адресов в разных подсетях (конфликт адресов)

FAQ

Почему WireGuard показывает handshake, но пинг не проходит?

Handshake означает, что туннель установлен, но для прохождения ICMP необходима корректная маршрутизация и отсутствие блокировок в firewall. Проверьте AllowedIPs, маршруты и правила iptables.

Как проверить, что маршруты настроены правильно?

Используйте команду ip route (Linux) или route print (Windows). Убедитесь, что есть маршрут к удалённой подсети через интерфейс WireGuard.

Что делать, если пинг не проходит, но другие сервисы работают?

Возможно, ICMP заблокирован провайдером или firewall. Попробуйте пропинговать с другого устройства или используйте tcpdump для диагностики.

Нужно ли настраивать NAT на сервере WireGuard?

NAT требуется, если клиенты должны получать доступ к сетям за сервером (например, интернет). Без NAT пакеты не будут маршрутизироваться.

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

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

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

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

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