WireGuard не пингуется: диагностика маршрутов и AllowedIPs
Пошаговая диагностика, когда WireGuard-туннель поднят, но ping не проходит. Фокус на AllowedIPs, маршрутах, firewall и MTU.
Содержание
1. Почему WireGuard не отвечает на ping
WireGuard — это простой VPN, но даже при успешном рукопожатии пакеты могут не доходить. Основная причина — неверные AllowedIPs на одной из сторон или отсутствие маршрута к удалённой подсети. Диагностика должна идти от проверки состояния интерфейса до правил фильтрации.
2. Проверка состояния туннеля
Убедитесь, что интерфейс WireGuard активен и рукопожатие состоялось. Выполните wg show. В выводе должна быть строка latest handshake не слишком старая. Если рукопожатия нет — проблема в доступе к порту UDP, ключах или Endpoint.
3. AllowedIPs — ключевой подозреваемый
AllowedIPs определяет, какие адреса будут отправлены через туннель. Если на сервере в AllowedIPs указан только IP клиента, а клиент пингует серверный туннельный IP, то сервер не знает, куда отправить ответ. Проверьте обе стороны:
- На сервере:
wg set wg0 peer <pubkey> allowed-ips <IP клиента>/32 - На клиенте:
AllowedIPs = <IP сервера>/32или если нужно ходить в другие подсети — укажите их.
Типичная ошибка: на клиенте указывают AllowedIPs = 0.0.0.0/0, а на сервере забывают разрешить ответный трафик. Внимательно проверьте маски.
4. Маршруты в таблице
WireGuard автоматически добавляет маршруты на основе AllowedIPs, но если используется сложная маршрутизация (Policy-based routing), маршрут может отсутствовать. Проверьте ip route get <туннельный IP>. Если маршрут не указывает на dev wg0, добавьте его вручную: ip route add <IP>/32 dev wg0. Для постоянности настройте в конфигурации wireguard или через сетевой менеджер.
5. Firewall, форвардинг и sysctl
Даже если всё с маршрутами в порядке, пакеты может блокировать firewall. Проверьте:
sysctl net.ipv4.ip_forward— на сервере должно быть 1.- Правила iptables/nftables для интерфейса wg0 — разрешите вход и выход.
- Если есть политика по умолчанию DROP, проверьте цепочку FORWARD.
Пример правила для NAT (если клиенты выходят в интернет): iptables -t nat -A POSTROUTING -s <VPN_SUBNET> -o eth0 -j MASQUERADE — но это уже за рамками ping.
6. MTU и другие сетевые нюансы
Иногда пакеты ping не проходят из-за фрагментации. WireGuard по умолчанию использует MTU 1420, но если промежуточное звено имеет меньшее значение, пакеты теряются. Попробуйте уменьшить MTU до 1400 или найти подходящее значение. Также проверьте настройки ICMP — некоторые провайдеры блокируют ping.
7. Сводная диагностика
Итак, алгоритм:
- Проверка рукопожатия.
- Проверка AllowedIPs на обеих сторонах.
- Проверка таблицы маршрутов.
- Проверка firewall и форвардинга.
- Проверка MTU и внешних ограничений.
Следуя этой последовательности, вы быстро найдёте причину. Если ничего не помогло, посмотрите логи WireGuard и tcpdump на интерфейсе.
Мини-чеклист
- Проверьте, что handshake состоялся через wg show
- Сравните AllowedIPs на клиенте и сервере
- Выполните ip route get и убедитесь, что маршрут идёт через wg0
- Проверьте sysctl net.ipv4.ip_forward и firewall
Частые ошибки
- Указание AllowedIPs = 0.0.0.0/0 без необходимости
- Забыли включить ip_forward на сервере
- Слишком строгий firewall, блокирующий ICMP
- Несоответствие MTU
Источники и документация
FAQ
Почему ping до туннельного адреса идёт, а до внутренней сети нет?
Проверьте AllowedIPs на клиенте: укажите подсеть внутренней сети, например 192.168.1.0/24.
Что делать, если wg show показывает handshake, но ping не проходит?
Проверьте маршруты и firewall. Возможно, пакеты уходят не в туннель или блокируются правилами.
Как быстро проверить, что проблема в AllowedIPs?
Временно установите AllowedIPs = 0.0.0.0/0 на клиенте и проверьте связь. Если помогает — сузьте диапазон до нужного.
Нужен быстрый рабочий доступ?
Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.
Получить доступ