Кейс 01 / 17 · Пульт WireGuard для Windows · 2026

WgSwitch

Лёгкий пульт для личного VPN на WireGuard: одна кнопка включает туннель, а программа честно показывает, отвечает ли сервер — не «служба запущена», а пинг внутри туннеля. Несколько серверов одновременно, иконка в трее с цветом состояния, уведомления и автопереподключение, мастер, который сам делает ключи и конфиг, и зашифрованная резервная копия ключей. Без сторонних библиотек, лёгкая версия весит 0.6 МБ.

https://github.com/lolkekxa/WgSwitch

  • Время разработки: 2 дня
  • Строк кода: 4 000+
  • Тестов: 42
  • Lite-версия: 0.6 МБ

Задача

Официальный клиент WireGuard для Windows показывает «Active», даже когда сервер давно лёг; включение второго сервера по умолчанию выключает первый; новый туннель — это ручная генерация ключей и сборка конфига. А когда SSH и панели серверов закрыты за VPN, потерянные ключи означают поход в веб-консоль хостера.

Решение

WPF на .NET 8 без единого NuGet-пакета: окно, трей и анимации в стиле студии; туннелями управляет официальный wireguard.exe, службы Windows опрашиваются напрямую через Win32 API, статус — пинг внутри туннеля и handshake из wg.exe. Опрос адаптивный: в трее с выключенными туннелями — раз в 15 секунд и без запуска процессов. Ключи генерирует wg.exe, конфиги лежат в папке, доступной только администраторам, резервная копия шифруется AES-256-GCM с ключом из пароля через PBKDF2. 42 теста и сборка на GitHub Actions: установщик в тёмной теме на Inno Setup, portable и lite, контрольные суммы в релизе. К программе — гайд по серверу: файрвол, SSH и панели только через туннель, Docker в обход ufw.

Ключевое

0 NuGet-пакетов, lite — 0.6 МБ · Пинг внутри туннеля, а не «служба запущена» · Несколько серверов одновременно · Ключи — в зашифрованном .wgsb

Что сделано

  • Одна кнопка: тонкое кольцо и иконка в цвете состояния — выключено, подключение, подключено, нет ответа
  • Честный статус: пинг до сервера внутри туннеля, handshake и трафик из wg.exe
  • Несколько серверов: капсулы над кнопкой, у каждого своя подсеть, включать можно одновременно
  • Иконка в трее с цветом состояния и меню по серверам; окно открывается у часов и прячется в трей
  • Уведомления о потере связи и о её возвращении, автопереподключение после 2 минут тишины
  • Мастер первого запуска: ключи через wg.exe, конфиг в закрытой папке, готовый блок [Peer] для сервера
  • Переименование, удаление, режим «весь интернет через VPN» и автоподключение — у каждого сервера свои
  • Зашифрованная резервная копия серверов и ключей: AES-256-GCM и PBKDF2, восстановление прямо из мастера на новом компьютере
  • Автозапуск через планировщик с наивысшими правами — без окна UAC при входе
  • Адаптивный опрос: в простое раз в 15 секунд без запуска процессов, память отдаётся системе при закрытии окна
  • Установщик в тёмной теме: по галочке ставит официальный WireGuard; рядом portable и lite-версия
  • 42 теста и сборка на GitHub Actions: релиз из тега с описанием из CHANGELOG и SHA-256
  • Гайд по серверу: файрвол, SSH и панели только через туннель, Docker в обход ufw, разбор ошибок

Этапы

  1. Пульт (полдня) — Окно в стиле студии, служба туннеля через wireguard.exe, статус по SCM и пингу, трей с цветом состояния
  2. Серверы и мастер (полдня) — Ключи через wg.exe, конфиг в закрытой папке, несколько серверов с разными подсетями
  3. Надёжность (полдня) — Резервная копия под паролем, уведомления, автопереподключение, режим «весь интернет»
  4. Поставка (полдня) — Тесты, установщик в тёмной теме, релизы на GitHub Actions, гайд по серверу и разбор ошибок

Следующий проект: Northstar