NoctisNode
← ГайдыСети2026-10-238 мин

WireGuard PersistentKeepalive 25 и PresharedKey на VPS

PersistentKeepalive = 25 шлёт keepalive каждые 25 с, чтобы NAT держал туннель открытым; задавайте его на клиенте за NAT. PresharedKey добавляет симметричную постквантовую страховку.

Коротко: `PersistentKeepalive = 25` велит WireGuard каждые 25 секунд отправлять пиру крошечный аутентифицированный пакет, который поддерживает записи NAT и stateful-файрвола, чтобы другая сторона по-прежнему могла до вас достучаться. Обычно его задают только на пире за NAT (ноутбук, телефон или домашний роутер), а не на VPS с публичным IP. `PresharedKey` — необязательный дополнительный 256-битный симметричный секрет на пару пиров, генерируемый через `wg genpsk`; он подмешивается в рукопожатие как страховка от будущих квантовых атак на Curve25519.

В этом руководстве объясняются обе опции и приводятся рабочие конфиги сервера и клиента для WireGuard VPS. Полная настройка VPN с NAT и DNS — в руководстве по WireGuard VPN.

Что на самом деле делает PersistentKeepalive = 25

WireGuard по задумке молчалив: когда данных нет, он ничего не отправляет. Это хорошо для приватности и батареи, но роутеры с NAT и отслеживанием соединений удаляют простаивающие UDP-записи, часто через 30 секунд, иногда через несколько минут. Как только запись пропала, пакеты от сервера больше не доходят до клиента за NAT, пока клиент снова что-нибудь не отправит.

`PersistentKeepalive` — интервал в секундах. Со значением `25` пир отправляет пустой зашифрованный keepalive всякий раз, когда ничего не отправлял 25 секунд. Значение 25 рекомендовано в документации WireGuard, потому что оно надёжно меньше самых коротких распространённых UDP-таймаутов. По умолчанию опция выключена (`0`), а накладные расходы — один небольшой пакет примерно каждые 25 секунд на пира.

ЗначениеЭффектКогда использовать
0 или не заданоБез keepalive; в простое туннель молчитУ обоих пиров публичные IP, или клиент всегда сам инициирует трафик
25Keepalive каждые 25 с простояКлиент за NAT или CGNAT, который должен оставаться доступным
15–20Более частые keepaliveСети с необычно агрессивными UDP-таймаутами
60+Меньше пакетов, выше риск потери записи NATРедко полезно; большинство NAT-устройств сбрасывают раньше

На какой стороне нужен PersistentKeepalive

Задавайте keepalive на пире, до которого нельзя достучаться напрямую, — на том, что за NAT. Этот пир отправляет пакеты наружу, обновляя собственную запись NAT. У VPS с публичным IPv4 перед ним нет NAT, поэтому опция не нужна ему для доступности, и сам он не может держать открытым удалённый NAT, ведь адрес клиента он узнаёт только из пакетов клиента.

Если клиент лишь ходит в интернет через туннель, он мгновенно переподключается, как только отправляет трафик, так что keepalive необязателен. Он нужен, когда сервер или другие пиры должны сами инициировать соединения к клиенту: например, SSH на домашнюю машину, мониторинг или site-to-site связь.

  • ▹Ноутбук или телефон за NAT к VPS: задайте `PersistentKeepalive = 25` только на клиенте.
  • ▹VPS к VPS, у обоих публичные IP: обычно не задавайте; см. [руководство по mesh-сети WireGuard](/guides/wireguard-mesh-vps-cluster).
  • ▹Домашний сервер за CGNAT, опубликованный через VPS: задайте на домашнем сервере, иначе VPS потеряет маршрут через несколько минут.
  • ▹Мобильные клиенты: keepalive тратит немного батареи; включайте, только если устройство должно быть доступно.

PresharedKey: необязательный симметричный слой

Рукопожатие WireGuard использует обмен ключами Curve25519. Достаточно мощный квантовый компьютер теоретически мог бы взломать этот обмен, а противник — записывать трафик сегодня и расшифровать его позже. `PresharedKey` подмешивает в рукопожатие дополнительный 256-битный симметричный ключ. Симметричные ключи такого размера не считаются практически взламываемыми известными квантовыми алгоритмами, так что, пока PSK остаётся секретным, записанный трафик защищён даже при взломе части с открытыми ключами.

PSK задаётся на пару пиров, должен быть одинаковым в секциях `[Peer]` обоих пиров и уникальным для каждой пары. Он не заменяет приватные ключи, а добавляет ещё один слой. Если PSK не совпадают, рукопожатие молча не проходит, и в `wg show` нет `latest handshake`.

  • ▹Генерируйте его через `wg genpsk` — команда выводит случайный 32-байтный ключ в base64.
  • ▹Передавайте его по каналу, которому уже доверяете, например по SSH, — никогда через чат или email.
  • ▹Один PSK на пару: в mesh-сети из пяти узлов это десять разных PSK.
  • ▹Меняйте его, как любой другой секрет, когда устройство потеряно или выведено из эксплуатации.

