8 апреля 2026 года вышел WireSock Secure Connect 3.4.4 - первый официальный релиз ветки 3.x.

Для нас это не просто очередное обновление, а переход на новую архитектурную базу. Она даёт более чёткое разделение компонентов, лучшую изоляцию и новые возможности, которых давно ждали и обычные пользователи, и администраторы.

При этом сам продукт стал заметно сложнее. Настроек стало больше, как и сценариев использования, и произошло это не столько от хорошей жизни, сколько под влиянием внешних обстоятельств, щедро подкреплённых финансированием и стахановскими темпами работы всем нам известных государственных органов. В этой статье я хочу немного выйти за рамки release notes и поговорить о вещах, которые не сразу бросаются в глаза, но лучше всего объясняют, зачем вообще понадобился WireSock Secure Connect 3.x.

Новая архитектура

Один из наиболее часто критикуемых недостатков официального клиента WireGuard считается сложность активации подключения для пользователей без повышенных привилегий. Причина довольно проста: в Windows операции, связанные с созданием и настройкой сетевых интерфейсов, завязаны на административные права или на делегированные полномочия по управлению сетевой конфигурацией, которые обычно связывают со встроенной группой Network Configuration Operators.

В WireSock эту проблему удавалось частично обойти за счёт так называемого «прозрачного» режима. В этом сценарии пакеты перехватываются сетевым драйвером, шифруются и расшифровываются с применением трансляции IP-адресов, и таким образом не требуется поднимать и настраивать отдельный виртуальный адаптер.

На практике это позволяло заметно упростить использование VPN в средах, где у пользователя нет локальных административных прав и где сам факт запроса повышенных привилегий уже становится проблемой.

Но решение всё равно оставалось частичным. В режиме виртуального адаптера WireSock, включая версию 2.x, как и официальный клиент WireGuard, упирался в ту же архитектурную особенность Windows: для такого сценария требовались повышенные привилегии.

В такой ситуации логичным шагом было разделить приложение на две части: привилегированную сервисную, выполняющую системные операции, и клиентскую, которая отвечает за её конфигурирование и управление туннелями.

На мой взгляд, такая схема заметно прибавила удобства. VPN теперь можно поднимать ещё до входа пользователя в систему, UI не обязательно постоянно держать запущенным, его можно не только свернуть в трей, но и вовсе закрыть, а запускать только при необходимости. Заодно появился CLI-инструмент, который умеет работать с фоновыми сервисами и открывает нормальные сценарии использования из командной строки.

Конечно, не обошлось без критики. Логика у пользователей была понятная: я закрыл VPN, а у него там какие-то сервисы продолжают жить своей жизнью. Отсюда же возникало и закономерное предложение добавить в UI кнопки запуска и остановки сервисов. Но это как раз и вернуло бы нас обратно в ту самую точку, из которой мы пытались уйти: пользовательский интерфейс снова пришлось бы завязывать на привилегированные операции и, по сути, опять запускать с правами администратора.

Да, такая модель может выглядеть непривычно. Но именно это разделение и даёт основные преимущества новой архитектуры. Оно убирает лишнюю зависимость пользовательских сценариев от повышенных привилегий и позволяет WireSock работать не как монолитное приложение с окном и сетевой логикой вперемешку, а как более зрелая система с отдельно живущими интерфейсом, сервисами и VPN-подключением. Именно в этом направлении мы и стараемся развивать WireSock, в первую очередь как зрелое корпоративное решение.

KillSwitch / Network Lock

Эту функцию у нас просили давно и довольно настойчиво. В каком-то виде она уже существовала и раньше, но только в режиме виртуального адаптера, где её реализация была близка к той, что используется в оригинальном клиенте WireGuard и опирается на таблицу маршрутизации. Такой подход нельзя назвать самым надёжным, а для прозрачного режима он и вовсе несостоятелен.

Надо отметить, запрос на такую функцию был местами вполне эмоциональным. Один пользователь из США в какой-то момент даже пообещал перестать пользоваться WireSock, если KillSwitch так и не появится. Учитывая, что речь шла о бесплатном продукте, давление было не самым «обязывающим», но почему-то запомнилось.

В WireSock Secure Connect 3.x KillSwitch реализован на уровне сетевого NDIS-фильтра, то есть речь идёт о более жёстком и более низкоуровневом механизме блокировки. Благодаря этому KillSwitch можно настроить так, чтобы он перекрывал весь трафик при потере VPN-соединения, падении background-сервиса или даже при переключении между профилями.

На первый взгляд функция выглядит довольно простой, но на практике это один из самых важных элементов для сценариев, где утечка трафика недопустима. Это может быть удалённая работа, доступ к внутренним корпоративным ресурсам, использование VPN в сетях с жёсткими ограничениями или просто ситуация, в которой пользователь не хочет, чтобы приложения даже на короткое время начали ходить в сеть в обход туннеля.

Отдельно стоит упомянуть одну не самую очевидную особенность, которая может проявиться при использовании «строгого» KillSwitch, то есть в режиме, когда блокировка не снимается автоматически при отключении туннеля. В такой конфигурации возможны сложности с переподключением, если серверный endpoint указан не IP-адресом, а доменным именем. Проблема здесь простая: при активной блокировке клиент может просто не суметь разрешить это имя через DNS и, соответственно, не сможет заново установить соединение.

Мы постарались максимально сгладить этот сценарий. В WireSock кешируются IP-адреса, а при переключении между профилями доменные имена по возможности разрешаются через уже существующий туннель. Но саму эту особенность всё равно стоит иметь в виду, особенно если используется строгая политика блокировки и конфигурации завязаны на DNS-имена.

Global Split Tunneling: одна настройка вместо зоопарка исключений

