Commit Graph
2198 Commits
Author SHA1 Message Date
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 547d4aa6ba fix(cli): защита аргументов ucode от перестановок опций GNU getopt
- Добавлен разделитель '--' перед модулем в run_spec (/usr/bin/tachyon) и module_args (diagnostics/runtime.uc), чтобы аргументы стратегий не интерпретировались как флаги ucode
- В tests/cli_entrypoint.sh передан безопасный аргумент strategy_dummy
2026-09-06 09:44:00 +03:00
Dushnilin 381b63d31f test(cli): перенос теста вызова validate_byedpi_strategy_json в cli_entrypoint 2026-09-06 09:41:12 +03:00
Dushnilin e9cf4744f3 fix(byedpi): исправление валидации стратегий ByeDPI и сохранение в веб-интерфейсе LuCI
- Зарегистрирована команда validate_byedpi_strategy_json в command_spec CLI (/usr/bin/tachyon)
- Добавлена функция validate_byedpi_strategy_json и режим validate-byedpi-strategy-json в diagnostics/runtime.uc с вызовом providers/byedpi/validator.uc
- Исправлена ошибка 'Unexpected token U' в LuCI, из-за которой отменялось сохранение стратегии ByeDPI в UCI и сбрасывалось на дефолтное значение
- Добавлены тесты CLI-валидации стратегий в tests/byedpi_validator.sh
2026-09-06 09:33:02 +03:00
Dushnilin 385f989cd9 fix(nft): перехват транзитного трафика в NFQUEUE (mangle_forward) для zapret/zapret2 и фикс голосовых чатов Discord 2026-09-06 09:03:47 +03:00
Dushnilin 49b785ad77 fix(nft): убрать хардкод фильтрации подсетей сервисов из nftables 2026-09-06 08:38:22 +03:00
Dushnilin 6d921d963c fix: корректный порядок применения секций сверху вниз и совместимость со всеми ядрами sing-box (1.3.21)
- Исправлена совместимость с Official (1.13.x), Tiny, LX и Extended ядрами sing-box
- Устранена фатальная ошибка unknown field store_dns на sing-box 1.13.x (автоопределение store_rdrc vs store_dns)
- Добавлена плавная деградация в runtime при неподдерживаемых параметрах cache_file и неизвестных транспортах
- Разделены правила маршрутизации доменов/наборов правил и IP CIDR, устраняя конфликт логики AND в sing-box 1.14+
- Исключены подсети общих CDN (Cloudflare, CloudFront, Hetzner, OVH, DigitalOcean) из nftables L4 для предотвращения перехвата сторонних ресурсов (включая Discord) вышестоящими секциями
- Обеспечено строгое соблюдение порядка следования секций сверху вниз во всех конфигурациях
2026-09-06 08:33:18 +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 916e9c0e6a Ensure all kernel modules and dependencies are installed and loaded for sing-box variants 2026-09-05 14:34:52 +03:00
Dushnilin bcd1616aac test: isolate sing-box version/variant state files in component_backup_rollback 2026-09-05 13:26:56 +03:00
Dushnilin cbdab50cae fix(singbox): migrate 1.14+ dns/cache-file options and use tmpfs for install backups 2026-09-05 13:22:59 +03:00
Dushnilin 7cfd737d21 fix(watchdog): bind probe_wan to configured output_network_interface 2026-09-05 12:50:15 +03:00
Dushnilin b69ebf32f5 fix(awg): dual-schema AWG 3.1 for extended 2.7.0 & lx, add ru translations 2026-09-05 12:12:01 +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 35a78ddca4 fix(ci): align CLI spec with test contract & resolve release validation conflict 2026-09-04 22:57:16 +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 9accb9569e fix(ci): replace invalid allowUpdates with overwrite_files in release action 2026-09-04 21:57:23 +03:00
Dushnilin 23d27ec0a3 fix(i18n): sync source and packaged Russian catalogs with new version picker strings 2026-09-04 21:49:21 +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 5b2083bfcc revert: remove all GOMEMLIMIT/GOGC/GOMAXPROCS tuning from init.d
All Go runtime tuning (GOMEMLIMIT, GOGC, GOMAXPROCS) caused more harm
than good — GC thrashing increased both CPU usage and memory consumption.

Go's default GC with GODEBUG=madvdontneed=1 is already optimal for
sing-box on OpenWrt. sing-box uses ~380MB RSS with 130+ outbounds on
a 2GB device, which is normal and expected.

