Эти скрипты генерируют серверные и клиентские файлы конфигурации, а также 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)но тогда маршруты придётся добавлять вручную.
