Версия 0.6.0

Заменяет tpws на utunws (форк nfqws под utun+BPF из Flowseal/zapret-mac-discord-youtube)
на macOS: движок уровня пакетов вместо socks5-прокси даёт macOS те же 22 стратегии
Flowseal, что у Windows и Linux, включая fake-пакеты и десинк UDP/QUIC — раньше tpws
этого не умел вовсе. Обход теперь ставится как LaunchDaemon (resources/darwin-helper/),
пароль администратора спрашивается при каждом включении/выключении, тот же принцип, что
pkexec на Linux. Системный прокси и авто-список hostlist-auto больше не нужны и убраны.

README: Windows отмечена как гарантированно рабочая, macOS и Linux — как частично.
This commit is contained in:
2026-09-04 14:36:52 +03:00
parent 6c0509e090
commit ebb9191d6f
28 changed files with 984 additions and 687 deletions
+11 -17
View File
@@ -23,14 +23,16 @@ export interface ThemeState {
export type ZapretState = 'stopped' | 'starting' | 'running' | 'stopping' | 'error'
/**
* Чем именно обходим на этой платформе:
* • `tpws-socks` — macOS: локальный socks5-прокси, права не нужны;
* Чем именно обходим на этой платформе — на всех трёх один и тот же движок уровня пакетов
* (форки zapret/nfqws), запросы прав отличаются:
* • `utunws-pf` — macOS: LaunchDaemon (`utunws` через utun+BPF), пароль администратора
* на каждое включение/выключение (`osascript`);
* • `winws-service` — Windows: служба с драйвером WinDivert;
* • `nfqws-nftables` — Linux: демон nfqws + правила nftables (NFQUEUE), root через pkexec
* на каждое включение — ни службы, ни автозапуска здесь нет;
* на каждое включение;
* • `unsupported` — платформа без поддержки (не macOS/Windows/Linux).
*/
export type ZapretBackend = 'tpws-socks' | 'winws-service' | 'nfqws-nftables' | 'unsupported'
export type ZapretBackend = 'utunws-pf' | 'winws-service' | 'nfqws-nftables' | 'unsupported'
export interface ZapretStatus {
state: ZapretState
@@ -41,13 +43,9 @@ export interface ZapretStatus {
startedAt: string | null
/** Текст последней ошибки — показываем пользователю как есть. */
error: string | null
/** macOS: адрес socks5-прокси, пока обход работает. На Linux/Windows всегда null. */
socksAddress: string | null
/** macOS: прописан ли прокси в системных настройках сети. На Linux/Windows не используется. */
systemProxyApplied: boolean
/** Windows: установлена ли служба (её ставит и настраивает само приложение при первом включении). */
serviceInstalled: boolean
/** Windows: стоит ли служба на автозапуск с системой (`sc config start=`). На Linux автозапуска нет. */
/** macOS/Windows: автозапуск с системой без запущенного приложения. На Linux не используется. */
autoStart: boolean
}
@@ -118,23 +116,19 @@ export interface IpcHandlers {
'zapret:strategies': () => ZapretStrategy[]
'zapret:start': (strategyId: string) => ZapretStatus
'zapret:stop': () => ZapretStatus
/** macOS: прописать/убрать socks-прокси в системных настройках сети. */
'zapret:set-system-proxy': (enabled: boolean) => ZapretStatus
/**
* Выбор пресета. Если обход выключен — просто запоминается. Если включён — на macOS
* перезапускает tpws, на Windows перенастраивает службу (потребуется UAC), на Linux
* перезапускает nfqws и правила nftables (потребуется пароль через pkexec).
* переустанавливает LaunchDaemon с utunws (потребуется пароль администратора), на Windows
* перенастраивает службу (потребуется UAC), на Linux перезапускает nfqws и правила
* nftables (потребуется пароль через pkexec).
*/
'zapret:set-strategy': (strategyId: string) => ZapretStatus
/** Windows: автозапуск службы с системой (`sc config start=`); требует UAC. */
/** macOS/Windows: автозапуск с системой; требует пароль администратора/UAC. */
'zapret:set-autostart': (enabled: boolean) => ZapretStatus
'zapret:lists': () => ZapretList[]
'zapret:list-save': (id: ZapretListId, entries: string[]) => ZapretList
'zapret:list-reset': (id: ZapretListId) => ZapretList
/** Список, который zapret пополняет сам через --hostlist-auto (только macOS-профили). */
'zapret:auto-hostlist': () => string[]
'zapret:auto-hostlist-clear': () => void
/**
* Запустить проверку соединения и сразу вернуть список проверяемых сайтов — сами