Removed:
- GOMEMLIMIT (caused GC thrashing, 91% CPU)
- GOGC (aggressive values caused CPU spikes)
- GOMAXPROCS (unnecessary, Go handles this)
- mem_scale file (no longer needed)
- Adaptive memory scaling logic

Kept: GODEBUG=madvdontneed=1 only.

rtk git push origin main
2026-09-04 20:37:46 +03:00
Dushnilin ae79195c17 fix: GOMEMLIMIT for all devices, cascade delete orphans, logread cleanup
- GOMEMLIMIT: remove 256MB RAM threshold cap. Now applies to ALL
  devices. Formula: min(35% RAM, 512MB). mem_scale respected.
  Fixes sing-box eating 500MB+ on 2GB routers with no limit.

- Cascade delete: when a routing section is deleted, child UCI entries
  (subscription_url, urltest, priority_group, priority_level,
  section_interface) are now removed. Prevents orphaned entries that
  corrupt config generation.

- Migration cleanup: orphan_section_interfaces now cleans ALL child
  types, not just section_interface.

- Watchdog logread: kill orphans in stop_runtime(), add SIGTERM/SIGINT
  handlers in uloop mode (previously only in fallback mode).
2026-09-04 20:25:54 +03:00
Dushnilin 529db5fc6c fix(watchdog,priority,dns_failover,providers): reduce CPU/memory footprint on low-end routers (1.3.20)
- priority.uc: replace 1s tight sleep loop with dynamic interval based on group config (5s default)
- dns_failover.uc: replace 1s sleep with min(active_interval, recovery_interval)
- watchdog.uc: cap pending_smart_domains at 500 entries, add 300s TTL expiry
- event_controller.uc: batch is_dns_working nslookup calls into single shell process
- byedpi/runtime.uc: add crash-loop backoff (up to 6x base delay after 5 rapid crashes)
- nfqueue/runtime.uc: same crash-loop backoff for nfqws supervisors
2026-09-04 19:44:20 +03:00
Dushnilin 69b6cf18ec fix(lifecycle): increase sing-box reload verification timeout to 60s for heavy rulesets (1.3.20) 2026-09-04 19:17:29 +03:00
Dushnilin 8e567bc190 fix(service): filter check commands from memory_rss_mb and apply GODEBUG madvdontneed (1.3.20) 2026-09-04 19:14:12 +03:00
Dushnilin fdd5ceeffd fix(singbox): simplify memory limits, restrict GOMEMLIMIT only for devices with RAM < 256MB (1.3.20) 2026-09-04 19:09:03 +03:00
Dushnilin f853108fb1 fix(singbox): set gogc=20 and tune memory upper bound to reduce footprint to 300-400MB (1.3.20) 2026-09-04 19:03:07 +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 e1321dd929 docs: add crypto donation addresses (BTC, ETH, TON, SOL) 2026-09-04 17:55:24 +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 2f83954255 fix(updates): resolve service restart timeout and LuCI session drop on upgrade (1.3.20) 2026-09-04 17:15:52 +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 6bedef4c77 fix: zapret2 daemon privileges and lua loader, dnsmasq reload auto-repair (1.3.20) 2026-09-04 14:45:01 +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 875c483b37 fix(dns): eliminate invalid non-capturing regex in nslookup fallback parser 2026-09-03 23:05:31 +03:00
Dushnilin 4c69a98c27 fix(singbox): fix Leadaxe (lx) version parsing regex and AWG startup on OpenWrt
- In action.uc: replace broken PCRE non-capturing regex in extract_sing_box_version_from_output with token-based field splitting. ucode POSIX regex engine threw 'Repetition not preceded by valid expression', crashing component_action during binary validation.
- In telegram.uc: replace non-capturing group (?:outbounds|server|servers) with standard capturing group for POSIX regex compatibility.
- In generator_outbounds.uc and servers.uc: enhance is_lx detection to check sing-box-version file in addition to sing-box-variant, ensuring AWG 2.0 root schema is generated even if variant file is desynced.
- In runtime.uc: add fallback recovery in sing_box_check retry loop for endpoints (auto-flattening amnezia sub-objects) and outbounds unknown fields.
2026-09-03 21:11:00 +03:00
Dushnilin a2cd11a74c fix(dns): fix 2.5s DNS benchmark and diagnostic probe latency on OpenWrt
- In benchmark.uc and service_check.uc, pass -timeout=2 -type=a to nslookup
- Prevents BusyBox nslookup from sending simultaneous A and AAAA queries across WAN, which causes a 2.5-second retransmit timeout bug on dual-stack/IPv4 routers
- Reduces measured latency from ~2534ms down to true round-trip ping time (~8-15ms)
- Cache tool lookups in has_tool() to avoid spawning redundant child processes
2026-09-03 19:39:57 +03:00
Dushnilin 1c48422511 fix(luci): ensure Tachyon menu item reliably appears in LuCI
- Remove 'uci: { tachyon: true }' dependency from menu.d/luci-app-tachyon.json so LuCI does not hide the menu node if UCI config is uncommitted/reloading
- Add portable timeout normalization in install.sh ucode to handle Busybox timeout and systems without timeout applet
- Ensure luci_postinst is called directly in IPK postinst (build.sh) and after install in install.sh
- Restart uhttpd alongside rpcd and purge LuCI caches in post-install and uninstaller
- Fix uninstall.sh to remove packages individually with lock retry and omit non-existent luci-i18n-tachyon-en
- In install_ui_packages, verify that menu.d/luci-app-tachyon.json actually exists on disk before proceeding
2026-09-03 19:14:22 +03:00
Dushnilin 5c7aa58669 fix(updates): force reinstall and robust validation for sing-box-extended package
- Pass force_reinstall=true to opkg when installing sing-box-extended packages to prevent opkg from silently skipping file extraction on up-to-date packages after the binary backup was moved
- Ensure chmod 0755 on /usr/bin/sing-box after package extraction and before validation
- Include /lib in LD_LIBRARY_PATH when library_dir is set to prevent dynamic linker failures
- Robustly match 'version <tag>' from binary output in read_sing_box_binary_version and log diagnostic details on failure
2026-09-03 07:52:30 +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 36fe7ef312 fix(package): preserve managed sing-box on package upgrade 2026-09-03 07:22:05 +03:00
Dushnilin 43eafd8655 fix(singbox): filter dummy subscription nodes and handle empty binary rulesets on boot 2026-09-03 06:26:39 +03:00
Dushnilin b3358f77a3 fix(stability): optimize Go memory tiers, prevent nftables degradation deadlock, harden NTP & process supervision
- singbox/runtime.uc: add dynamic 4-tier GOMEMLIMIT and GOGC limits based on RAM, enforce /etc/tachyon/mem_scale, and install managed init script across all binary variants
- service/event_controller.uc: guard probe_nftables() with recovery_bypass and native_internet_restored checks to prevent 5-minute network drop deadlock
- service/watchdog.uc: reduce Telegram worker heartbeat timeout from 900s to 300s and add nslookup fallback to Zero-RTT prefetcher
- diagnostics/runtime.uc & service/lifecycle.uc: use direct-IP NTP pool to eliminate circular DNS/TLS deadlocks, and step clock forward on cold boot if RTC desynced
- service/failover.uc & diagnostics/runtime.uc: flush conntrack states on proxy group switch so client connections immediately migrate
2026-09-03 06:13:30 +03:00
Dushnilin ea85164646 docs: expand README.md and README.en.md with comprehensive feature set
- add DPI Fuzzer Engine section (PAWS TCP timestamp spoofing, authentic blobs, seqovl, TCP SYN data, target suites, Netfilter queue isolation)
- add Smart DNS & Failover section (FakeIP pool, DoH/DoT/DoQ/H3, DNS Failover daemon, anti-hijack redirection, DNS Benchmark & Autotune)
- add Parental Controls, Quotas & Smart QoS section (per-device schedules, bandwidth quotas, DSCP packet marking in nftables)
- expand Telegram bot features (real-time connection monitor, quiet hours, live section editor, resilient dual-transport, 64-byte payload protection)
- add MCP (Model Context Protocol) server documentation and WARP / AmneziaWG generator
- expand CLI reference with complete practical command table
2026-09-03 05:14:55 +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 9c80cb4442 fix(telegram): eliminate hang bugs, button payload limit, and sync reload lifecycle
- wrap /sw callback data in cb_data() to strictly enforce 64-byte limit and prevent BUTTON_DATA_INVALID API rejections
- sync telegram daemon in lifecycle reload() so LuCI Save & Apply starts/reloads bot automatically without router reboot
- cleanly stop telegram worker in stop_main() to prevent orphaned background polling processes
- reduce interactive curl timeout in tg_request_via from 35s to 12s, preventing 70s worker freeze on proxy stalls
- close open HTML tags on message truncation and add fallback to plain text if Telegram entity parsing fails
- reduce watchdog telegram worker restart cooldown from 3600s to 120s
- fix nftables check in /test to inspect TachyonTable instead of legacy ip tachyon
- add command aliases /server, /servers, /rules, /ai_doctor and fix integer division in /connections pagination
2026-09-03 05:00:40 +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