به پرواز خوش‌آمدید cocode.dk Airways

پرواز Parvaz PVZ ۰۰۱ · CPH→THR

پروازی از روی فیلتر

تونل مرورگر اندروید · Apps Script · domain fronting · فارسی‌محور

cocode.dk · departures local time · LIVE
FLT
STAGE
GATE
STATUS
PVZ 001
paste · the parvaz:// link
A1
boarding
PVZ 002
install · the user CA
B12
on time
PVZ 003
open · chrome (no setup)
C7
cleared
PVZ 004
https · all routes open
D24
final call
§۱

چکیده

بریفینگ مأموریت

پرواز یک تونل مرورگر اندروید با اولویت زبان فارسی برای کاربران ایرانی بدون دانش فنی است. یک دوست آشنا به‌فن، فایل Code.gs از پروژهٔ MasterHttpRelayVPN را روی حساب گوگل خودش مستقر می‌کند؛ کاربر یک لینک parvaz:// از طریق پیام‌رسان امن (سیگنال یا تلگرام — نه واتس‌اپ) دریافت می‌کند، آن را چسبانده یا QR را اسکن می‌کند، یک‌بار گواهی MITM را در تنظیمات اندروید نصب می‌کند، روی «اتصال» می‌زند و سپس در Chrome (یا هر مرورگر Chromium دیگر) به‌طور عادی مرور می‌کند.

ترافیک Chrome از روی Apps Script عبور می‌کند — TLS SNI www.google.com، HTTP Host script.google.com. Chrome در اندروید گواهی پرواز را به‌صورت پیش‌فرض می‌پذیرد؛ بدون پرچم، بدون about:config، بدون روت. از نظر معماری با پورت اثبات‌شدهٔ MasterHttpRelayVPN-RUST هم‌راستاست؛ مزیت پرواز هویت بصری NOTAM، رابط فارسی پیش‌فرض، و راه‌اندازی فشرده‌تر برای مسافران غیرفنی است.

§۲

مسیر پرواز

۵ توقف · DPI فقط جلوی صحنه را می‌بیند
Chromeبدون پرچم
مرورگر
پروازVPN + tun2socks + sidecar
این APK
لبهٔ گوگلSNI www.google.com
آنچه DPI می‌بیند
script.google.comHTTP Host (مسیر واقعی)
داخلی
Code.gsاستقرار شما
UrlFetch → مقصد
آنچه DPI می‌بیندTLS به سمت گوگل · SNI www.google.com · از Search قابل تشخیص نیست.
آنچه گوگل می‌بیندHTTP Host script.google.com → به Web App شما مسیریابی می‌شود.
آنچه Code.gs انجام می‌دهدUrlFetchApp.fetch(target) · پاسخ را در پاکت {s,h,b} برمی‌گرداند.
§۳

اعلان به خلبانان

حریم پروازی محدود
هشدار · حریم پروازی محدود NOTAM A0001/26
قوانین Google Apps Script این استفاده را ممنوع کرده‌است. فایل Code.gs را فقط روی حساب گوگل شخصی خود مستقر کنید — استقرار را متمرکز نکنید، تجاری‌سازی نکنید، نسخهٔ مشترک توزیع نکنید. فقط استفادهٔ شخصی، پژوهشی و آموزشی. اگر پیامدهای حقوقی را درک نمی‌کنید، استقرار ندهید.
§۴

مشخصات بدنه

ویژگی‌ها
۰۱Domain frontingSNI www.google.com · Host script.google.com. DPI جلوی صحنه را می‌بیند؛ گوگل بر اساس Host مسیریابی می‌کند.
۰۲راه‌اندازی فارسیچسباندن لینک parvaz:// یا اسکن QR → نصب یک‌بارهٔ گواهی MITM → اتصال. زبان پیش‌فرض فارسی.
۰۳Chrome بدون تنظیم اضافهChrome (و سایر مرورگرهای Chromium: Brave، Edge، Vivaldi) گواهی نصب‌شدهٔ پرواز را در اندروید بدون نیاز به پرچم می‌پذیرند. اپلیکیشن‌های بومی همچنان به‌صورت پیش‌فرض گواهی کاربر را رد می‌کنند.
۰۴مسیر سریع SNI-rewriteمیزبان‌های متعلق به گوگل بدون عبور از Apps Script · تونل مستقیم · بدون مصرف سهمیه.
۰۵APK متن‌بازرابط Kotlin + Compose · هستهٔ Go SOCKS5 · MIT · فقط F-Droid و sideload.
۰۶بدون تله‌متریبدون تحلیل کاربر · بدون گزارش خطا · کلید دسترسی در EncryptedSharedPreferences.
§۵

