Commit Graph
592 Commits
Author SHA1 Message Date
hacker07 b083789e74 Merge upstream 383b426e (GeoIP localization + dnsmasq DNS-cache monitoring)
Keep both: upstream RAM-usage calculator for dns_cache_size and the fork
AdGuard Home DNS mode options (dns_main_mode / dns_adguard_failover_enabled).
2026-09-17 21:52:45 +03:00
hacker07 15c1b1eb81 Merge upstream main (3.0.0) into feature/adguard
Upstream rewrote install.sh to 3.0.0. Re-apply the fork installer changes on
top: point at the NeoTachyon Gitea repo (REPO_HOST/OWNER/NAME), use the Gitea
API base for release resolution and support optional GITEA_USER/TOKEN auth for
the API and downloads.
2026-09-17 20:48:47 +03:00
Dushnilin 383b426e46 feat: локализация исключений GeoIP по секциям и мониторинг памяти DNS-кэша dnsmasq 2026-09-17 20:48:14 +03:00
Dushnilin 623ea59797 feat: гармонизация секции AWG в дашборде и изоляция маршрутизации FPTN 2026-09-17 19:42:54 +03:00
Dushnilin e2c90ed6ea fix(singbox): fix p2p isolation rule matching for transport network and port directions 2026-09-17 18:17:44 +03:00
Dushnilin b556f2539b feat(subscription): add crypt4 decryption, dual HWID headers, and diagnosis symptom collapsing 2026-09-17 18:04:23 +03:00
Dushnilin e610ea9ca3 fix(installer): use core.common in runtime healthcheck and fix CLI guard in ucode modules 2026-09-17 15:45:50 +03:00
Dushnilin a27173a04a fix(singbox): prevent empty logical subrules when excluding IPs on evaluate and match-all rules (#60) 2026-09-17 14:53:12 +03:00
Dushnilin 2ab4e0db74 fix(subscription): auto fallback on unsupported app provider stubs 2026-09-17 14:39:47 +03:00
hacker07 617107ef15 feat(adguard): add AdGuard Home component with DNS modes, failover and section upstream
Add AdGuard Home as an installable Tachyon component (component card with
check/update/remove/rollback/enable/disable) backed by providers/adguard
(validator + runtime) and an init.d service.

Backend:
- action.uc: install/remove/enable/backup/rollback/dispatch/releases for
  'adguard' (tar.gz from AdguardTeam/AdGuardHome, OpenWrt->AdGuard arch map)
- updater.uc: adguard asset selection; updates.uc: valid_component_name and
  automatic update checks
- runtime.uc: generates AdGuardHome.yaml from UCI (upstream=single-box DNS,
  fallback_dns for failover, web UI on LAN, filters), manages the daemon
- dns/apply.uc: dns_main_mode (dnsmasq->AdGuard->sing-box chain, or AdGuard on
  :53 with dnsmasq DHCP-only)
- settings: dns_main_mode (Main DNS) + dns_adguard_failover_enabled
- sections: routed_dns_type/dns_type 'adguard' resolve via the AdGuard provider
  upstreams; validator accepts the new type
- system-info: adguard_version/installed/enabled/backup fields

Frontend:
- component card 'AdGuard Home' with enable/disable + version actions
- LuCI DNS settings tab: Main DNS selector and failover flag
- section.js: AdGuard Home routed DNS protocol option

Tests: tests/adguard_validator.sh, tests/adguard_runtime.sh
2026-09-17 14:22:13 +03:00
Dushnilin 5bfe7103dc fix(updates): trigger immediate telegram push on component updates and fix cron cleanup regex
Backend CI / Backend Runtime Checks (push) Failing after 2m0s
Frontend CI / Frontend Quality Checks (push) Failing after 0s
Backend CI / OpenWrt Docker E2E (push) Skipped
Differential ShellCheck / Differential ShellCheck (push) Failing after 15s
2026-09-17 13:43:51 +03:00
Dushnilin df61efce80 fix(singbox): allow routed DNS on bypass sections and hide proxy group outbounds in urltest 2026-09-17 12:35:14 +03:00
Dushnilin 5df1124ee8 fix(apk): sanitize orphaned sing-box packages in apk world and add force-overwrite 2026-09-17 11:16:28 +03:00
Dushnilin 287a8f8e0c fix(singbox): resolve 1.14.1 DNS deprecation, store_rdrc, ruleset download_detour, and provider routing isolation 2026-09-17 10:46:04 +03:00
Dushnilin 0efa47abdc fix(dns): preserve 127.0.0.42 during restart and add local DNS cache support
- decouple restart() from stop_impl() in lifecycle.uc to avoid premature dnsmasq_restore
- keep dhcp.@dnsmasq[0].server locked to 127.0.0.42 throughout service restarts
- add atomic restart_service hooks in init.d/tachyon and initd.uc
- fix dns_turbo_cache path resolution to promote default cache to /etc/sing-box/cache.db
- add Local DNS Cache support in dnsmasq (dns_local_cache, dns_cache_size)
- add comprehensive behavioral regression test tests/service_restart_lifecycle.sh
2026-09-17 08:45:24 +03:00
Dushnilin 44a1777c0d fix(singbox): separate dns query and response rulesets for sing-box 1.14+ compatibility 2026-09-17 08:13:11 +03:00
Dushnilin 67761143f5 test(predicates): restore list update signature parity & update plain list validation assertions 2026-09-16 22:54:34 +03:00
Dushnilin 61c01109ad feat(rulesets): add native plain list (.lst/.txt) download and compilation in rule_set & fix OlcRTC/WDTT status 2026-09-16 22:41:52 +03:00
Dushnilin 5eeaa91864 fix: resolve zapret2 fuzzer daemon startup, premature self-update completion, and component visibility cache 2026-09-16 19:54:36 +03:00
Dushnilin 304a95de0a fix(routing): broaden disable_quic to all inbounds and reject SVCB/HTTPS DNS queries 2026-09-16 17:20:14 +03:00
Dushnilin 0f5967e51c fix(routing): scope excluded_ips to section rules, humanize section names, and add component visibility 2026-09-16 16:16:32 +03:00
Dushnilin d28af621c9 fix(ruleset): reject plain lists in ruleset references (#58) and route components to Dushnilin repos 2026-09-16 15:16:56 +03:00
Dushnilin a23c2a2a55 fix(fptn): boot recovery, reload planner, persistent selector state and telegram token flow 2026-09-16 14:54:54 +03:00
Dushnilin 3834b783cc fix(diagnostics): prevent tunnel IP pollution in WAN addresses and exempt Tailscale inbounds from public WAN warning 2026-09-16 10:07:09 +03:00
Dushnilin 4d6892e733 fix: resolve dashboard tile unselection, fuzzer probe parsing and complete translations 2026-09-16 09:45:06 +03:00
Dushnilin 76c51b92a1 feat(fuzzer): implement Probe v2, stable scoring, two-stage verification, and adaptive smart fuzzer 2026-09-16 08:34:02 +03:00
Dushnilin cd584a100f fuzzer: harden runner, fail-closed validation, job isolation and fix AI handoff 2026-09-16 08:20:17 +03:00
Dushnilin 971d958331 fix(fptn): add fptn action to sing-box route target and outbound generation
- Add fptn to route.target() to prevent exit(2) crash on config generation
- Add add_fptn_outbound() using direct outbound with routing_mark=0x00300000
  (routes traffic through tun-fptn via kernel ip rule → table 4249)
- Add fptn to reserve_section_outbound_tags
- Add fptn to generator_routes outbound dispatch

Fixes torrents and all traffic breaking when an FPTN section is configured.
2026-09-16 06:33:23 +03:00
Dushnilin 8855179793 feat: add FPTN section action UI, config fields, dashboard status, and diagnostics
- Add FPTN to ROUTING_ACTIONS, actionProvidersAvailabilityState, isFptnInstalledForUi()
- Add FPTN action option label (FPTN) in getActionOptionLabel and getRuleActionDisplayValue
- Add FPTN to populateActionOptionValues (guarded by isFptnInstalledForUi())
- Add FPTN section config fields: access_token (required), sni, bypass_method, preferred_server
- Add fptn to ACTION_COLORS (#e74c3c)
- Add GetFptnStatus type, GET_FPTN_STATUS method, getFptnStatus() shell method
- Add fptn to dashboard: getDashboardSections, renderSections, getServiceStatus handler
- Add get_fptn_status CLI dispatch and get-fptn-status handler in diagnostics/runtime.uc
- Add FPTN unit test in getDashboardSections.test.ts
- Update translation calls index (locales/calls.json)
2026-09-15 21:25:54 +03:00
Dushnilin 6978601d4d fix: resolve Discord Cloudflare voice ports #55, smart detect proxy sections #56, and UI enhancements 2026-09-15 19:15:57 +03:00
Dushnilin 73cdde17bb feat(fptn): integrate FPTN client component and runtime provider 2026-09-15 14:57:05 +03:00
Dushnilin 03c51d7606 fix(service): prevent recursive flock deadlock and crontab wipe; increase component RPC timeout
- initd.uc: retry_start_on_wan_up now calls BIN_PATH directly instead of
  SERVICE_INIT to avoid the rc.common flock-1000 self-deadlock that was
  hanging Backend CI for the full 1-hour runner timeout
- initd.uc: schedule_start_retry uses background_command() so inherited
  fd 1000 (procd lock) is closed before the sleep starts
- updates.uc, parental_quota.uc: read /etc/crontabs/root via fs.readfile
  instead of crontab -l — BusyBox exits 1 on an empty file causing
  command_output_from_args to return '' and wipe all user cron entries
- shell/index.ts: COMPONENT_ACTION_RPC_TIMEOUT_MS 10s -> 45s to prevent
  false RPC timeout errors during opkg installs on slow routers
2026-09-15 11:16:50 +03:00
Dushnilin 2d00141696 feat(routing): route router's own traffic through designated section 2026-09-15 09:30:04 +03:00
Dushnilin d6d39dac81 perf(ui,watchdog): adaptive UI polling and zero-UCI cached settings context
- Feat(ui): implement adaptive polling in runtimeUiState service (1s -> 2s during active tasks, 10s idle)
- Perf(controller): cache settings snapshot in current_tick_ctx across all probe setting() calls to eliminate repeated uci_core.get_all()
- Perf(controller): reuse ctx.proxy_port in probe_proxy to eliminate duplicate proxy_port() evaluation
- Perf(watchdog): guard adaptive_normal_interval behind 120s check and clear tick context at tick boundary
- Test: add static and behavioral assertions in tests/watchdog_adaptive_intervals.sh
2026-09-15 08:37:43 +03:00
Dushnilin 1c7feb4aac release: 1.3.27 — Runtime performance, watchdog adaptive probes & mixed proxy DNS fix
- Perf(watchdog): Adaptive external health checks for proxy (30s) and DNS (60s)
  * Honor UCI ai_proxy_health_interval and ai_dns_interval while healthy
  * Adapt to fast retry (10-15s) upon consecutive failures, instant post-heal reset
  * Single shared observation context (tick_context) per tick eliminating redundant pgrep/proc scans
  * Throttle watchdog keepalive file writes from 5s to 30s
- Perf(ui): Read-only fast path for get_ui_state
  * Decouple refresh_action_dirs() filesystem GC from 500ms polling requests
  * Throttle action directory cleanup to once per 30s via /var/run stamp
  * Trigger immediate GC sweep on action job completion
- Perf(telegram): Long-poll 50s and eliminate redundant sleep after success
  * Increase getUpdates long-poll timeout to 50s (curl timeout 65s)
  * Remove redundant sleep after successful poll for instant command responsiveness
- Perf(torrserver): Cache detected PID and replace shell sleep with native ucode sleep(60000)
- Fix(singbox): Remove harmful hijack-dns rules from mixed proxy inbounds
  * Eliminate hijack-dns (port 53 / protocol dns) from section, direct bypass and service mixed proxies
  * Resolve 4-5s curl timeouts on component updates (api.github.com) and slow LAN DNS resolution
  * Maintain ip_is_private: true direct LAN routing bypass
- Test: Add tests/watchdog_adaptive_intervals.sh and update tests/sing_box_runtime.sh
- Version: Bump fe-app-tachyon to 1.3.27
2026-09-15 08:20:35 +03:00
Dushnilin bc0928c277 fix(updates,migration): skip sing-box reload when config unchanged (#54) and guard test service restart 2026-09-15 06:35:35 +03:00
Dushnilin 603c0df91b feat(security,ci,ui): harden CI/CD, LuCI ACL, low-space updates and mobile layout
- ci: make frontend CI read-only with strict diff check and deterministic calls.json
- ci: pin external GitHub Actions in workflows to immutable commit SHAs
- ci: add openwrt-e2e blocking gate job running docker_e2e_test.sh
- fix(diagnostic): fix contstants.ts typo and update all 13 import sites
- fix(acl): remove unused /bin/busybox exec from rpcd ACL and add regression test
- feat(updates): add low-space update fallback when creating sing-box.old is impossible
- fix(routes): preserve dedicated Discord gateway subnets (162.159.128.0/21)
- feat(ui): implement responsive auto-fit grid and mobile modal viewport bounds
- test: add viewport regression test suite in vitest
2026-09-14 23:00:18 +03:00
Dushnilin 7375e26b44 fix(qos): harmonize SQM and CAKE cooperation, resolve bufferbloat degradation 2026-09-14 17:03:45 +03:00
Dushnilin 24c11bbca8 feat(rulesets): add Twitch preset and resilient CDN fallback 2026-09-14 14:46:28 +03:00
Dushnilin 4af55ebed3 fix(i18n): restore leak check modal, QoS DSCP, and domain validation translations 2026-09-14 14:20:42 +03:00
Dushnilin 850f1544fe fix(dashboard,lists): restore subscription prefix badges and fix list routing failure 2026-09-14 13:57:00 +03:00
Dushnilin 959bcb59f5 fix(fuzzer): resolve zapret2 lua library and blob candidate paths, capture daemon output 2026-09-13 21:18:21 +03:00
Dushnilin 22ec19b49b fix(watchdog): eliminate WAN false alarms on bridge/Tailscale and restore domain/subnet lists (.lst/.txt) 2026-09-13 20:47:22 +03:00
Dushnilin 4cbf32ee3f fix: resolve server inbound DNS & routing, strategy fuzzer UI sync, and sing-box-extended latency 2026-09-13 16:43:51 +03:00
Dushnilin 4b7faf18a8 fix(discord): restore voice UDP routing on Cloudflare Anycast while isolating web traffic
- Preserve raw Cloudflare subnets in community-subnets-discord.lst in updates.uc instead of destructive deletion.
- In singbox/generator_routes.uc:
  * Exclude Cloudflare Anycast CIDRs from general IP route rules (preventing web hijacking).
  * Generate a dedicated Discord Voice route rule for Cloudflare subnets scoped to network: 'udp' and voice port ranges (50000-65535, 3478, 19302, 5000-5020).
  * Provide DEFAULT_DISCORD_VOICE_SUBNETS fallback in core/ip.uc.
- In nft/apply.uc:
  * Route Cloudflare subnets to ip_ports set with Discord voice ports (5000-5020, 3478, 19302, 50000-65535).
  * Automatically enable ip_port rules when section has community_subnets for Discord.
- In section.js (Routing Rule Tracer):
  * Filter out Cloudflare subnets when resolving domain web traffic to Discord community subnets.
  * Accurately display voice UDP routing notice for Anycast ranges.
- Update tests/community_subnets_sanitization.sh with voice UDP and sing-box validation.
2026-09-13 11:06:28 +03:00
Dushnilin 70bb7280c1 fix(fuzzer): eliminate fuzzer hangs, preserve DNS flags, and optimize probing performance 2026-09-13 10:03:56 +03:00
Dushnilin 914d5cdd2d fix(fuzzer): enforce strict process timeout and probe cleanup to prevent strategy testing hangs 2026-09-12 22:24:40 +03:00
Dushnilin 169e7f497d fix: restore mixed proxy DNS/LAN routing and eliminate service restart log flood
Fixes regression from 1.3.25 where section mixed proxy inbounds lost internet access due to missing DNS hijacking and missing private IP bypass, and suppresses noisy log warnings during service restart/update.
2026-09-12 21:51:05 +03:00
Dushnilin 040b1291c6 fix(parental): resolve quota increase unblocking and preserve domain rules
- Unblock devices when admin increases daily_quota_minutes in parental_quota.uc
- Unblock devices removed from active quota schedules and flush sets on disable
- Ignore target != 'all' schedules in parental_quota.uc screen-time dropper
- Do not suppress domain DNS reject or nft redirect rules when quota is set
- Run parental_quota.uc tick on service start and reload for instant sync
- Add target:all dependency to daily_quota_minutes in LuCI parental view
- Add tests in content_blocking.sh and parental_control.sh
2026-09-12 21:31:03 +03:00
Dushnilin dceb04677e perf(luci): eliminate excessive router CPU load during LuCI session
- Optimize get_ui_state backend by reading /proc natively instead of spawning pidof
- Avoid spawning readlink and redundant ubus queries in state.uc
- Cache positive tachyon_runtime_network_configured checks for 5s
- Back off idle UI state polling interval from 3s to 10s (60s when tab is hidden)
- Back off TachyonLogWatcher interval to 30s
- Pause Dashboard and Monitoring polling when browser tab is inactive (Page Visibility API)
- Fix cleanTabId to ensure inactive tab pollers and timers unmount properly
2026-09-12 21:17:20 +03:00