Эти скрипты генерируют серверные и клиентские файлы конфигурации, а также HTML файлы с QR кодом для настройки мобильных клиентов.

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

Как пользоваться

  • Скачиваем любым удобным способом отсюда

  • Устанавливаем питоновские pyyaml и qrcode

  • Переходим в каталог wgman

  • Создаём подкаталог с именем сервера и копируем туда файл config.yaml.sample:

$ mkdir sample-server
$ cp config.yaml.sample sample-server/config.yaml
  • Редактируем файл конфигурации. Он достаточно простой:

subnet: 10.10.0.0
subnet_bits: 24
server_private_address: 10.10.0.1
client_address_start: 2

server_public_address: 1.2.3.4
server_port: 443

use_preshared_key: true

default_route: true
dns: 1.1.1.1

Минимально необходимые настройки - это server_public_address и server_port. Все остальные настройки, как то: default_route, dns, use_preshared_key - они глобальные, для всех клиентов. Это недостаток, но при необходимости можно либо поправить файл конфигурации перед созданием нового клиента, либо исправить сгенерированную конфигурацию. Правда, QR код просто так уже не исправить.

Итак, серверный каталог создан, config.yaml готов, - пора создать серверную конфигурацию:

$ ./create-server sample-server

Вот что имеем в результате:

$ ls sample-server/
config.yaml  private-key  public-key  wg0.conf

Файл wg0.conf - это конфигурация для сервера. Кидаем её в /etc/wireguard, лучше ссылкой, а потом, если вы невольный любитель systemd, как я, то:

$ systemctl enable wg-quick@wg0

Стартовать серверный интерфейс пока необязательно, всё равно конфигурация полупустая:

$ less sample-server/wg0.conf
[Interface]
PrivateKey = AAbwXXEFu/Hy1zncqri+dsTmZEdEpr5SwWlF0bdsdks=  # server private key
ListenPort = 443
Address = 10.10.0.1

Нам надо создать клиентов. Парочку, для примера:

$ ./create-client sample-server client-one
$ ./create-client sample-server client-two

Теперь имеем:

$ ls sample-server/
client-one.conf           client-two.conf           config.yaml
client-one.html           client-two.html           ipaddr-map
client-one.preshared-key  client-two.preshared-key  private-key
client-one.private-key    client-two.private-key    public-key
client-one.public-key     client-two.public-key     wg0.conf

Серверная конфигурация теперь выглядит так:

[Interface]
PrivateKey = AAbwXXEFu/Hy1zncqri+dsTmZEdEpr5SwWlF0bdsdks=  # server private key
ListenPort = 443
Address = 10.10.0.1

[Peer]
PublicKey = KcNIa1/Tbv43nWZ+GEXfmr+cNL951yoduX7ucwtB4FM=  # client-two public key
AllowedIPs = 10.10.0.3/32  # client-two IP address
PresharedKey = f734D81tizY35ypm1urnUFlKhxMAKp1cCpanWfuuhSA=

[Peer]
PublicKey = yRrVT/Hgo4uOFejvSATHKRzAcAmpWKO0zw25j/lLDBA=  # client-one public key
AllowedIPs = 10.10.0.2/32  # client-one IP address
PresharedKey = pzEP1x4b3g50AqzFiI9nsLAu+zUjjg+KcqjJuOO/jLU=

Пример сгенерированной клиентской конфигурации:

[Interface]
PrivateKey = oJs9Df5oWhqMiKOv/77SUTh6n16F5i2BqJW4bQ5/ZE8=  # client private key
Address = 10.10.0.2/32
DNS = 1.1.1.1

[Peer]
Endpoint = 1.2.3.4:443
PublicKey = C/hqK9Bza7m13KSgpqykb2/IsXaw+W2I0ii5/9xOZXE=  # server public key
PersistentKeepalive = 15  # we need this if we're behind a firewall
AllowedIPs = 0.0.0.0/0  # default route
PresharedKey = pzEP1x4b3g50AqzFiI9nsLAu+zUjjg+KcqjJuOO/jLU=

Собственно, всё. Не забываем рестартовать серверный интерфейс после добавления новых клиентов. Можно, конечно, и без рестарта:

$ wg syncconf wg0 <(wg-quick strip wg0)

но тогда маршруты придётся добавлять вручную.

Комментарии (4)


  1. ky0
    03.09.2023 17:25
    +2

    где-то видел нечто для организации защищённой локалки на wireguard, но ссылку тогда не сохранил, а теперь никак не могу найти

    Оно?
    https://github.com/tonarino/innernet


    1. amateur80lvl Автор
      03.09.2023 17:25

      Точно! Спасибо!


  1. mxr
    03.09.2023 17:25
    +1

    Аналогичный функционал через cli (в т.ч. qr code) имеет pivpn. Сам пользуюсь, очень удобные скрипты.


  1. Razoon
    03.09.2023 17:25

    Весьма актуально, особенно на фоне того, что Роскомнадзор научился банить вообще весь wireguard