افشاگری صادقانه

آنچه نمی‌کند · آنچه باید بکند · محدودیت‌ها
نمی‌کند خیر
  • بدون تحلیل کاربر، تله‌متری یا گزارش راه دور (هنوز).
  • بدون رلهٔ متمرکز — هر مسافر Code.gs خودش را اجرا می‌کند.
  • بدون دسترسی به موقعیت، مخاطبین، پیامک، میکروفون، دوربین (دوربین فقط برای QR، اختیاری).
  • بدون پینگ به‌روزرسانی · بدون تبلیغات · بدون سرویس گزارش خطا.
  • بدون سرور تحت مدیریت ما · بدون حساب · بدون ورود.
در سورس راستی‌آزمایی کنید · MIT · manifest را grep کنید.
باید بکند بله
  • VpnService — برای گرفتن و مسیریابی پکت‌های مرورگر.
  • INTERNET + FOREGROUND_SERVICE — صحبت با Apps Script، زنده ماندن.
  • POST_NOTIFICATIONS (اندروید ۱۳+) — نمایش وضعیت اتصال.
  • قفل صفحه روی دستگاه — اندروید بدون آن گواهی نصب نمی‌کند.
  • یک مرورگر Chromium — Chrome (یا Brave / Edge / Vivaldi). نیازی به پرچم مرورگر نیست.
اختیاری · CAMERA — فقط هنگام اسکن QR.
محدودیت‌ها · اگر کارت پرواز را دست شما بدهیم
اعتمادرله URL · هدر · کوکی · بدنه را به‌صورت متن می‌بیند ~۲۰هزارUrlFetch / روز · سهمیه رایگان ~۳۰ثهر فراخوان ~۶ دقیقههر اجرای اسکریپت ۱ رلهبه ازای هر حساب گوگل · TOS پهنای‌باندمحدود به UrlFetch
§۶

چه کسی پرواز می‌کند، چه کسی زمین‌گیر است

محدودهٔ صادقانه
توجه همهٔ سایت‌ها باز نمی‌شوند — و WebSocket در این نسخه پشتیبانی نمی‌شود.
مجاز برای برخاستن تونل می‌شود
  • Chrome در اندروید — بدون پرچم، بدون about:config، بدون روت.
  • سایر مرورگرهای Chromium — Brave، Edge، Vivaldi — همان مسیر، همان اعتماد.
  • میزبان‌های متعلق به گوگل (google.com، youtube.com، fonts.googleapis.com) از طریق SNI-rewrite مستقیم، در هر مرورگری.
  • وب‌اپ‌های داخل Chrome — Gmail، GitHub، ویکی‌پدیا، سایت‌های خبری، جستجو.
