Ошибка WireGuard: Keypair mismatch – Peer public key does not match
- Интерфейс WireGuard успешно поднимается (
interface: wg0 UP), но сетевой трафик не передается. - Рукопожатие не выполняется, в выводе
wg showотсутствует строкаlatest handshake. - Приватный ключ на одной из сторон был перегенерирован, но публичный ключ не был обновлен на удаленном пире.
1. Проверка соответствия ключевой пары на клиенте
Вычислите открытый ключ непосредственно из текущего приватного ключа в конфигурационном файле клиента:
# Извлечение PrivateKey и генерация соответствующего PublicKey
CLI_PRIV=$(grep -i '^PrivateKey' /etc/wireguard/wg0.conf | awk '{print $3}')
echo "$CLI_PRIV" | wg pubkey2. Сверка с конфигурацией сервера
Откройте конфигурацию сервера /etc/wireguard/wg0.conf и найдите блок [Peer] этого клиента:
# Значение PublicKey на сервере ДОЛЖНО СТРОГО совпадать с выводом команды выше
[Peer]
PublicKey = <ВЫЧИСЛЕННЫЙ_PUBLIC_KEY_КЛИЕНТА>
AllowedIPs = 10.0.0.2/323. Проверка публичного ключа сервера на клиенте
Выполните аналогичную проверку на стороне сервера:
SRV_PRIV=$(grep -i '^PrivateKey' /etc/wireguard/wg0.conf | awk '{print $3}')
echo "$SRV_PRIV" | wg pubkeyУбедитесь, что в файле клиента в секции [Peer] параметр PublicKey равен вычисленному ключу сервера.
4. Применение обновленных ключей без разрыва интерфейса
# Синхронизация конфигурации на лету
wg syncconf wg0 <(wg-quick strip wg0) Частые вопросы (FAQ)
Как WireGuard реагирует на подключение с неверным ключом?
Сервер никак не отвечает и не логирует ошибки по умолчанию (для защиты от сканирования). Он просто игнорирует пакеты, не прошедшие проверку Noise IK рукопожатия.
Можно ли восстановить PrivateKey из PublicKey?
Нет, Curve25519 является односторонней криптографической функцией. Восстановить приватный ключ из публичного математически невозможно.
Нужно ли перезапускать весь сервер при добавлении нового пира?
Нет, достаточно выполнить wg set wg0 peer <PUBLIC_KEY> allowed-ips <IP/32> или использовать wg syncconf для применения файла без сброса существующих сессий.
Что произойдет, если два клиента используют одинаковый PrivateKey?
Они будут иметь одинаковый PublicKey, и сервер сможет маршрутизировать пакеты только на тот Endpoint, от которого пришел последний пакет, постоянно перехватывая сессию друг у друга.