Commit Graph
2133 Commits
Author SHA1 Message Date
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
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 963185569e fix(fuzzer): support .lua.gz scripts and correct zapret2 desync function names 2026-09-02 19:37:13 +03:00
Dushnilin fd629555c7 feat(dns): recommend multiple diverse servers for primary DoH, bootstrap, and fallback DNS 2026-09-02 18:38:30 +03:00
Dushnilin 5f4bfc7caf fix(dns): optimize benchmark probing with host caching and strict timeouts 2026-09-02 18:19:37 +03:00
Dushnilin de691c61ab feat(dns): prioritize encrypted DoH as primary DNS with verified UDP bootstrap resolution 2026-09-02 17:29:51 +03:00
Dushnilin 4a46d78e60 fix(singbox): restore strict unusable outbounds rejection while preserving country filter fallback 2026-09-02 16:52:00 +03:00
Dushnilin e8932d3f2d fix(core): prevent ruleset download_detour crash, resilient selector fallback, and clean legacy migration 2026-09-02 16:49:10 +03:00
Dushnilin ad960a173a fix(dns): two-phase cascade benchmark with verified bootstrap DNS resolution 2026-09-02 16:25:58 +03:00
Dushnilin d72e381018 fix(dns): probe DoH with RFC 8484 wireformat and direct IP resolution 2026-09-02 16:18:31 +03:00
Dushnilin 2e094a5c15 fix(tests): update applied_migrations expected fixtures in config_migration.sh 2026-09-02 15:58:07 +03:00
Dushnilin fa38422260 fix(tests): supply isolated cache dirs in config_migration dns tests 2026-09-02 15:54:30 +03:00
Dushnilin de61450e91 ci: include luci-app-tachyon and locales in backend-ci triggers 2026-09-02 15:45:03 +03:00
Dushnilin 8e1d613959 chore(locales): synchronize source and packaged Russian PO catalogs 2026-09-02 15:42:08 +03:00
Dushnilin f3b1feba31 chore(release): bump version to 1.3.14 2026-09-02 15:38:47 +03:00
Dushnilin 6b92b12135 fix(singbox): supply default /dns-query path and SNI for DoH/DoT IP addresses
- When users configure plain IP addresses (e.g. 8.8.8.8, 1.1.1.1, 77.88.8.8) with DoH (https in sing-box), sing-box requires a non-empty HTTP path (defaulting to /dns-query) and proper TLS SNI (server_name) matching the provider certificate.
- Added default /dns-query path fallback in server_from_options().
- Added KNOWN_DNS_SERVER_NAMES mapping for Google, Cloudflare, Yandex, Quad9, AdGuard, Mullvad, Control D, AliDNS, OpenDNS, DNS.SB to provide correct TLS SNI when connecting to raw DNS IPs.
- Added comprehensive DoH/DoT unit tests in tests/dns_failover.sh.
2026-09-02 15:34:27 +03:00