WireGuard: генерация Private/Public Key для сервера и клиентов
Принцип криптографии WireGuard
В отличие от классических VPN-серверов с логинами и паролями, безопасность WireGuard базируется на современной криптографии Curve25519. Каждое устройство (и сервер, и каждый подключаемый телефон или ноутбук) обязано иметь собственную уникальную пару ключей: Приватный ключ (Private Key) и соответствующий ему Публичный ключ (Public Key).
Назначение и секретность ключей
| Тип ключа | Кому виден | Где прописывается |
|---|---|---|
| Private Key (Закрытый) | Строго секретен, знаете только вы | В блоке [Interface] на самом устройстве |
| Public Key (Открытый) | Передается открыто по любым каналам | В блоке [Peer] на противоположной стороне соединения |
| PresharedKey (Опционально) | Секретен для двоих | Дополнительный симметричный ключ постквантовой защиты |
Способ 1. Генерация ключей в консоли Linux (Терминал)
- Генерация связки ключей сервера:
Выполните команду генерации приватного ключа и мгновенного вычисления публичного ключа из него:
wg genkey | tee server_private.key | wg pubkey > server_public.key - Генерация ключей для клиента (например, смартфона):
wg genkey | tee client_private.key | wg pubkey > client_public.key - Просмотр полученных ключей:
cat server_private.key cat server_public.key
Способ 2. Автоматическая генерация в клиенте Windows / Android
В официальном приложении WireGuard для Windows/macOS/смартфонов ключи генерируются автоматически в один клик:
- Откройте WireGuard, нажмите «Добавить туннель» > «Добавить пустой туннель».
- Программа автоматически сгенерирует строку
PrivateKey = ...и вверху покажет соответствующийPublicKey = .... - Скопируйте сгенерированный Public Key и вставьте его в настройки пира на сервере.
Схема сборки конфигурационных файлов
# Конфигурация СЕРВЕРА (/etc/wireguard/wg0.conf):
[Interface]
Address = 10.0.0.1/24
PrivateKey = <ВСТАВИТЬ_SERVER_PRIVATE_KEY>
ListenPort = 51820
[Peer]
PublicKey = <ВСТАВИТЬ_CLIENT_PUBLIC_KEY>
AllowedIPs = 10.0.0.2/32
# Конфигурация КЛИЕНТА (client.conf):
[Interface]
Address = 10.0.0.2/24
PrivateKey = <ВСТАВИТЬ_CLIENT_PRIVATE_KEY>
DNS = 1.1.1.1
[Peer]
PublicKey = <ВСТАВИТЬ_SERVER_PUBLIC_KEY>
Endpoint = IP_СЕРВЕРА:51820
AllowedIPs = 0.0.0.0/0 Частые вопросы (FAQ)
Можно ли вычислить Private Key из Public Key?
Нет. Математика эллиптических кривых Curve25519 делает обратное вычисление приватного ключа невозможным современными суперкомпьютерами.
Что будет, если скопировать один и тот же Private Key на два телефона?
Они будут конфликтовать за сессию на сервере. Трафик будет хаотично переключаться между ними, вызывая постоянные обрывы связи у обоих устройств.
Как сгенерировать QR-код для быстрого подключения смартфона?
Установите утилиту qrencode на сервере: sudo apt install qrencode -y и выполните qrencode -t ansiutf8 < client.conf.
Как создать дополнительный ключ PresharedKey?
Выполните команду: wg genpsk > preshared.key и добавьте строку PresharedKey = ... в блок [Peer] на клиенте и сервере.