سهمیهٔ Apps Script برای مسیر سریع گوگل مصرف نمی‌شود. پهنای‌باند ~۵ کیلوبایت/ثانیه · WebSocket فعلاً کار نمی‌کند.
زمین‌گیر تونل نمی‌شود
  • Firefox Stable / Beta / Focusabout:config ندارند، پرچم اعتماد قابل تنظیم نیست.
  • Firefox Nightly — پرچم وجود دارد ولی پس از هر بار اجرای دوباره به false برمی‌گردد (fenix#18990، باز از سال ۲۰۲۱).
  • مرورگر DuckDuckGo — مبتنی بر Chromium اما گواهی کاربر را رد می‌کند. تأیید شده که کار نمی‌کند.
  • اپلیکیشن‌های بومی — اینستاگرام، تلگرام، واتس‌اپ، بانک، استریمینگ. به‌صورت پیش‌فرض گواهی کاربر را در اندروید ۷+ رد می‌کنند.
محدودیت کلی MITM در اندروید · برای اپ‌های بومی با xray + VPS جفت کنید.
§۷

توالی سوارشدن

~۳ دقیقه · یک‌بار
۱

دریافت لینک parvaz://

سیگنال یا تلگرام از دوست آشنا · نه واتس‌اپ

خودکار
۲

نصب پرواز · زدن لینک

APK از GitHub releases · sideload

خودکار
۳

نصب گواهی

تنظیمات اندروید · ~۳۰ ثانیه · §۸

دستی
۴

اتصال · باز کردن Chrome

بدون پرچم مرورگر · §۹

دستی
§۸

نصب گواهی · در تنظیمات

گام ۱ از ۲ · یک‌بار · ~۳۰ ثانیه

در پرواز، روی باز کردن تنظیمات بزنید. پرواز فایل parvaz-ca.crt را در پوشهٔ دانلودها قرار می‌دهد و تنظیمات اندروید را باز می‌کند. سپس مسیر گوشی خود را دنبال کنید.

proc · cert.001 · samsungOne UI 6 / Android 14
# SAMSUNG (Galaxy): Settings → Security and privacyMore security settingsInstall from device storageCA certificate → pick parvaz-ca.crt from Downloads → enter your PIN / fingerprint → tap Install anyway on the warning
proc · cert.001 · pixel / aospAndroid 14 / 15
# PIXEL / stock Android: Settings → Security & privacyMore security & privacyEncryption & credentialsInstall a certificateCA certificate → pick parvaz-ca.crt from Downloads → enter your PIN / fingerprint → tap Install anyway on the warning

پیش‌نیاز: قفل صفحه (PIN، الگو، رمز) · بدون آن اندروید نصب نمی‌کند. منو پیدا نمی‌شود؟ در تنظیمات، CA certificate را جستجو کنید. هشدار اشکالی ندارد — گواهی روی گوشی شما ساخته شده و کلید خصوصی هرگز از حافظهٔ خصوصی برنامه خارج نمی‌شود.

§۹

اتصال · باز کردن Chrome

گام ۲ از ۲ · یک‌بار · ~۱۰ ثانیه

روی دکمهٔ تمبر لاستیکی در صفحهٔ اصلی پرواز بزنید. وقتی به در پرواز تغییر کرد، Chrome را باز کنید و عادی مرور کنید — صفحات HTTPS بدون نیاز به تنظیم بیشتر از روی پرواز عبور می‌کنند. Brave، Edge و Vivaldi هم به همین شکل کار می‌کنند؛ گواهی پرواز که نصب کردید تنها چیزی است که نیاز دارند.

proc · browser.001 · chromiumیک‌بار · ~۱۰ ث
# ۱. در پرواز، روی تمبر لاستیکی بزنید. → «پرواز» (طرح) به «در پرواز» (پر · زیتونی) تغییر می‌کند # ۲. Chrome را باز کنید (یا Brave / Edge / Vivaldi). → عادی مرور کنید · بدون پرچم، بدون about:config، بدون روت # ۳. (اختیاری) آزمایش مسیر: open wikipedia.org # سایت غیرگوگل → از MITM عبور می‌کند open google.com # سایت گوگل → مسیر سریع SNI-rewrite

چرا Chrome کار می‌کند: Chrome در اندروید گواهی نصب‌شدهٔ کاربر را از حافظهٔ سیستم می‌پذیرد، و سیاست Certificate Transparency در Chrome استثنای صریحی برای زنجیره‌هایی دارد که به یک گواهی نصب‌شدهٔ کاربر می‌رسند — بنابراین گواهی برگ پرواز بدون نیاز به تنظیم پذیرفته می‌شود. مرورگرهایی که کار نمی‌کنند، و همچنین محدودیت پهنای‌باند و WebSocket، در §۶ آمده‌اند.

§۱۰

طرح‌وارهٔ بدنه

توپولوژی monorepo · Kotlin + Go
Sheet 10 · Monorepo topology MIT · Android 7.0+
parvaz/
├── app/             kotlin + compose UI · VpnService · tun2socks
│                 · sidecar launcher · MITM CA install · NOTAM
├── core/            go SOCKS5 sidecar
│   ├── fronter/     TLS-with-custom-SNI dialer + HTTP client
│   ├── protocol/    Apps Script JSON envelope encode/decode
│   ├── codec/       gzip / br / zstd decoders
│   ├── relay/       envelope + fronted client glue
│   ├── mitm/        (next) CA + leaf certs + TLS server
│   ├── dispatcher/  (next) SNI-rewrite vs MITM+relay decision
│   ├── socks5/      local SOCKS5 listener on :1080
│   └── cmd/parvazd/ sidecar main → libparvaz.so (per ABI)
├── reference/      MasterHttpRelayVPN · upstream python (read-only)
└── website/        bilingual GitHub Pages

· core is called from app via ProcessBuilder, not JNI
· one apk + one Code.gs drop-in + one release tag
drawn by · parvaz.doc§۱۰
§۱۱

دوست آشنا · استقرار رله

~۵ دقیقه · یک‌بار · فقط برای فرد فنی

اگر شما دوست آشنا به‌فن هستید که پرواز را برای کس دیگری راه‌اندازی می‌کنید، استقرار یک‌بارهٔ Apps Script در ادامه آمده‌است. کاربر نهایی هرگز script.google.com را باز نمی‌کند.

proc · relay.deploy.001script.google.com · ~۵ دقیقه
# ۱. باز کردن Apps Script و ساخت پروژهٔ جدید open script.google.com # روی "New project" بزنید # ۲. کد رله را داخل Code.gs بچسبانید (محتوای پیش‌فرض را پاک کنید) view github.com/cocodedk/parvaz/blob/main/apps_script/Code.gs copy → paste into the Code.gs tab in the editor # ۳. یک AUTH_KEY تصادفی قوی بسازید (از رمز قبلی استفاده نکنید) openssl rand -base64 32 # یا هر مدیر رمز · حداقل ۳۲ کاراکتر → در Code.gs: var AUTH_KEY = "<paste-here>"; → File → Save (Ctrl/Cmd+S) # ۴. استقرار به‌عنوان Web App Deploy → New deployment → ⚙ Web app Execute as: Me (your-email@gmail.com) Who has access: Anyone → روی Deploy بزنید → اولین بار، گوگل اجازهٔ OAuth می‌خواهد → Allow # ۵. URL را که در اپ پرواز قرار می‌گیرد پیدا کنید Apps Script یک Web app URL به‌شما می‌دهد به این شکل: https://script.google.com/macros/s/AKfycbyLONGRANDOMTOKEN/exec └────────────┬────────────┘ deployment-id # تنها قسمتی که نیاز دارید هر زمان دوباره می‌توانید بازش کنید: Deploy → Manage deployments → Web app URL را کپی کنید # ۶. لینک parvaz:// را با ترکیب دو قسمت بالا بسازید parvaz://<deployment-id>/<AUTH_KEY>#<display-name> # نمونهٔ واقعی: parvaz://AKfycbyLONGRANDOMTOKEN/7dF9KmY...eY=#رلهٔ‌من # ۷. فقط از طریق پیام‌رسان امن به اشتراک بگذارید — این URL کلید را در خود دارد ✓ Signal · رمزنگاری سرتاسری · پیشنهاد می‌شود ✓ Telegram · ترجیحاً Secret Chat ✗ WhatsApp · بکاپ ابری متا قابل خوانش است → هرگز ✗ SMS · اپراتور می‌خواند → هرگز ✗ Email · سرور می‌خواند → هرگز

سهمیه: ~۲۰هزار UrlFetch / روز · ۳۰ ثانیه هر فراخوان · ۶ دقیقه هر اجرا. یک رله به ازای هر حساب گوگل (TOS اپس‌اسکریپت). تست: Web app URL را در مرورگر باز کنید — باید {"e":"unauthorized"} ببینید (دلیل بر اینکه استقرار زنده است و درخواست بدون احراز هویت را رد می‌کند). منبع: apps_script/Code.gs · Apps Script · Web Apps.

§۱۲

پشتیبانی زمینی · حرکت

آخرین فراخوان · MIT · ۲۰۲۶
فرمPVZ-001
صادر شده۲۰۲۶.۰۴.۲۶
مبدأکوکد · دانمارک
کالساینپرواز / Parvaz
وضعیتپیش‌آلفا
MIT · © ۲۰۲۶ کوکد · بابک بندپی

مجاز برای برخاستن.

پرواز فقط نیمهٔ کلاینت MasterHttpRelayVPN را جایگزین می‌کند. سرور Apps Script همان Code.gs اصلی است که خودتان روی حساب گوگل خود مستقر می‌کنید.

اگر به ظاهر فارسی NOTAM نیاز ندارید، پورت بالغ‌تر MasterHttpRelayVPN-RUST امروز با APK‌های آمادهٔ ساخت و راهنمای انگلیسی و فارسی در دسترس است.