Product SiteDocumentation Site

12.3. WireGuard VPN

Для настройки соединения воспользуемся VPN‑протоколом WireGuard. В качестве транспортного протокола WireGuard использует UDP. Особенностью протокола является схема асимметричного шифрования. Классическая схема с закрытым и открытым ключом, которые генерируются и передаются администратором сети, позволяет безопасно передавать сообщения. Сами ключи можно дополнительно защищать паролями.

12.3.1. Подготовка ключей шифрования

В качестве приватного ключа WireGuard может выступать любая последовательность из 32 байт. Вернее, 31 байта — 32‑ой байт используется в качестве контрольной суммы над остальными. Публичный ключ генерируется на основе приватного для создания асимметрично шифрующей пары.

Предупреждение

Генерация ключей (особенно приватного ключа) должна быть абсолютно конфиденциальной для всех сторонних наблюдателей и строго невоспроизводимой. Для генерации ключей на основе случайных чисел используются специальные команды wg genkey для приватного ключа и wg pubkey для открытого ключа.
Никогда не генерируйте ключи с помощью псевдослучайных последовательностей или на основе каких‑то заведомо известных данных.

Предупреждение

Строго в рамках лабораторной работы для образовательных целей можно воспользоваться заранее сгенерированными парами ключей:
Для @client:
  • ПриватныйClientPrivateKeyNeverDoThisMethodIRL1234564=
  • ПубличныйR2Dq51uWpvn/9wo6IweimQrMAcailb6ZMiJmqFepJmU=
Для @company:
  • ПриватныйCompanyPrivateKeyNeverDoThisMethodIRL123454=
  • ПубличныйfAS3DCTBIIQ3miLTLjuryy0YmZr9HiHTh2sZf9inSi4=
Однако правильнее (и рекомендуется) сгенерировать на каждой машине свою пару ключей и далее пользоваться ими. При этом потребуется копирование из консоли одной ВМ в другую, что может быть невозможно при использовании VirtualBox‑консолей управления. При невозможности копирования можно вводить ключи вручную или с помощью последовательных портов передать ключи между виртуальными машинами.
Настройка последовательных портов осуществляется на выключенных виртуальных машинах. При этом все настройки сети, описанные не с помощью systemd‑networkd, при перезапуске необходимо будет выполнить повторно.
Для генерации ключей можно воспользоваться удобной командой‑конвейером, которая выводит приватный и публичный ключи в консоль:
wg genkey | tee /dev/stderr | wg pubkey
Не пользуйтесь данной командой в данном виде при реальной настройке. Перенаправляйте выводы команд в файлы с ограниченными правами доступа к ним для безопасности хранения данных.
  1. С помощью команды генерации ключей (или путём копирования заранее заданных пар) получите пары открытых и закрытых ключей на @client и @company.
    [root@client ~]# wg genkey | tee /dev/stderr | wg pubkey
    YHbaodB1g6Uh4rXa/Y17gf4t3pjVt68dABYDq79+tVE=
    HjxgpnWK367aURR7x6sy9b8wM3UhDJCbs/5XWGWe6CU=
    [root@client ~]#
    
    [root@company ~]# wg genkey | tee /dev/stderr | wg pubkey
    OFcPIl8PXbjoPozp9qBH2ZQPOUsr7Qj1ZlyZXeMnMlI=
    V87kz+xm9c1liF0WQpBW33Dep2W8B++xby80SrBJ2Cc=
    [root@company ~]#