Это, опять же, одна из тех функций, о которых нас просили давно. До версии 3.x настройки split tunneling приходилось задавать отдельно для каждого профиля, и в какой-то момент это начинало превращаться в маленький, но очень утомительный источник хаоса.

На практике у многих пользователей набор исключений почти не менялся от профиля к профилю. Менялись серверы, страны, параметры подключения, но список приложений, адресов или маршрутов, которые нужно было пустить мимо туннеля или, наоборот, принудительно через него, часто оставался одним и тем же. В результате одни и те же настройки приходилось дублировать вручную, следить за тем, чтобы они не разъехались между профилями, и каждый раз помнить, где именно что ещё не поправлено.

Именно поэтому в версии 3.x split tunneling можно настроить глобально, один раз для всего приложения, а затем применять эти правила ко всем профилям сразу.

В сухом списке изменений это легко принять за мелкое удобство, хотя на деле смысл у этой функции куда более значительный: меньше дублирования, меньше расхождений между профилями и более предсказуемое поведение клиента.

Поддержка AmneziaWG 2.0

Это ещё одна функция, о которой нас просили давно, по хорошо нам всем известным причинам. Как я уже не раз отмечал в предыдущих публикациях, в WireSock Secure Connect в качестве основы используется реализация протокола WireGuard от Cloudflare, а именно BoringTun. Стоит отметить, что по производительности она заметно выигрывает у форков wireguard-go, на одном из которых, собственно, и построен оригинальный клиент Amnezia для Windows.

Обработку диапазонов пакетных тегов H1–H4 мы добавили непосредственно в наш форк BoringTun. Параметры S1–S4 при этом обрабатываются уже в коде самого WireSock. Дальше мы хотим развивать эту механику в сторону более правдоподобной маскировки и со временем заменить случайно сгенерированные вставки на имитацию реальных сетевых протоколов.

Стоит, однако, упомянуть и о некоторых отличиях. Честно говоря, параметры I1–I5 всегда казались мне переусложнёнными для обычного пользователя. Идея собрать бинарный дамп пакета в Wireshark и потом вручную вставить его в конфиг выглядит занятно, но это скорее инженерное упражнение, чем настройка, которую можно назвать по-настоящему дружелюбной.

Поэтому в WireSock мы выбрали другой подход и добавили собственные параметры для генерации имитационных пакетов. Вместо набора I1–I5 используются Id, Ip и Ib: домен, протокол и браузерный профиль. В настоящее время поддерживаются профили маскировки под QUIC и DNS, а в дальнейшем этот список мы планируем расширять. На практике такая схема оказывается понятнее и полезнее, потому что позволяет работать не с абстрактными числами, а с более осмысленной моделью настройки

CLI: два разных инструмента

Отдельно стоит упомянуть об изменениях, связанных с инструментами командной строки. Минималистичный консольный клиент, существовавший с самой первой версии, был вынесен в отдельный инсталлятор SDK, а вместе с новой архитектурой появился ещё один CLI для управления background-сервисами.

Формат отдельного SDK лучше отражает реальную роль этого клиента. Начиная со второй версии он был нужен не столько как альтернатива основному UI, сколько как backend для таких инструментов, как TunnlTo или SplitWire-Turkey, а также как основа для минималистичных deployment-сценариев и интеграции в сторонние решения.

Запрос на такой минималистичный клиент был вполне ощутимым. В какой-то момент даже Microsoft приходил к нам со статистикой по его крэшам, где счёт шёл на десятки миллионов событий. Звучало это, конечно, тревожно, но сам баг оказался довольно безобидным: после завершения работы клиент пытался записать сообщение в лог. Исправить это было несложно, и история получилась скорее забавная, но она хорошо показывает, что этим инструментом действительно пользовались много и в самых разных сценариях.

Новый CLI, появившийся в версии 3.x, решает уже другую задачу. Если минималистичный консольный клиент был ориентирован прежде всего на headless-сценарии и интеграцию, то новый инструмент стал частью сервисной архитектуры WireSock Secure Connect и предназначен для управления background-сервисами из командной строки.

На практике это означает, что основные действия, связанные с подключением, отключением и управлением профилями, теперь можно выполнять без UI и без каких-либо обходных решений. Для автоматизации, скриптов и просто более минималистичных способов работы это оказалось вполне естественным развитием новой сервисной модели.

Где всё это брать

По понятным причинам для части пользователей вопрос «где скачать» в последние годы стал не менее практическим, чем вопрос «что нового».

Для установки через winget основной клиент публикуется как NTKERNEL.WireSockVPNClient, а минималистичный консольный клиент как NTKERNEL.WireSockVPNClientCLI. На сайте WireSock также отдельно доступны загрузки для Secure Connect и SDK.

При этом с самим сайтом тоже не всё идеально. wiresock.net, как нетрудно догадаться, у части провайдеров в России доступен нестабильно или не открывается вовсе. Поэтому последние версии мы стараемся дублировать и в официальной группе в Telegram. Правда, и с Telegram в наше непростое время ситуация тоже складывается неоднозначная. В итоге ирония момента в том, что для того, чтобы скачать VPN, иногда сначала нужен другой VPN.

Вместо заключения

Если попытаться свести всё сказанное к одной мысли, то WireSock Secure Connect 3.x стал сложнее не ради сложности, а потому что сам окружающий мир проще не стал. За сухими release notes в этом случае скрывается не просто список новых функций, а попытка сделать инструмент более устойчивым к тем сценариям, которые ещё несколько лет назад казались редкими или вовсе экзотическими.

Как всегда, будем рады отзывам, замечаниям и багрепортам. Всё это помогает двигать продукт в правильную сторону.

Всем добра.