Создаем готовые клиентские конфигурации для WireGuard

  • Автор:

wireguard-user-configuration-000.pngWireGuard пользуется заслуженной популярностью как простой и быстрый, но при этом безопасный туннель. Но у простоты есть и обратные стороны, для настройки WireGuard требуется достаточно много ручной работы, передавать готовые настройки с сервера на клиент мы не можем. Однако никто не мешает нам подготовить клиентские конфигурации заранее и просто передать их клиентам для импорта, в том числе и на мобильные устройства. В данной статье мы как раз рассмотрим различные методы создания готовых клиентских конфигураций.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Классический метод генерации ключей для любого вида шифрования предусматривает создание клиентских ключей непосредственно на стороне клиента, это позволяет избежать передачи закрытого ключа, что благоприятно сказывается на безопасности. Но это требует непосредственного участия администратора в формировании ключей на устройствах клиентов, что не всегда удобно и возможно.

Альтернативной этому является создание готовых клиентских конфигураций с последующей передачей их клиенту, но при этом следует понимать, что вместе с конфигурацией мы передаем закрытый ключ и использовать для этого защищенные каналы связи.

Все шифрование в WireGuard строится на основании ключевой пары и не требует ни создания собственного СА, ни выпуска сертификатов, это позволяет сгенерировать ключевую пару в любом месте, указать ее в конфигурационных файлах и передать их клиенту.

В целях безопасности эту работу лучше всего производить на сервере с WireGuard, чтобы все ключи были в одном единственном месте. Все приведенные ниже команды следует выполнять с правами суперпользователя root или через sudo.

Прежде всего создадим директорию, в которой мы будем хранить клиентские конфигурации:

mkdir /etc/wireguard/clients

И сразу же перейдем в нее:

cd /etc/wireguard/clients

Затем изменим маску системы, что обеспечит нужные права для обеспечения безопасности, можно, конечно, обойтись и без этого, но лучше если только один суперпользователь будет иметь доступ к конфигурациям и ключам.

umask 077

Затем генерируем ключевые пары клиентов командами:

wg genkey > privatekey_ivanov
wg pubkey < privatekey_ivanov > publickey_ivanov

Не имеет никакого значения как вы назовете файлы ключей, но мы советуем давать им осмысленные названия, чтобы было понятно какому клиенту они принадлежат и какой именно ключ представляют.

Сразу же, не меняя маску, создадим конфигурационный файл клиента, для этого нам понадобиться его приватный ключ, прочитать его можно командой:

cat privatekey_ivanov 

Для создания конфига мы будем использовать редактор nano, если вам больше нравится редактор mc, то замените в команде nano на mcedit:

nano ivanov_wg.conf 

И внесем в него следующий текст:

[Interface]
Address = 10.10.8.101/24
Privatekey = <CLIENT_PRIVATE_KEY>

[Peer]
Publickey = <SERVER_PUBLIC_KEY>
Endpoint = 203.0.113.2:34567
AllowedIPs = 10.10.8.0/24, 192.168.111.0/24
PersistentKeepalive = 25

В секции [Interface] мы указываем желаемый адрес клиента в WireGuard сети и его приватный ключ. В секции [Peer] указываем публичный ключ сервера, его адрес и порт, и разрешенные сети, в нашем случае это сеть WireGuard 10.10.8.0/24 и находящаяся за сервером сеть условного офиса 192.168.111.0/24.

Публичный ключ сервера можно узнать короткой командой:

wg

Закончив формирование клиентских конфигураций, вернем маску к нормальному значению:

umask 022

Теперь добавим наших клиентов в конфигурацию сервера, для этого нам потребуется знать публичный ключ, его можно вывести командой:

cat publickey_ivanov

Затем откроем конфигурацию сервера, в нашем случае это /etc/wireguard/wg0.conf и для каждого клиента добавим секцию:

[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.10.8.101/32

Где указываем публичный ключ клиента и выделенный ему адрес. После чего перезапускаем WireGuard командой:

systemctl restart wg-quick@wg0

Готовые клиентские конфигурации теперь можно распространить по клиентским устройствам, где будет достаточно просто сделать импорт из подготовленного нами файла.

Но еще раз предупредим: файл конфигурации содержит закрытый ключ клиента и не должен передаваться ему по открытым каналам.

Отдельного разговора стоят мобильные клиенты, передать и импортировать файл на мобильное устройство может быть не так уж и просто, не говоря уже о ручной настройке клиента. Для этих целей WireGuard умеет использовать QR-код. Это самый быстрый и простой способ настройки мобильного устройства.

Для генерации QR-кодов прямо на сервере нам потребуется дополнительный пакет, установим его:

apt install qrencode

Если мобильное устройство находится прямо у вас в руках, то проще всего будет вывести QR-код для его настройки прямо в терминал, для этого перейдем в каталог с конфигурационными файлами:

cd /etc/wireguard/clients

И выполним команду:

qrencode -t ansiutf8 -r ivanov_wg.conf

После чего откройте WireGuard клиент на мобильном устройстве и считайте QR-код прямо с экрана.

wireguard-user-configuration-001.pngЕсли же требуется передать QR-код клиенту для самостоятельной настройки, то создадим файл изображения с кодом. Будем считать, что мы находимся в каталоге с конфигурационными файлами. Снова изменим маску:

umask 077

И выполним генерацию изображения:

qrencode -t png -o ivanov_wg.conf.png -r ivanov_wg.conf

После того как вы создали все необходимые изображения вернем маску к исходному значению:

umask 022

Как мы уже говорили выше, имена файлов могут быть любыми, главное - чтобы было понятно для какого клиента они предназначены. При этом продолжаем помнить о том, что QR-код также содержит закрытый ключ клиента и передавать его следует только по защищенным каналам связи.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments