Ошибка WireGuard: Packet dropped due to invalid AllowedIPs entry
- Рукопожатие проходит успешно (
latest handshakeобновляется), но пинг до удаленного хоста не проходит. - Сервер или клиент не отвечает на пакеты из разрешенной подсети.
- В отладочном логе ядра:
wireguard: wg0: Packet has disallowed src IP from peer N. - Пакеты отбрасываются ядром на уровне криптографического роутера (Cryptokey Routing Table).
1. Архитектура Cryptokey Routing (Криптографическая маршрутизация)
В WireGuard параметр AllowedIPs выполняет две критические функции одновременно:
- Для исходящего трафика: определяет, в какой туннель (к какому пиру) направить исходящий пакет в зависимости от IP назначения (Dst IP).
- Для входящего трафика (Крипто-файрвол): строго проверяет IP-адрес источника (Src IP) расшифрованного пакета. Если Src IP пакета не входит в список
AllowedIPsэтого пира — пакет немедленно уничтожается ядром.
2. Исправление AllowedIPs на стороне сервера
Сервер должен явно разрешать внутренний IP адрес клиента:
[Peer]
PublicKey = <client_public_key>
# Разрешить клиенту отправлять пакеты ТОЛЬКО со своего назначенного IP:
AllowedIPs = 10.0.0.2/32
# Если за клиентом находится целая локальная сеть (Site-to-Site VPN):
# AllowedIPs = 10.0.0.2/32, 192.168.50.0/243. Настройка AllowedIPs на стороне клиента
Определите, какой трафик должен направляться через VPN:
[Peer]
PublicKey = <server_public_key>
Endpoint = 203.0.113.1:51820
# Вариант 1: Маршрутизировать ВЕСЬ интернет-трафик через VPN:
AllowedIPs = 0.0.0.0/0, ::/0
# Вариант 2: Маршрутизировать ТОЛЬКО трафик к корпоративной подсети (Split-Tunneling):
AllowedIPs = 10.0.0.0/24, 172.16.0.0/164. Включение IP Forwarding на сервере
Если сервер выступает шлюзом для выхода в интернет, активируйте пересылку пакетов в ядре Linux:
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/99-wireguard.conf Частые вопросы (FAQ)
Могут ли два разных пира на одном сервере иметь одинаковый IP в AllowedIPs?
Нет. Таблица Cryptokey Routing требует однозначного соответствия: один IP/подсеть может быть привязана только к одному Public Key. При попытке назначить дубликат старая привязка будет перезаписана.
Почему при указании AllowedIPs = 0.0.0.0/0 пропадает интернет?
wg-quick создает маршрут по умолчанию через wg0. Если на сервере не настроен NAT (MASQUERADE в iptables) или отключен net.ipv4.ip_forward, пакеты не выйдут в интернет.
Как настроить правило NAT MASQUERADE для WireGuard сервера?
Добавьте в секцию [Interface] сервера: PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE.
Что означает маска /32 в AllowedIPs = 10.0.0.2/32?
Маска /32 указывает ядру на ровно один хост. Клиент сможет отправлять и принимать трафик исключительно со своего персонального адреса 10.0.0.2.