Commit Graph
197 Commits
Author SHA1 Message Date
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
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 8d60bd36ef fix(install): increase service start timeout from 30s to 120s to allow full provider startup 2026-09-17 13:16:58 +03:00
Dushnilin 37d8c6b19e fix(install): use exact package matching for apk to avoid false legacy migration warning 2026-09-17 12:58:08 +03:00
Dushnilin fcb40ee512 fix(install): define command_success in embedded ucode helper 2026-09-17 12:45:06 +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 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 94d629b8bb chore(i18n): update translation call index and synchronize po templates 2026-09-16 15:20:15 +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 86d6e92ce7 chore: actualize locales and extract translation calls 2026-09-16 08:37:05 +03:00
Dushnilin affd8f7ca4 feat: add Boosty donation link to README and LuCI support modal
- Add Boosty badge to README.md and README.en.md headers
- Add Boosty as first donation option in support sections of both READMEs
- Add Boosty card (with orange border accent) to LuCI diagnostic support modal
- Add Russian translations for Boosty strings in po/ru/tachyon.po
2026-09-16 06:42:09 +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 046902d4e9 chore(i18n): update translation call index and locale templates 2026-09-15 15:08:49 +03:00
Dushnilin 2d00141696 feat(routing): route router's own traffic through designated section 2026-09-15 09:30:04 +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 4af55ebed3 fix(i18n): restore leak check modal, QoS DSCP, and domain validation translations 2026-09-14 14:20:42 +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 70bb7280c1 fix(fuzzer): eliminate fuzzer hangs, preserve DNS flags, and optimize probing performance 2026-09-13 10:03:56 +03:00
Dushnilin 9673ae101d feat(ui): add support and donation modal with CloudTips and crypto addresses 2026-09-12 22:37:01 +03:00
Dushnilin 0fe76b261a fix(leak_check): eliminate false leak alarms, strip technical jargon, and optimize listener probe 2026-09-12 17:25:44 +03:00
Dushnilin 2019ddd12a release: 1.3.26 — Watchdog proxy restart protection, WAN monitor debounce, and subscription bootstrap resilience
- Fix #52: Watchdog proxy restart on single URL failure:
  * Validate failure against secondary independent probe URL before declaring proxy down
  * Skip restart when direct WAN is also degraded or down (!direct_ok)
  * Implement 120s cooldown between automated proxy restarts
  * Fix Telegram notification to accurately state 'Перезапуск sing-box' instead of 'Перезапуск роутера'
- Fix #51: Telegram bot spamming WAN up/down notifications:
  * Filter hotplug events strictly by badwan_monitored_interfaces (defaults to wan)
  * Add atomic directory lock with debounce delay and real ubus state query
  * Prevent repeated notifications when interface state has not transitioned
- Feat: 2-VPN deadlock elimination & self-download subscription proxy:
  * Isolate unbootstrapped dependent subscription sections on initial boot (deferred_sections)
  * Allow self-download proxy target for subscriptions with explicit UI hint '(текущее правило при активности)'
  * Enable automatic local proxy fallback for subscription refresh when direct WAN download fails while sing-box is active
  * Add regression test in tests/subscription_bootstrap_deadlock.sh
- Fix: Parental control quota enforcement:
  * Correct route rule filtering when daily quota minutes are exhausted without a fixed time interval
- i18n & Version bump:
  * Bump fe-app-tachyon to 1.3.26 and update Russian PO/POT translations
