Commit Graph
266 Commits
Author SHA1 Message Date
Dushnilin 5539b9701f fix(singbox): prevent UDP routing to HTTP outbounds (#45) and improve dashboard metadata
- Ensure selector and urltest groups require all member outbounds to support UDP
- Add explicit reject rule for UDP on non-UDP outbounds to avoid sing-box router log spam
- Add http/s:// to connection URL description in LuCI settings and update localization
- Display transport protocol badges on dashboard outbound cards and modal rows
- Deduplicate and collapse UDP routing error lines in telegram logs and bug report
2026-09-07 22:50:10 +03:00
Dushnilin 7256814b0a fix(nft): prevent startup verification failure when IPv6 is disabled and treat awg as download section 2026-09-07 12:35:36 +03:00
Dushnilin be9844d898 fix(dashboard): prevent service sections from falling back to proxy outbound view and showing latency test 2026-09-07 12:19:21 +03:00
Dushnilin dd6b877adb feat: поддержка AmneziaWG 3.1, keepalive ranges, безопасный ruleset HTTP client и Source-Aware DNS 2026-09-07 10:14:12 +03:00
Dushnilin e8c1d9d382 feat: стабильность подписок, порог DNS failover, прямой порт прокси и TorrServer Direct
- subscription: детерминированная сортировка аутбаундов при расчете сигнатуры кэша (защита от перезапусков при shuffle)
- dns: порог последовательных ошибок dns_failover_failure_threshold (защита от флаппинга)
- singbox: выделенный direct_bypass inbound (mixed port 2080) для прямого выхода устройств в обход TPROXY
- torrserver: автоматический bypass cgroups v2 services/torrserver прямо в WAN
- zapret: нормализация устаревших параметров conntrack --ctrack-timeouts
- ui: интеграция управления службами TorrServer Direct и Direct Proxy в LuCI
- tests: новые тесты subscription_order_independence и direct_bypass_torrserver
2026-09-06 21:19:42 +03:00
Dushnilin 625715fed0 feat: асинхронное обновление списков в LuCI (fix XHR timeout) и форматированный config.json
- backend: добавлены команды list_update_async и list_update_status с отслеживанием шагов в /var/run/tachyon/list-update.status
- ui: кнопка ручного обновления списков теперь запускает операцию в фоне, показывает модалку с индикатором и опрашивает статус (устранен таймаут LuCI XHR в 30 сек)
- json: sing-box config.json теперь форматируется с отступами в 2 пробела (sprintf '%.2J') для удобства чтения
- tests: обновлены тесты и добавлены проверки для list-update-status (122/122 passed)
2026-09-06 17:55:40 +03:00
Dushnilin 260e64714b fix(ui): переход на нативные стили LuCI, устранение пустоты справа в модалках и адаптивная ширина 2026-09-06 15:52:46 +03:00
Dushnilin fd79c4e317 feat: поддержка HTTP/HTTPS прокси (#45), комплексная доработка деинсталляции и отката конфигурации (1.3.22) 2026-09-06 14:12:27 +03:00
Dushnilin db45d5d84d fix(singbox): устранение утечки Discord в direct на Sing-box 1.14 и верификация троттлинга DPI
- singbox/generator_routes.uc: восстановлена маршрутизация IP-подсетей сервисов в ip_cidr, добавлены сиды для холодного старта
- nft/apply.uc: наполнение sets.subnets сидами подсетей Discord и Telegram до первой загрузки .lst
- components/updates.uc: автоматический reload ядра Sing-box после фонового list_update при обновлении ruleset
- diagnostics/fuzzer.uc: учет объема скачанных данных, детектирование троттлинга DPI 16KB и вердикты проходимости
- fe-app-tachyon: отображение статусов верификации данных и DPI вердиктов в UI фаззера
2026-09-06 13:05:00 +03:00
Dushnilin 11925e7ec5 fix(updates): resolve tag commit SHA and format build fingerprints; fix telegram, watchdog and logs 2026-09-05 23:52:16 +03:00
Dushnilin a4a757223f fix(awg): support AmneziaWG 2.0/3.0/3.1, fix WARP generator safety & update release 1.3.20 2026-09-05 12:00:14 +03:00
Dushnilin dbe6eb013c fix(perf): eliminate 50k hosts DNS rules CPU lockup, optimize UI polling & memory limits 2026-09-05 00:14:51 +03:00
Dushnilin c80164731f fix: function definition order in action.uc, worker extra param & release fetch timeout 2026-09-04 23:15:26 +03:00
Dushnilin 4cd96902b5 fix: component version picker persistence & installation, dashboard render performance (1.3.20) 2026-09-04 22:44:24 +03:00
Dushnilin a4538311f1 feat: component version picker — list last 3 releases, install specific version (1.3.20) 2026-09-04 21:42:33 +03:00
Dushnilin 78bdd0b412 fix(core): optimize sing-box memory limits, eliminate SIGHUP memory thrashing, and harden zapret2 recovery (1.3.20) 2026-09-04 18:58:31 +03:00
Dushnilin 9927c04a6f fix: resolve crash on geoip_country selection and harden hosts list download (1.3.20) 2026-09-04 17:46:48 +03:00
Dushnilin 0cfc351d5a fix: restore zapret2 worker startup, fast doctor check, and dnsmasq sync (1.3.20) 2026-09-04 16:47:08 +03:00
Dushnilin e901f9d41a fix: zapret2 startup, dnsmasq fakeip rebind protection, dns detour routes (1.3.19) 2026-09-04 13:56:48 +03:00
Dushnilin 196782b18d feat: variant badges, live RSS RAM tracking, sysctl network tuning, telegram updates (1.3.18) 2026-09-03 23:23:39 +03:00
Dushnilin abaa891dd3 fix(updates): resolve component update hang and multiple page reload loop
- action.uc: sweep stuck flock 1000 processes before tachyon restart, bound service restart with 25s timeout, and prevent worker lockup
- shell/index.ts: add 15-minute general hard timeout for non-Tachyon components to prevent infinite modal spin; allow same-version confirmation for both install and reinstall
- package.uc: remove disruptive uhttpd restart from luci_postinst to prevent active socket drops
- ui.uc: refresh stale PID state before checking value.running in action_ack so dead jobs can always be acknowledged
- initController.ts & sessionJobs.ts: persist handled job IDs across reloads in sessionStorage, eliminate redundant modal popups on page reload, and guard against concurrent reloads with safeReloadPage
- renderUpdateProgressModal.ts: record active job before reload and poll readiness with fast health check instead of blind 5s freeze
2026-09-03 07:36:30 +03:00
Dushnilin f2d846515c chore(deps): upgrade @humanfs/node to 0.16.8 to resolve dependabot alert 2026-09-03 05:02:57 +03:00
Dushnilin cce9e026a2 fix(fuzzer): eliminate nfq_create_queue race conditions, rogue daemon leaks and fix modal badge rendering 2026-09-02 21:58:43 +03:00
Dushnilin 13bd69cef9 feat(fuzzer): god-tier strategy generator with PAWS timestamp spoofing, real TLS blobs, and 280+ combinatorial matrix 2026-09-02 20:27:26 +03:00
Dushnilin 84658d84dc feat(dns): add intelligent DNS Benchmark, Auto-Tuner & clean defaults
- Implement ucode module dns/benchmark.uc:
  * Probes major DNS servers (Yandex, Cloudflare, Google, Quad9, AdGuard, Comss, Mullvad, Control D) across UDP 53 and DoH.
  * Measures latency, packet loss, and detects ISP DNS poisoning/hijacking.
  * Intelligent recommendation engine computes optimal primary DNS (prefers encrypted DoH if fast), bootstrap plain UDP, fallback plain UDP from independent provider, and upstream mode (sequential/parallel).
  * Supports CLI execution (tachyon dns_benchmark, tachyon dns_autotune --apply) and background async worker mode for LuCI UI.
- LuCI Web UI modal (renderDnsBenchmarkModal.ts):
  * Real-time progress bar, responsive results table with latency rating badges.
  * Recommendation summary card with one-click 'Apply Recommended DNS' action.
  * Added '⚡ Auto-Tune & Benchmark DNS' button in Settings -> DNS tab.
- Added comprehensive unit tests in vitest (538/538 passed) and tests/dns_benchmark.sh.
- Added Russian PO translations.
2026-09-02 15:28:23 +03:00
Dushnilin 557058c772 fix(ui): reject DoH URLs and path-style DoH in dns_fallback_server field
Mirror the backend validator.uc checks in the LuCI settings UI.
Previously the validate function used validateDNS() which accepts
DoH path format (e.g. 'cloudflare-dns.com/dns-query'); now we gate
before that call with explicit checks matching the backend:
  - '://' → DoH/DoT URL (e.g. 'https://cloudflare-dns.com/...')
  - '/'   → path-style DoH (e.g. 'cloudflare-dns.com/dns-query')

Also add Russian translations for both new error messages.
2026-09-02 14:20:33 +03:00
Dushnilin cc4ad5855a feat(dns): expand DNS server presets for UDP, DoH, DoT, DoQ and Bootstrap 2026-09-01 22:00:04 +03:00
Dushnilin 8b3c3e365f feat(dns): upstream mode (sequential/parallel) & explicit fallback DNS servers, bump 1.3.13 2026-09-01 20:49:21 +03:00
Dushnilin f55f37f804 fix(ui): добавить load() в EntryPoint — UCI не загружался до render(), tab_order всегда был default 2026-09-01 19:36:44 +03:00
Dushnilin 79a4d477db fix(ui): заменить input[checkbox] на button-тогл в виджете порядка вкладок (починить кликабельность) 2026-09-01 19:21:06 +03:00
Dushnilin 324569aa53 fix(ui): исправить чекбоксы виджета порядка вкладок (DummyValue→renderWidget) 2026-09-01 18:46:07 +03:00
Dushnilin 943ee1321d feat(ui): добавить управление порядком, видимостью и стартовой вкладкой меню в Настройки 2026-09-01 18:31:31 +03:00
Dushnilin c432220af5 feat(updates): добавить локальный бэкап и оффлайн-откат компонентов 2026-09-01 12:24:58 +03:00
Dushnilin 84cdf9d2f8 feat(updates): 1.3.10 - Автоматическое обновление компонентов (сразу при выходе и по расписанию)
- Backend: реализован запуск автоматического обновления компонентов в фоновом режиме (trigger_component_auto_update, component_auto_update_apply)
- Cron: поддержка окна обслуживания (schedule mode) с регистрацией задачи в crontab по заданному времени (HH:MM)
- UCI: новые опции component_auto_update_enabled, component_auto_update_mode, component_auto_update_time, component_auto_update_targets
- Web UI: элементы управления во вкладке настроек «Обновления» (чекбокс включения, переключатель режима, время и мультиселект разрешенных компонентов)
- Тесты: добавлен интеграционный тест component_auto_update.sh, обновлены cron-тесты updates_due.sh, все 118 тестов успешно пройдены в Docker
- Локализация: добавлены русские переводы для всех новых элементов интерфейса
2026-09-01 10:58:46 +03:00
Dushnilin dfb32722bf release: 1.3.8 - OpenWrt network interfaces for WARP generator, DoH doctor URL normalization & doctor lock fixes 2026-08-30 20:05:16 +03:00
Dushnilin b3e0a73b2d fix(fuzzer): ensure direct outbound routing and robust zapret2 strategy testing 2026-08-30 10:21:52 +03:00
Dushnilin 939d9418a2 release: 1.3.6 - Family Profiles, Mobile Responsiveness, Mixed Proxy fix & AI Doctor Fuzzer improvements 2026-08-29 13:57:17 +03:00
Dushnilin 3c04a62479 feat(server): support per-user LAN isolation with auth_user and custom route rules 2026-08-29 08:33:24 +03:00
Dushnilin 3960660b9d fix(components): move core_url_module_or_null to top and fix same-release update lifecycle 2026-08-29 08:16:33 +03:00
Dushnilin 5543a6ce46 fix(updates): prevent premature self-update completion while background job is running 2026-08-29 07:55:36 +03:00
Dushnilin 1f2b7edd0d fix(fuzzer): убрал лишний ре-рендер таблицы результатов durante benchmark
renderResults() вызывался каждые 600мс и пересоздавал всю таблицу — при
100+ стратегиях UI зависал. Теперь таблица перерисовывается только при
появлении нового результата или завершении бенчмарка.
2026-08-27 16:24:56 +03:00
Dushnilin b620886b9e feat(fuzzer): DPI-детектор, авто-применение, история результатов
- DPI-детектор: перед бенчмарком определяет тип блокировки (RST/throttle/DNS)
  и переранжирует стратегии по приоритету (badseq для RST, multisplit для
  throttle, fake+TTL для DNS-блока)
- Авто-применение: галочка «Auto-apply best strategy» автоматически
  применяет выигравшую стратегию после завершения бенчмарка
- История: результаты бенчмарков сохраняются в /etc/tachyon/fuzzer_history.json
  (до 50 записей) — новая вкладка «History» в UI
- CLI: новые команды detect_dpi, auto_apply, history, clear_history
- Локализация: русские и английские строки для всех новых элементов UI
- Frontend: вкладка History, баннер DPI-детекции, чекбокс авто-применения
2026-08-27 15:29:07 +03:00
Dushnilin 4f486d368c fix(fuzzer): мгновенная индикация прогресса в UI, fast-fail для нерабочих зондов и оптимизация комбинаторики 2026-08-27 14:01:21 +03:00
Dushnilin b000d3024a feat(fuzzer): мульти-таргетные сьюты, конструктор паттернов, кастомные стратегии и минималистичный UI 2026-08-27 13:54:51 +03:00
Dushnilin 7ddb7f6d4d fix(warp): timeout при прокси, четная длина hex для awg_i1..i5, исправление выбора секции прокси (#43) 2026-08-27 13:06:31 +03:00
Dushnilin c58b7339f7 feat(fuzzer): алгоритмический комбинаторный генератор DPI-стратегий и выбор режима в LuCI 2026-08-27 07:50:21 +03:00
Dushnilin 3ead229264 feat(fuzzer): add RAG knowledge base and LLM-powered strategy synthesizer 2026-08-26 22:50:12 +03:00
Dushnilin dc6f0547b4 feat(fuzzer): автоматический подбор и тюнинг DPI-стратегий для Zapret v2, Zapret v1 и ByeDPI 2026-08-26 22:18:35 +03:00
Dushnilin 9bc6fe28fd feat(failover): автоматическое переключение прокси-секций
- генератор: при section_failover_enabled catch-all указывает на селектор tachyon-failover со всеми секциями-кандидатами
- выбор по умолчанию переживает рестарты через /etc/tachyon/failover_section, устаревшее имя откатывается на первую секцию
- service/failover.uc: пробер каждой секции через Clash API delay, порог N подряд — переключение на живую, TG-уведомление
- watchdog: вызов проверки в slow-тире (модуль сам отключён при выключенной опции)
- настройки: флаг + порог во вкладке Advanced, RU-локализация
- тесты: генерация вкл/выкл/персист/устаревшее состояние + логика переключения со стабом Clash API
2026-08-26 14:15:23 +03:00
Dushnilin b12f2fbdee feat(parental): дневные квоты времени на устройства
- опция daily_quota_minutes у расписаний: лимит минут использования сети в сутки
- поминутный cron-тик: учёт активности через ip neigh, блок до полуночи при исчерпании
- nft-сеты tachyon_quota_block (MAC) и _ip (IPv4) с drop-правилами; самовосстановление после ребилдов таблицы
- сброс счётчиков после смены суток, TG-уведомление о блокировке
- validator: проверка диапазона 0..1440
- UI: поле и колонка квоты в Родительском контроле + RU-локализация
2026-08-26 14:00:40 +03:00