Генерация ключей и PresharedKey

Установите инструменты в Debian 12/13 или Ubuntu 24.04 через `apt install wireguard`, затем генерируйте ключи на той машине, где будет жить каждый приватный ключ. PSK можно сгенерировать на любой стороне и скопировать на другую. `umask 077` гарантирует, что файлы будут доступны для чтения только root.

umask 077
cd /etc/wireguard

# on the VPS
wg genkey | tee server.key | wg pubkey > server.pub

# on the client
wg genkey | tee client.key | wg pubkey > client.pub

# once, on either side; copy to the other over SSH
wg genpsk > client.psk

Конфиг сервера на VPS: /etc/wireguard/wg0.conf

У сервера фиксированный порт прослушивания, нет keepalive и нет `Endpoint` для клиента, потому что текущий адрес клиента он узнаёт из аутентифицированных пакетов.

[Interface]
Address = 10.8.0.1/24, fd08::1/64
ListenPort = 51820
PrivateKey = <contents of server.key>

[Peer]
# laptop
PublicKey = <contents of client.pub>
PresharedKey = <contents of client.psk>
AllowedIPs = 10.8.0.2/32, fd08::2/128

Note · Откройте UDP 51820 в файрволе VPS и запустите туннель командой `systemctl enable --now wg-quick@wg0`. Прежде чем открывать что-то ещё, закройте SSH по руководству по защите SSH и проверьте права на ключи по руководству по StrictModes.

Конфиг клиента за NAT

Клиент указывает на публичный адрес VPS и содержит keepalive. Используйте `AllowedIPs = 10.8.0.0/24, fd08::/64` только для приватного туннеля или `0.0.0.0/0, ::/0`, чтобы весь трафик шёл через VPS.

[Interface]
Address = 10.8.0.2/32, fd08::2/128
PrivateKey = <contents of client.key>

[Peer]
PublicKey = <contents of server.pub>
PresharedKey = <contents of client.psk>
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.8.0.0/24, fd08::/64
PersistentKeepalive = 25

Note · Для личной точки WireGuard достаточно VPS Wisp NoctisNode (1 vCPU, 1 GB RAM, $6 за 28-дневный цикл) с выделенным IPv4; оплатить его можно в Monero или другой крипте, а для регистрации нужны только email и пароль.

Проверка и устранение неполадок

Выполните `wg show` на обеих сторонах. У исправного клиента для пира видны свежий `latest handshake`, `persistent keepalive: every 25 seconds` и `preshared key: (hidden)`.

  1. 01.Рукопожатия нет вообще: проверьте, что UDP 51820 открыт на VPS, а в `Endpoint` указаны правильные IP и порт.
  2. 02.Рукопожатие проходит без PSK, но не с ним: PresharedKey в двух конфигах различается; скопируйте его заново.
  3. 03.Туннель работает, но через минуту сервер не может достучаться до клиента: добавьте `PersistentKeepalive = 25` на клиенте.
  4. 04.Изменить keepalive без перезапуска: `wg set wg0 peer <server-public-key> persistent-keepalive 25`.
  5. 05.Добавить PSK из файла на лету: `wg set wg0 peer <public-key> preshared-key /etc/wireguard/client.psk`.

FAQ

QЧто означает PersistentKeepalive 25 в WireGuard?

AПир отправляет зашифрованный keepalive-пакет после 25 секунд без другого трафика. Это держит открытыми записи NAT и файрвола, чтобы туннель оставался доступным с другой стороны.

QPersistentKeepalive задавать на сервере или на клиенте?

AНа пире за NAT — почти всегда это клиент. VPS с публичным IP он не нужен, и сам VPS не может держать открытой запись NAT клиента.

QОбязателен ли PresharedKey в WireGuard?

AНет, он необязателен. Он добавляет в рукопожатие симметричный секрет как страховку от будущих квантовых атак на Curve25519, поэтому это хороший выбор по умолчанию для долгоживущих туннелей.

QКак сгенерировать PresharedKey для WireGuard?

AВыполните `wg genpsk > peer.psk` и укажите одно и то же значение в строке `PresharedKey` секций `[Peer]` обоих пиров. Для каждой пары пиров используйте свой PSK.

QРасходует ли PersistentKeepalive много трафика?

AНет. Он отправляет один небольшой пакет примерно каждые 25 секунд простоя — для VPS это пренебрежимо мало, хотя на телефонах может немного сократить время работы от батареи.

WireGuard PersistentKeepalive 25 и PresharedKey на VPS · NoctisNode