Webmin WireGuard: управление на WireGuard VPN през уеб интерфейс

Ако поддържате собствен 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/

Бърз старт

  1. Добавете нов интерфейс (или импортирайте съществуващ) и го стартирайте.
  2. Отворете UDP порта за слушане във firewall-а на сървъра.
  3. Отворете интерфейса и добавете нов пиър.
  4. От 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.

Коментари