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