Кейс 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, разбор ошибок
Этапы
- Пульт (полдня) — Окно в стиле студии, служба туннеля через wireguard.exe, статус по SCM и пингу, трей с цветом состояния
- Серверы и мастер (полдня) — Ключи через wg.exe, конфиг в закрытой папке, несколько серверов с разными подсетями
- Надёжность (полдня) — Резервная копия под паролем, уведомления, автопереподключение, режим «весь интернет»
- Поставка (полдня) — Тесты, установщик в тёмной теме, релизы на GitHub Actions, гайд по серверу и разбор ошибок
Следующий проект: Northstar