Версия 0.5.3
Добавлена сборка под Linux: nfqws + правила nftables (NFQUEUE) вместо socks-прокси или службы Windows. Повышение прав — pkexec на каждое включение/выключение, без службы и без автозапуска. Стратегии переиспользуют существующий набор Flowseal (strategies.win32.generated.ts): --wf-tcp/--wf-udp уходят в правила nftables, остальное — в nfqws как есть. Все правила nftables держат bypass, поэтому упавший или выключенный демон не рвёт пользователю сеть. Помощник (resources/linux-helper/rknboost-helper.sh) и бинарник nfqws перед каждым запуском копируются в userData: root не может прочитать файлы внутри AppImage (FUSE-примонтирован без allow_other), а обычная файловая система на диске ему доступна независимо от прав. Заодно: - починен баг генератора стратегий (^! не разэкранировался в !, ломало fake-tls-auto и на Windows тоже); - карточка обхода теперь показывает текст ошибки независимо от state; - счётчик auto-hostlist в настройках больше не привязан к !isWindows; - CI: отдельная джоба сборки под Linux на ubuntu-latest.
This commit is contained in:
@@ -41,6 +41,7 @@ const PREFIX = `zapret-${ZAPRET_VERSION}`
|
||||
/** Что забираем из архива bol-van/zapret: путь внутри архива → путь внутри resources/zapret. */
|
||||
const FILES = {
|
||||
'binaries/mac64/tpws': 'darwin/tpws',
|
||||
'binaries/linux-x86_64/nfqws': 'linux/x64/nfqws',
|
||||
'binaries/windows-x86_64/winws.exe': 'win32/x64/winws.exe',
|
||||
'binaries/windows-x86_64/cygwin1.dll': 'win32/x64/cygwin1.dll',
|
||||
'binaries/windows-x86_64/WinDivert.dll': 'win32/x64/WinDivert.dll',
|
||||
@@ -49,7 +50,7 @@ const FILES = {
|
||||
}
|
||||
|
||||
/** Исполняемый бит нужен только там, где мы сами запускаем бинарник. */
|
||||
const EXECUTABLE = new Set(['darwin/tpws'])
|
||||
const EXECUTABLE = new Set(['darwin/tpws', 'linux/x64/nfqws'])
|
||||
|
||||
/**
|
||||
* Списки доменов Flowseal → наши короткие имена (используются и в `lists.ts`, и
|
||||
@@ -206,6 +207,7 @@ async function main() {
|
||||
if (
|
||||
process.argv.includes('--force') ||
|
||||
!existsSync(join(DEST, 'darwin', 'tpws')) ||
|
||||
!existsSync(join(DEST, 'linux', 'x64', 'nfqws')) ||
|
||||
!existsSync(join(DEST, 'win32', 'x64', 'winws.exe')) ||
|
||||
!existsSync(join(DEST, 'lists', 'general.txt'))
|
||||
) {
|
||||
|
||||
@@ -97,6 +97,11 @@ function parseBatFile(filename, content) {
|
||||
// Мы передаём argv напрямую в spawn (без шелла) — кавычки внутри значения
|
||||
// остались бы буквальными символами в имени файла, поэтому убираем везде.
|
||||
.map((t) => t.replaceAll('"', ''))
|
||||
// `^!` — экранирование `!` в cmd.exe (в .bat включён enabledelayedexpansion, где `!`
|
||||
// иначе разворачивался бы как переменная). cmd.exe снимает его сам перед запуском
|
||||
// winws.exe; здесь командную строку разбираем руками, и `^` иначе остался бы буквально
|
||||
// в значении. Реальное значение zapret ожидает — `!` («'!' = standard fake» в readme).
|
||||
.map((t) => t.replaceAll('=^!', '=!'))
|
||||
.map(resolvePlaceholders)
|
||||
|
||||
if (tokens.length < 5)
|
||||
|
||||
Reference in New Issue
Block a user