2026-09-12 16:50:04 +03:00
Dushnilin afd7e270ce fix(dashboard): add structured routing sections header with title and aligned test-all button
- Wrap test-all button in a clean sections header with Lucide route icon and localized title
- Remove loose inline styles and align button with card grid boundaries
- Add responsive wrapping for mobile displays
- Add Russian localization for Routing sections
- Rebuild LuCI frontend bundle
2026-09-12 00:05:14 +03:00
Dushnilin 0ea1c73832 fix: sanitize Discord community subnets and resolve WAN monitor hotplug spam (fixes #50, #51)
- Fix #50: Discord community subnets hijacking Cloudflare Anycast traffic:
  * Filter broad Cloudflare shared subnets (104.16.0.0/12, 172.64.0.0/13, etc.) for Discord preset in generator_routes.uc, nft/apply.uc, and updates.uc.
  * Add tachyon resolve_domain CLI and runtime.uc helper for DNS queries with rpcd ACL support.
  * Update LuCI Routing Rule Tracer to resolve queried domains against section subnets/CIDRs (including community subnets) and show shared CDN/Anycast warnings.
  * Add unit tests in tests/community_subnets_sanitization.sh.

- Fix #51: Telegram bot spamming WAN up/down notifications on hotplug:
  * Check enable_badwan_interface_monitoring, telegram.enabled, and badwan_monitored_interfaces list in 99-tachyon-wan-monitor.
  * Add background debounce with atomic directory locking and ubus interface status verification.
  * Implement state transition tracking to only notify on actual UP->DOWN and DOWN->UP changes without duplicates.
  * Preserve retry_start_on_wan_up behavior on ifup.
  * Add comprehensive integration test suite in tests/wan_monitor_hotplug.sh.
2026-09-11 23:07:10 +03:00
Dushnilin 5933fd2f0c fix: parental control global network block, luci save&apply reload, and fuzzer localization 2026-09-11 22:35:59 +03:00
Dushnilin 94708d8251 fix: resolve MAC routing crash in sing-box, fallback dashboard on secondary nodes, and unify dashboard naming 2026-09-11 20:34:18 +03:00
Dushnilin 26431f50d3 feat: per-section MAC/DNS exclusions, boot latency sweep, WDTT/OlcRTC providers, DNS hijack socket collision fix
Features:
- Per-Section MAC Exclusions: nft, generator_routes, section.js, i18n
- Per-Section Routed DNS: connections, generator_routes, nft, validator,
  types.ts, section.js, state.uc, reload.uc
- Boot Latency Sweep: ui.uc latency boot sweep with fixture dispatchers
- WDTT provider: full backend (common, validator, runtime), sing-box
  outbound, diagnostics, component install, updater, i18n, section.js UI
- OlcRTC provider: full backend (common, validator, runtime), sing-box
  outbound, diagnostics, component install, updater, i18n, section.js UI
- WireGuard-over-TURN tunnel (WDTT) and TCP-over-WebRTC tunnel (OlcRTC)
  as sidecar processes with local SOCKS5, routed through sing-box outbound

Bug fixes:
- route.uc: restrict hijack-dns to local DNS inbounds only (dns-in,
  source-dns-in, dns-health-*) — fixes socket collision between sing-box
  and dnsmasq on port 53 via SO_REUSEADDR transparent write-back sockets
- runtime.uc: add Port 53 socket collision diagnostic with auto-fix
  (sing-box restart to clear parasitic UNCONN sockets with Recv-Q)
- runtime.uc: add dnsmasq dns_redirect check with auto-fix — disables
  firewall4 DNAT that causes TProxy to rewrite destination to router :53
- failover.uc: add wdtt/olcrtc to failover candidate actions
- telegram.uc: show WDTT/OlcRTC installed status in /info

Tests: 135/155 shell + 591/591 frontend
2026-09-11 18:04:03 +03:00
Dushnilin 37c44a8bdc fix(singbox): correct http_clients detour field and clarify RKN domain list label
- fix(singbox): fix http_clients[0].detour field name (was incorrectly dial_detour, causing fatal decode config unknown field error on sing-box 1.14+)
- fix(ui): rename community list 'Block' to 'Block (RKN)' / 'Реестр РКН' in DOMAIN_LIST_OPTIONS and PO catalogs to prevent confusion with parental control action 'Блокировать'
- fix(ui): fix domain hint for adult content to pornhub.com in section.js
- test(ruleset): update http_clients detour check in ruleset_download_detour.sh
2026-09-10 21:26:48 +03:00
Dushnilin cbae1a87fa fix(ui): remove emojis from strategy fuzzer and leak test action buttons 2026-09-10 10:18:35 +03:00
Dushnilin b51809c81d feat: add DoH blocking, subscription keyword filtering, bulk proxy text inputs, and insecure TLS flag 2026-09-09 22:36:12 +03:00
Dushnilin 9d7e53f260 chore(i18n): actualize and sync frontend PO/POT localization catalogs 2026-09-09 21:06:30 +03:00
Dushnilin ef45d93311 fix(core,nft,singbox,luci): resolve parental domain blocking priority, client bypass and CI apt hash mismatch 2026-09-09 21:01:43 +03:00
Dushnilin f2865b4bb2 fix: resolve parental & profile blocklists saving and enforcement, add dashboard support for missing protocols 2026-09-09 20:10:30 +03:00
Dushnilin e523474631 release: 1.3.24 — тест утечки IP/DNS из роутера, оптимизация запуска списков хостов и локализация
- feat(diagnostics): router-level IP & DNS leak detection
  * одновременный опрос прямого WAN сокета (SO_MARK 0x08000000) и локального прокси (127.0.0.1:4534)
  * выявление утечки реального публичного IP адреса
  * тестирование восходящих DNS-резолверов по протоколу bash.ws и обнаружение DNS провайдера
  * CLI команды: tachyon leak_check [--pretty], check_ip_leak, check_dns_leak
  * LuCI модальное окно с детализированными таблицами изоляции IP и анализа резолверов
- fix(hosts): устранение ложного предупреждения [warn] No hosts list URLs configured
  * запуск HOSTS_UC в lifecycle.uc только при наличии активных списков хостов
  * hosts.uc возвращает success:true и код 0 без лишних записей в syslog при отсутствии URL
  * добавлена проверка has-hosts-list-update-sources в state.uc
- i18n: полная синхронизация русской локализации в каталогах gettext PO/POT
- bump: версия пакета 1.3.24
2026-09-09 17:28:51 +03:00
Dushnilin 625fa1e9b3 fix(guest_mode,telegram): fix guest mode view, translations and bot language switcher 2026-09-08 09:58:43 +03:00
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 5710ab6127 i18n: complete Russian translations and preserve release notes on workflow build 2026-09-07 11:49:57 +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