1 Commits
Author SHA1 Message Date
maeneko 6c0509e090 Версия 0.5.4
CI / Линт и типы (push) Canceled after 0s
CI / Сборка (Windows) (push) Canceled after 0s
CI / Сборка (Linux) (push) Canceled after 0s
Чинит обход блокировок на Linux: nfqws --dry-run требует явный --qnum
даже для проверки аргументов (в отличие от winws.exe, с которого был
списан шаблон вызова) — без него dry-run падал на любой стратегии ещё
до запроса пароля, и обход не запускался вообще.
2026-09-04 10:43:29 +03:00
4 changed files with 21 additions and 8 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "rknboost",
"version": "0.5.3",
"version": "0.5.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "rknboost",
"version": "0.5.3",
"version": "0.5.4",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "rknboost",
"version": "0.5.3",
"version": "0.5.4",
"description": "Кроссплатформенное десктопное приложение на Electron + React + TypeScript",
"main": "./out/main/index.js",
"desktopName": "rknboost.desktop",
@@ -23,6 +23,7 @@ CONFIG="$RUN_DIR/strategy.cfg"
ERRLOG="$RUN_DIR/nfqws.err"
TABLE_FAMILY=inet
TABLE_NAME=rknboost
# Держать в синхроне с NFQUEUE_NUM в nfqws.linux.ts (используется там же для --dry-run).
QUEUE_NUM=220
FW_MARK=0x40000000
+17 -5
View File
@@ -78,18 +78,30 @@ export async function stageRuntime(): Promise<void> {
}
/**
* `nfqws --dry-run @<файл>` — проверяет только аргументы фильтра, root не нужен (в отличие
* от рабочего запуска демона). Запускаем бинарник из сборки напрямую: dry-run идёт от uid
* Номер очереди NFQUEUE — держать в синхроне с `QUEUE_NUM` в `rknboost-helper.sh`
* (там же и объяснение выбора числа). В TS он нужен только для `--dry-run` ниже: сам
* помощник получает его не отсюда, а как захардкоженное значение в своём коде.
*/
const NFQUEUE_NUM = 220
/**
* `nfqws --dry-run @<файл>` — проверяет аргументы фильтра, root не нужен (в отличие от
* рабочего запуска демона). Запускаем бинарник из сборки напрямую: dry-run идёт от uid
* самого приложения, а не root, так что FUSE-примонтированный AppImage тут не помеха —
* ограничение касается только `pkexec` (см. linuxStagingDir()). Дословный аналог
* `Win32Engine['dryRun']`.
* ограничение касается только `pkexec` (см. linuxStagingDir()).
*
* В отличие от `Win32Engine['dryRun']` (там `winws.exe --dry-run @file` без доп. флагов
* достаточно) nfqws требует `--qnum` даже для проверки — «Need queue number (--qnum)»,
* даже когда реальная очередь не открывается. Значение то же, что использует помощник
* при настоящем запуске: раз номер не совпадёт — `nft`-правила и демон всё равно будут
* рассинхронизированы, но сам факт валидности остальных аргументов dry-run проверяет верно.
*/
export async function dryRun(configBody: string): Promise<void> {
const dir = await mkdtemp(join(tmpdir(), 'rknboost-dryrun-'))
const configPath = join(dir, 'dry-run.cfg')
try {
await writeFile(configPath, configBody, 'utf8')
await run(nfqwsPath(), ['--dry-run', `@${configPath}`])
await run(nfqwsPath(), ['--dry-run', `--qnum=${NFQUEUE_NUM}`, `@${configPath}`])
} catch (error) {
const message = error instanceof Error ? error.message : String(error)
throw new Error(`Стратегия содержит недопустимые параметры nfqws: ${message}`, {