Ако поддържате собствен VPN сървър с WireGuard, вероятно сте се уморили да редактирате /etc/wireguard/wg0.conf на ръка, да генерирате ключове с wg genkey и да търсите свободен IP адрес за всеки нов клиент. Ние се сблъскахме с това много пъти, затова създадохме Webmin WireGuard – модул за Webmin и Virtualmin, който управлява WireGuard през уеб интерфейс, без допълнителна база данни и без да променя начина, по който работи системата.
Проектът е с отворен код (BSD 3-Clause): github.com/heminei/webmin-wireguard
Каква е идеята
Решихме модулът да работи директно със стандартните файлове /etc/wireguard/<interface>.conf и да прилага промените с wg и wg-quick. Няма отделна база данни. Всичко, което направите от панела, можете да видите и промените и от командния ред, а всичко, което вече имате на сървъра, можете да импортирате.
Допълнителната информация за пиърите (име, бележки, настройки на клиента) съхраняваме като коментари в секцията [Peer], така че wg-quick ги игнорира:
[Peer]
# Name = alice
# PrivateKey = <client private key>
PublicKey = ...
AllowedIPs = 10.0.0.2/32
Какво предлагаме
Интерфейси
- създаване, редактиране, изтриване, старт, стоп, рестарт и reload;
- стартиране при boot (чрез
systemctl); - редактиране на суровия конфигурационен файл;
- импорт на съществуваща wg-quick конфигурация.
Пиъри (клиенти)
- добавяне на един или много наведнъж, редактиране, включване, изключване и изтриване;
- автоматично генериране на ключове, по избор preshared key, и следващия свободен IPv4 адрес;
- индивидуални настройки за всеки клиент: allowed IPs, DNS, endpoint, keepalive и MTU.
Клиентски конфигурации и QR код
За всеки пиър можете да покажете конфигурацията, да я копирате, да я свалите като .conf файл или да сканирате QR код с мобилното приложение на WireGuard. QR кодът се генерира в браузъра, така че не са нужни допълнителни пакети на сървъра.
Статус и статистика
- статус на живо: online/offline, последен handshake, endpoint и преносени байтове, опресняван на няколко секунди;
- графики за трафика на целия интерфейс или на отделен пиър за последния 1 час, 24 часа, 7 или 30 дни.
Карта на мрежата
Диаграма, която показва кой пиър през коя мрежа маршрутизира, включително мрежи зад даден пиър (site-to-site). Показва и предупреждения при застъпващи се адреси и маршрути.
Backup и restore
- сваляне на всички конфигурации като
.tar.gzи възстановяване от архив; - автоматични копия преди всяка промяна или изтриване, така че грешка в конфигурацията да не е фатална.
Към всяка опция сме добавили помощна страница, а интерфейсът е на английски и български.
Изисквания
- Linux с Webmin 2.x (тествано с Webmin 2.670 и Virtualmin на Debian 12, тема Authentic);
wireguard-tools(wgиwg-quick);tarза backup и restore.
Инсталация
Във Webmin отворете Webmin → Webmin Configuration → Webmin Modules → Install Module, изберете From ftp or http URL и въведете:
https://github.com/heminei/webmin-wireguard/releases/latest/download/wireguard.wbm.gz
Модулът се появява в Networking → WireGuard VPN. Отворете го веднъж след инсталацията, защото тогава се регистрира колекторът за статистика.
Може и ръчно: свалете пакета от страницата с издания, или копирайте репото в директорията на Webmin като wireguard:
rsync -av --exclude=.git ./ root@server:/usr/share/webmin/wireguard/
Бърз старт
- Добавете нов интерфейс (или импортирайте съществуващ) и го стартирайте.
- Отворете UDP порта за слушане във firewall-а на сървъра.
- Отворете интерфейса и добавете нов пиър.
- От Client config на пиъра копирайте конфигурацията, свалете я или сканирайте QR кода с приложението на WireGuard.
По подразбиране allowed IPs на клиента е подмрежата на интерфейса, т.е. през тунела минава само VPN трафикът. Ако искате целият трафик на клиента да минава през сървъра, задайте 0.0.0.0/0, ::/0.
Свързване на рутер или друг сървър (site-to-site)
Добавете мрежата зад пиъра към неговите Allowed IPs, например 10.0.0.4/32, 192.168.10.0/24, и към Client allowed IPs на клиентите, които имат нужда от нея. Картата на мрежата показва кой какво маршрутизира.
Сигурност
- Конфигурациите могат да съдържат
PreUp,PostUp,PreDownиPostDownкоманди, които се изпълняват като root. Импортирайте и възстановявайте само конфигурации, на които имате доверие. - Приватните ключове на клиентите пазим в коментарите на пиъра, за да може конфигурацията и QR кодът да се възстановят. Конфигурационните файлове и backup-ите са тайна – пазете ги подобаващо.
- Allowed IPs при клиента определят само какво клиентът изпраща през тунела. За ограничаване на достъпа използвайте firewall правила, например в
PostUpиPostDown.
Обратна връзка
Модулът е в ранен етап и ще се радваме на вашите предложения и сигнали за грешки. Отворете issue или pull request в GitHub. За уязвимости използвайте частен security advisory.
