Skip to content

Releases: therealaleph/MasterHttpRelayVPN-RUST

v1.9.38

Choose a tag to compare

@github-actions github-actions released this 12 Oct 18:33

• حفظ حریم خصوصی DNS در SOCKS5 (PR #1369 از @maybeknott): درخواست‌هایی که مقصد را به‌صورت نام دامنهٔ SOCKS5 می‌فرستند، معنای remote DNS را در همهٔ مسیرهای passthrough حفظ می‌کنند. اگر Full Tunnel یا upstream SOCKS5 برای resolve از راه دور در دسترس نباشد، اتصال به‌جای نشت نام دامنه به resolver سیستم به‌صورت امن متوقف می‌شود؛ مقصدهای IP و HTTP CONNECT معمولی بدون تغییر می‌مانند.
• پایداری بهتر runtime اندروید و مدیریت امن referenceهای JNI (PR #1370 از @maybeknott): رشته‌های برگشتی JNI داخل local frame محدود می‌شوند تا referenceهای محلی در نشست‌های طولانی انباشته نشوند، و تعداد workerهای Tokio بر اساس توان CPU بین ۲ تا ۴ محدود می‌شود تا مصرف thread و حافظه روی موبایل قابل‌پیش‌بینی بماند.
• cacheهای محدودشده با سیاست LRU و آمار eviction (PR #1371 از @maybeknott): cache پاسخ‌ها اکنون با هر hit ترتیب تازگی را به‌روزرسانی می‌کند و cache تنظیمات گواهی MITM حداکثر ۵۱۲ ورودی نگه می‌دارد. آمار ظرفیت و eviction نیز اضافه شده است تا مصرف حافظه در نشست‌های طولانی با دامنه‌های زیاد نامحدود رشد نکند.

• SOCKS5 remote-DNS privacy is preserved (PR #1369 by @maybeknott): SOCKS5 domain-name targets retain remote-resolution semantics through every passthrough path. When neither Full Tunnel nor an upstream SOCKS5 proxy can resolve remotely, the connection now fails closed instead of leaking the hostname to the system resolver; IP literals and ordinary HTTP CONNECT traffic are unchanged.
• Safer Android JNI references and bounded runtime workers (PR #1370 by @maybeknott): returned JNI strings are scoped through local frames so long-running sessions do not accumulate local references, and Tokio workers are sized from available CPU parallelism with a conservative 2–4 worker bound for predictable mobile thread and memory use.
• Bounded LRU caches with eviction statistics (PR #1371 by @maybeknott): response-cache hits now refresh recency, and the MITM leaf server-configuration cache retains at most 512 entries. Capacity and eviction statistics make the behavior observable while preventing unbounded memory growth across many domains.

What's Changed

New Contributors

Full Changelog: v1.9.37...v1.9.38

v1.9.37

Choose a tag to compare

@github-actions github-actions released this 01 Sep 18:35

• سرعت و پایداری بهتر در relay و Full mode (PR #1417 از @CaptainMirage): پنجره‌های HTTP/2 و reuse اتصال‌های H1/H2 برای لینک‌های پرتأخیر تنظیم شدند، بافر کپی به 64 KiB افزایش یافت، و coalescing حالا در حالت auto با RTT بین presetهای سریع و کند جابه‌جا می‌شود. مسیر upload نیز از تجمیع خطی استفاده می‌کند و حذف اختیاری headerهای اضافی CDN حجم پاسخ relay را کم می‌کند. UI دسکتاپ تنظیمات جدید را هنگام Save حفظ می‌کند.
• backpressure رویدادمحور و DNS غیرمسدودکننده در tunnel-node (PR #1414 از @brightening-eyes): انتظارهای polling با notification جایگزین شدند، حساب‌کردن حجم بافر به‌صورت atomic و زیر همان lock انجام می‌شود، تجمیع UDPGW محدود شده است، و resolve کردن DNS دیگر runtime async را block نمی‌کند. این تغییرها مصرف CPU و حافظه را زیر بار کاهش می‌دهند و race مربوط به طول بافر را حذف می‌کنند.

• Faster, steadier relay and Full mode (PR #1417 by @CaptainMirage): HTTP/2 windows and H1/H2 connection reuse are tuned for high-latency links, copy buffers grow to 64 KiB, and auto coalescing now switches between fast and slow presets using measured RTT. The upload path uses linear-time accumulation, optional CDN-noise header filtering reduces relay response overhead, and desktop UI saves preserve the new settings.
• Event-driven backpressure and non-blocking DNS in tunnel-node (PR #1414 by @brightening-eyes): notifications replace polling waits, buffer accounting is updated atomically under the same lock, UDPGW accumulation is bounded, and DNS resolution no longer blocks the async runtime. These changes reduce CPU and memory pressure under load and eliminate the buffer-length race.

What's Changed

  • some performance optimizations for tunnel-node by @brightening-eyes in #1414
  • perf(relay+tunnel): H2/H1 connection tuning, 64KB copy buffer, dynamic coalescing, CDN header filtering by @CaptainMirage in #1417

Full Changelog: v1.9.36...v1.9.37

v1.9.36

Choose a tag to compare

@github-actions github-actions released this 28 May 15:46

• کنترل مصرف quota برای حساب‌های Apps Script (PR #1396 از @CaptainMirage): هر Deployment/حساب حالا داخل یک پنجره rolling 24h شمرده می‌شود، قبل از رسیدن به سقف با quota_safety_buffer از چرخش خارج می‌شود، و اگر همه حساب‌ها خالی شوند کل relay به‌جای fail شدن وسط session سریع 503 برمی‌گرداند. وضعیت در quota_state.json ذخیره می‌شود، بعد از restart باقی می‌ماند، و UI دسکتاپ بخش Usage Today را با شمارنده fetchها، reset بعدی، حساب‌های فعال، تخمین حجم، و بنر QUOTA HARD STOP نشان می‌دهد.
• iOS full-tunnel app scaffold (PR #1398 از @yyoyoian-pixel): سورس اپ iOS/NetworkExtension اضافه شد: leaf + FakeIP → SOCKS5 → mhrv-rs، ساخت staticlib با cargo rustc --crate-type staticlib، UI با چند Deployment ID، auth key show/hide، SNI pool editor و probe، import/share کانفیگ سازگار با Android، signing از Local.xcconfig، آیکن، و README مخصوص TestFlight. هنوز IPA رسمی داخل release CI منتشر نمی‌شود؛ این release سورس و مسیر build را وارد main می‌کند.
• جلوگیری از OOM در tunnel-node Full mode (PR #1401 از @yyoyoian-pixel): بافر downstream هر TCP session به 32 MiB محدود شد و reader وقتی client دیر drain می‌کند backpressure می‌گیرد. empty pollها دیگر session idle را زنده نگه نمی‌دارند، cleanup حالا همه taskهای session را abort می‌کند، و log دوره‌ای تعداد sessionها و حجم read_buf را نشان می‌دهد. این همان مسیر OOM روی VPSهای کوچک هنگام ویدیو/download سریع و polling کند Apps Script بود.

• Apps Script account quota tracking (PR #1396 by @CaptainMirage): each Deployment/account is now tracked in a rolling 24h window, removed from rotation before the hard limit via quota_safety_buffer, and when every account is exhausted the relay returns a fast 503 instead of failing mid-session. State is persisted in quota_state.json across restarts, and the desktop UI now shows Usage Today with fetch counts, next reset, active accounts, data estimate, and a QUOTA HARD STOP banner.
• iOS full-tunnel app scaffold (PR #1398 by @yyoyoian-pixel): added the iOS/NetworkExtension app source: leaf + FakeIP → SOCKS5 → mhrv-rs, staticlib builds via cargo rustc --crate-type staticlib, multi-Deployment UI, auth-key show/hide, SNI pool editor and probe, Android-compatible config import/share, signing through Local.xcconfig, app icon, and a TestFlight-oriented README. The release CI does not publish an IPA yet; this release lands the source and build path on main.
• Prevent tunnel-node Full mode OOMs (PR #1401 by @yyoyoian-pixel): each TCP session's downstream buffer is capped at 32 MiB, and the reader applies backpressure when Apps Script polling drains slowly. Empty polls no longer keep idle sessions alive, cleanup aborts every task in a session, and periodic logs now expose session count plus total read_buf memory. This targets the VPS OOM path seen with fast upstream video/downloads and slow Apps Script polling.

What's Changed

Full Changelog: v1.9.35...v1.9.36

v1.9.35

Choose a tag to compare

@github-actions github-actions released this 25 May 18:22

• پایداری بهتر برای دانلودهای بزرگ و مسیرهای کند exit-node (PR #1346 از @CaptainMirage). درخواست‌های Range و ادامه‌ی دانلود حالا مسیر مقاوم‌تری دارند، timeout دریافت بدنه از timeout اتصال/هدر جدا شده و مقدار جدید stream_timeout_secs به صورت پیش‌فرض 300 ثانیه است تا فایل‌های بزرگ وسط دریافت بی‌دلیل قطع نشوند. برای درخواست‌های امن مثل GET، timeout مسیر exit-node می‌تواند به Apps Script مستقیم fallback کند، و بستن تمیز TLS هم به ابزارهایی مثل wget/curl کمک می‌کند دانلود را از offset درست ادامه بدهند. فرمت timestamp لاگ‌ها هم فشرده‌تر شده تا خروجی ترمینال و پنل لاگ خواناتر باشد.

--- • **Improve large-download resilience and slow exit-node behavior** ([PR #1346](https://github.com//pull/1346) by @CaptainMirage). `Range` requests and resumed downloads now have a more resilient path, body streaming has its own `stream_timeout_secs` setting with a 300-second default, and large responses are no longer killed by the shorter connect/header timeout while chunks are still arriving. Safe requests such as `GET` can fall back from exit-node timeouts to direct Apps Script, clean TLS shutdown helps `wget`/`curl` resume from the right offset, and compact log timestamps make terminal/UI logs easier to scan.

What's Changed

  • fix(domain_fronter): large download resilience, stream timeout decoupling, and compact log timestamps by @CaptainMirage in #1346

Full Changelog: v1.9.34...v1.9.35

v1.9.34

Choose a tag to compare

@github-actions github-actions released this 22 May 13:15

• مهاجرت config از JSON به TOML با upgrade خودکار (PR #1317 از @CaptainMirage). فایل canonical برای نسخه‌های جدید حالا config.toml است و نمونه‌ها، راهنماها، لانچر ویندوز، OpenWRT init، UI و مسیر Android/JNI همگی با TOML هماهنگ شده‌اند. اگر کنار برنامه هنوز config.json قدیمی دارید، mhrv-rs آن را می‌خواند، یک فایل .toml معادل کنار آن می‌نویسد، و خود config.json را دست‌نخورده می‌گذارد تا مهاجرت بدون از دست رفتن تنظیمات انجام شود. برای اجرای معمولی بعد از مهاجرت از config.toml استفاده کنید؛ اگر automation یا shortcut قدیمی دارید که صراحتاً --config config.json می‌دهد، آن مسیر را به فایل TOML جدید تغییر دهید.

--- • **Migrate config from JSON to TOML with automatic upgrade support** ([PR #1317](https://github.com//pull/1317) by @CaptainMirage). The canonical config file for new releases is now `config.toml`, and the examples, guides, Windows launcher, OpenWRT init, UI, and Android/JNI path now follow the TOML format. If an old `config.json` is still present, mhrv-rs reads it, writes an equivalent neighboring `.toml` file, and leaves the JSON file untouched so settings survive the migration. For normal use after migration, run with `config.toml`; if an old automation or shortcut explicitly passes `--config config.json`, update it to point at the new TOML file.

What's Changed

  • feat(config): migrate config format from JSON to TOML with automatic upgrade path by @CaptainMirage in #1317

Full Changelog: v1.9.33...v1.9.34

v1.9.33

Choose a tag to compare

@github-actions github-actions released this 20 May 13:39

• در حالت Full Tunnel، نشست های کاملا idle حالا keepalive خالی را با backoff شدیدتر می فرستند و وقتی همه deploymentها legacy تشخیص داده شوند، بعد از idle شدن دیگر poll خالی پشت سر هم نمی زنند. این کار مصرف request روی Apps Script و tunnel-node را برای اتصال های بی کار کمتر می کند. (PR #1322 از @yyoyoian-pixel)
• برای fleetهای mixed که هنوز حداقل یک deployment با long-poll سالم دارند، کلاینت همچنان poll خالی را ادامه می دهد تا round-robin بتواند به همان peer سالم برسد و داده remote→client گیر نکند.

• In Full Tunnel mode, fully idle sessions now use a stronger empty-keepalive backoff, and when every deployment is detected as legacy they stop sending repeated empty polls after going idle. This reduces Apps Script and tunnel-node request load for quiet connections. (PR #1322 by @yyoyoian-pixel)
• For mixed fleets where at least one deployment still has healthy long-poll support, the client keeps emitting empty polls so round-robin can still reach that healthy peer and remote→client data does not stall.

What's Changed

Full Changelog: v1.9.32...v1.9.33

v1.9.32

Choose a tag to compare

@github-actions github-actions released this 20 May 11:06
06e9a45

• در حالت Full Tunnel، پروتکل batch حالا از فشرده سازی zstd پشتیبانی می کند. وقتی کلاینت جدید، CodeFull.gs جدید، و tunnel-node جدید همزمان استفاده شوند، درخواست ها و پاسخ های batch می توانند فشرده شوند و مصرف پهنای باند مخصوصا در دانلودهای سنگین کمتر شود.
• فعال شدن فشرده سازی کاملا سازگار با نسخه های قدیمی است: اگر یکی از سه بخش هنوز آپدیت نشده باشد، سیستم به پاسخ های معمولی بدون فشرده سازی برمی گردد و نباید قطع شود.
• برای استفاده از این قابلیت در Full mode، علاوه بر آپدیت برنامه، باید CodeFull.gs را دوباره به عنوان نسخه جدید deploy کنید و tunnel-node / Docker image روی VPS یا Cloud Run را هم redeploy کنید.
• لاگ های batch فشرده شده دوباره امن تر شدند: بدنه پاسخ یا محتوای zops در سطح info چاپ نمی شود، و TUNNEL_AUTH_KEY قبل از باز کردن payload فشرده بررسی می شود.
• با تشکر از @yyoyoian-pixel برای پیاده سازی و تست تجربی این قابلیت در PR #1314.

• Full Tunnel batch protocol now supports zstd compression. When the new client, new CodeFull.gs, and new tunnel-node are deployed together, batch requests and responses can be compressed, reducing bandwidth use especially on download-heavy traffic.
• Compression negotiation is backward compatible: if any one of the three pieces is still old, the system falls back to normal uncompressed responses instead of failing.
• To use this in Full mode, update the app, redeploy CodeFull.gs as a new Apps Script version, and redeploy tunnel-node / the Docker image on your VPS or Cloud Run.
• Compressed batch logging is kept safer: response bodies and zops contents are not printed at info, and TUNNEL_AUTH_KEY is checked before opening compressed payloads.
• Thanks to @yyoyoian-pixel for the implementation and empirical testing in PR #1314.

What's Changed

Full Changelog: v1.9.31...v1.9.32

v1.9.31

Choose a tag to compare

@github-actions github-actions released this 19 May 18:01
1fd3415

• رگرسیون pipeline در Full mode که بعد از v1.9.28 می‌توانست روی sessionهای idle درخواست‌های خالی زیادی بسازد و quota چند deployment را سریع مصرف کند، اصلاح شد. مسیر keepalive دوباره backoff مرحله‌ای دارد و timer refill در حالت idle کمتر poll خالی می‌فرستد.
• جریان داده در Full mode پایدارتر شد: پاسخ‌های خالی قدیمی که قبل از شروع جریان داده queue شده بودند دیگر streak داده را قطع نمی‌کنند، بنابراین افت زودهنگام عمق pipeline و گیر کردن ویدیوها، مخصوصاً Instagram، کمتر می‌شود.
• default گزینه block_stun از این نسخه false است تا STUN/TURN به صورت پیش‌فرض اجازه داشته باشد؛ اگر می‌خواهید آن ترافیک را مسدود کنید، block_stun: true را صریحاً در config بگذارید. با تشکر از @yyoyoian-pixel برای PR #1309.

• Fix a Full mode pipeline regression introduced after v1.9.28 where idle sessions could generate too many empty polls and burn quota across multi-deployment setups. Keepalive polling now has staged backoff again, and idle refill timers schedule fewer empty polls.
• Make Full mode data flow steadier: stale empty-poll replies queued before data starts no longer break active data streaks, reducing premature pipeline-depth drops and video stalls, especially on Instagram.
• Change the block_stun default to false, so STUN/TURN traffic is allowed by default; set block_stun: true explicitly if you want to block that traffic. Thanks @yyoyoian-pixel for PR #1309.

What's Changed

Full Changelog: v1.9.30...v1.9.31

v1.9.30

Choose a tag to compare

@github-actions github-actions released this 18 May 16:38
0db7ce6

• مسیر CodeFull.gs برای Full mode کمی سبک‌تر شد: چند hot path در Apps Script با ساختن رشته‌ها و آرایه‌های کمتر اجرا می‌شوند تا فشار CPU/GC در batchهای پرترافیک کمتر شود. با تشکر از @brightening-eyes برای PR #1254.

• Make the Full mode CodeFull.gs path a little lighter: several Apps Script hot paths now allocate fewer strings/arrays, reducing CPU/GC pressure during high-traffic batches. Thanks @brightening-eyes for PR #1254.

What's Changed

Full Changelog: v1.9.29...v1.9.30

v1.9.29

Choose a tag to compare

@github-actions github-actions released this 17 May 17:11
f5ebb22

• رفع خطای JSON در Code.gs نسخه 1.9.28 (PR #1265، #1245، #1253، #1261). مسیر ساده Code.gs در بعضی درخواست‌ها پاسخ مقصد را خام برمی‌گرداند و کلاینت Rust آن را به‌جای envelope داخلی relay به عنوان JSON parse می‌کرد؛ نتیجه خطاهایی مثل json: key must be a string یا no json in بود. حالا Code.gs مثل CodeFull.gs پاسخ‌ها را داخل envelope {s,h,b} نگه می‌دارد و req.r فقط برای کنترل follow-redirect استفاده می‌شود. برای گرفتن این fix، فایل جدید assets/apps_script/Code.gs را در Apps Script جایگزین کنید و یک New version deploy بسازید.


• Fix the v1.9.28 Code.gs JSON parse regression (PR #1265, #1245, #1253, #1261). The simple Code.gs path could return the destination body verbatim for some requests, so the Rust client tried to parse arbitrary site HTML/JSON as the relay envelope and surfaced errors such as json: key must be a string or no json in. Code.gs now matches CodeFull.gs: normal relay responses stay wrapped as {s,h,b}, and req.r only controls redirect following. To get this fix, replace your Apps Script with the new assets/apps_script/Code.gs and deploy a New version.

What's Changed

Full Changelog: v1.9.28...v1.9.29