WireGuard подключен, но нет пинга и интернета: настройка AllowedIPs
Симптомы проблемы
Индикатор WireGuard показывает успешное подключение (зеленый статус, идет отправка байтов Transfer Sent), однако:
- Ни один внутренний сервер или роутер за VPN не пингуется.
- При включении туннеля на телефоне или ПК полностью пропадает интернет.
- Параметр Received (Получено байт) равен 0 или не увеличивается.
| Что показывает клиент | В чем реальная причина |
|---|---|
| Sent: 15 KB, Received: 0 B | Пакеты уходят с устройства, но сервер их не принимает (неверный Public Key или фаервол блокирует UDP-порт) |
| Sent: 15 KB, Received: 12 KB, но сайты не грузятся | Туннель работает, но на сервере выключена пересылка пакетов (IP Forwarding) или неверно указан AllowedIPs |
Пошаговый чек-лист исправления проблемы
Шаг 1. Проверяем директиву AllowedIPs на клиенте и сервере
Как работает AllowedIPs: Это встроенный белый список маршрутов. Если адрес не входит в AllowedIPs, драйвер WireGuard просто уничтожит пакет на выходе!
- На стороне клиента (клиентский файл): если вы хотите пустить весь интернет через VPN, должно быть строго:
AllowedIPs = 0.0.0.0/0, ::/0. Если только доступ к локалке:AllowedIPs = 10.0.0.0/24, 192.168.1.0/24. - На стороне сервера (wg0.conf): у каждого пира в AllowedIPs должен быть указан только его личный IP с маской /32:
AllowedIPs = 10.0.0.2/32. Ни в коем случае не ставьте на сервере 0.0.0.0/0 для клиента!
Шаг 2. Включаем пересылку трафика ядра Linux (IP Forwarding)
По умолчанию Linux запрещает пересылать транзитные пакеты между сетевыми интерфейсами. Включите маршрутизацию:
# Проверяем статус (если 0 — маршрутизация выключена):
sysctl net.ipv4.ip_forward
# Включаем на лету:
sudo sysctl -w net.ipv4.ip_forward=1
# Закрепляем навсегда в системе:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -pШаг 3. Настраиваем маскарадинг (NAT) в iptables на сервере
Сервер должен заменять внутренний IP-адрес VPN на свой публичный адрес при выходе в интернет. Добавьте правила в блок [Interface] файла /etc/wireguard/wg0.conf:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE(Внимание: замените eth0 на имя вашего реального сетевого интерфейса, которое можно узнать командой ip a).
Шаг 4. Проверяем открытость UDP-порта в фаерволе сервера
# Открываем порт WireGuard в фаерволе UFW:
sudo ufw allow 51820/udp
sudo ufw reload Частые вопросы (FAQ)
Почему WireGuard всегда показывает 'Подключено', даже если сервер выключен?
WireGuard работает по протоколу UDP и не имеет постоянной сессии рукопожатия (connectionless). Зеленая иконка в клиенте означает лишь то, что локальный сетевой драйвер активирован на вашем ПК.
Что делать, если пинги идут только по IP-адресам, а имена сайтов (ya.ru) не открываются?
Проблема в DNS-сервере. В конфигурации клиента в секции [Interface] явно укажите публичный надежный DNS: DNS = 1.1.1.1, 8.8.8.8.
Почему при включении WireGuard отключается локальный принтер?
Если на клиенте стоит AllowedIPs = 0.0.0.0/0, трафик до домашней подсети перенаправляется в туннель. В клиенте Windows/macOS поставьте галочку 'Block untunneled traffic' в положение ВЫКЛ или исключите локальную подсеть.
Как посмотреть статус подключенных клиентов в реальном времени?
Выполните на сервере команду: sudo wg show. Она покажет время последнего рукопожатия (latest handshake) и переданные мегабайты по каждому пиру.