Skip to content

Latest commit

 

History

History
229 lines (166 loc) · 9.18 KB

File metadata and controls

229 lines (166 loc) · 9.18 KB

Skirk

English

Skirk logo

Skirk یک ابزار Go-first برای تست شبکه‌های محدود است. روی دستگاه کلاینت یک پروکسی SOCKS5، پروکسی HTTP اختیاری، یا VPN اندروید می‌دهد و ترافیک TCP را به صورت رمزگذاری‌شده از مسیر یک mailbox folder در Google Drive به یک دستگاه خروجی می‌رساند. دستگاه خروجی همان جایی است که اینترنت معمولی دارد و درخواست‌ها را به مقصد واقعی وصل می‌کند.

استفاده از Skirk فقط برای کار قانونی، با اجازه، روی اکانت و شبکه‌ای است که خودتان حق استفاده از آن را دارید. این پروژه وابسته به Google، Google Cloud، Google Drive، Cloudflare، GitHub، Microsoft، Android یا هیچ ارائه‌دهنده‌ی دیگری نیست. قبل از استفاده یا انتشار، حتما DISCLAIMER.md را بخوانید.

چه چیزهایی لازم دارید

  • یک دستگاه خروجی با اینترنت عادی. VPS بهتر است، چون همیشه روشن می‌ماند؛ ولی لپ‌تاپ یا سرور خانگی هم تا وقتی آنلاین باشد کار می‌کند.
  • یک اکانت Google برای mailbox داخل Drive.
  • یک پروفایل skirk:... که می‌توانید برای دستگاه‌های کلاینت بفرستید.

کلاینت‌ها لازم نیست وارد Google شوند، gcloud نصب کنند، یا پروژه Google Cloud داشته باشند. راه‌اندازی فقط یک بار روی دستگاه خروجی انجام می‌شود و در آخر یک متن یک‌خطی می‌دهد که برای کلاینت فرستاده می‌شود. همان پروفایل را می‌شود روی چند دستگاه import کرد. هر کلاینت برای خودش یک شناسه محلی می‌سازد و هر بار اتصال هم یک شناسه اجرای تازه دارد، برای همین جواب‌های Drive بین دو دستگاه قاطی نمی‌شود.

شروع سریع

روی دستگاه خروجی Skirk را نصب کنید:

curl -fsSL https://raw.githubusercontent.com/ShahabSL/Skirk/main/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"

یک kit بسازید:

skirk setup init --out skirk-kit --reset-google-login

setup یک لینک Google و یک کد کوتاه نشان می‌دهد. لینک را در مرورگر باز کنید، کد را وارد کنید، دسترسی Drive را تایید کنید، و ترمینال ادامه می‌دهد.

بعد exit را روشن کنید:

skirk serve-exit --config skirk-kit/exit.json

فایل skirk-kit/client.skirk همان پروفایل یک‌خطی کلاینت است. آن را برای کلاینت بفرستید.

روی کلاینت Linux:

curl -fsSL https://raw.githubusercontent.com/ShahabSL/Skirk/main/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"

read -r SKIRK_CLIENT_CONFIG
# پروفایل skirk:... را paste کنید، Enter بزنید، بعد:
skirk serve-client --config "$SKIRK_CLIENT_CONFIG" --listen 127.0.0.1:18080

برای تست:

curl --socks5-hostname 127.0.0.1:18080 http://example.com/

اگر برنامه‌ای که استفاده می‌کنید گزینه socks5h دارد، همان را انتخاب کنید تا DNS هم از مسیر exit رد شود.

کلاینت‌ها

روی Linux یا سرورهای بدون محیط گرافیکی، همان CLI کافی است:

skirk serve-client --config client.skirk --listen 127.0.0.1:18080

اگر روی یک Linux همیشه از همین کلاینت استفاده می‌کنید، بهتر است یک client ID ثابت بدهید. این مقدار secret نیست؛ فقط این دستگاه را از بقیه دستگاه‌هایی که همان پروفایل را دارند جدا می‌کند:

skirk serve-client --config client.skirk --listen 127.0.0.1:18080 --client-id my-laptop

روی Windows، نسخه portable دسکتاپ را از Release دانلود کنید. برنامه همان پروفایل یک‌خطی skirk: را import می‌کند و sidecar داخلی Skirk را بالا می‌آورد. فعلا مسیر Windows proxy-first است؛ یعنی مرورگر یا برنامه را روی SOCKS5 127.0.0.1:18080 تنظیم کنید.

روی Android، برنامه Android را نصب کنید، پروفایل یک‌خطی را import کنید، حالت VPN را انتخاب کنید و Connect بزنید. Android دفعه اول اجازه VPN می‌خواهد. حالت Proxy هم هست، ولی فقط وقتی مناسب است که خود برنامه یا دستگاه دیگری در LAN بتواند SOCKS5 را مستقیم تنظیم کند.

جزئیات بیشتر در docs/clients.md آمده است.

تست در شبکه محدود

پروفایل‌های کلاینت به صورت پیش‌فرض از google_front استفاده می‌کنند؛ یعنی ترافیک Google API را از مسیری با ظاهر Google عبور می‌دهند. exit معمولا direct است، چون خودش اینترنت عادی دارد.

اگر شبکه محدود روی سیستم شما به شکل یک SOCKS محلی در دسترس است:

skirk serve-client \
  --config "$SKIRK_CLIENT_CONFIG" \
  --listen 127.0.0.1:18080 \
  --route-mode google_front \
  --upstream-proxy socks5h://127.0.0.1:11093

برای تست سرعت روی اینترنت عادی، --upstream-proxy را حذف کنید. اگر خواستید مستقیم به Google API وصل شوید:

skirk serve-client --config "$SKIRK_CLIENT_CONFIG" --listen 127.0.0.1:18080 --route-mode direct

بنچمارک و لاگ

وقتی exit روشن است، latency، throughput و مصرف تقریبی Drive API را این‌طور اندازه بگیرید:

skirk bench-live --config skirk-kit/client.skirk --samples 5

تست از مسیر شبکه محدود:

skirk bench-live \
  --config skirk-kit/client.skirk \
  --upstream-proxy socks5h://127.0.0.1:11093 \
  --route-mode google_front \
  --samples 3

برای تست حجم بالاتر:

skirk bench-live --config skirk-kit/client.skirk --bulk-url http://example.com/big.bin

لاگ‌ها در هر دقیقه تعداد عملیات Drive، quota تخمینی، خطاها، حجم پاسخ‌ها و زمان عملیات‌ها را نشان می‌دهند. اگر OAuth client خودتان را استفاده می‌کنید، Google Cloud Console منبع دقیق‌تر برای quota پروژه است.

قطع کردن و پاکسازی

در حالت عادی، runtime فایل‌های mailbox را بعد از پردازش حذف می‌کند. serve-exit هم یک janitor خودکار دارد که آبجکت‌های قدیمی مسیرهای transport mux را که بیشتر از ۲۴ ساعت مانده‌اند پاک می‌کند.

پاکسازی دستی به صورت dry-run:

skirk cleanup --config skirk-kit/exit.json --older-than 2h

حذف واقعی:

skirk cleanup --config skirk-kit/exit.json --older-than 2h --delete

برای revoke کردن OAuth token داخل config:

skirk revoke --config skirk-kit/exit.json --revoke-oauth

بعد فایل‌های ساخته‌شده را پاک کنید:

rm -rf skirk-kit

اگر پروفایل کلاینت leak شد، OAuth را revoke کنید و kit جدید بسازید. با client.skirk، client.json و exit.json مثل پسورد رفتار کنید.

امکانات پیشرفته

اگر می‌خواهید خروجی exit از یک پروکسی دیگر رد شود، مثلا WARP/wireproxy:

skirk serve-exit --config skirk-kit/exit.json --exit-proxy socks5h://127.0.0.1:40000

اگر علاوه بر SOCKS5، پروکسی HTTP/HTTPS هم می‌خواهید:

skirk serve-client \
  --config skirk-kit/client.skirk \
  --listen 127.0.0.1:18080 \
  --http-proxy-listen 127.0.0.1:18081

مسیر پایدار runtime از fresh prefix listing روی Google Drive استفاده می‌کند. مقدار --poll-ms knob اصلی latency سمت کلاینت است و مقدار پیش‌فرض/پیشنهادی 100 میلی‌ثانیه است؛ polling تهاجمی‌تر می‌تواند رقابت بیشتری روی Drive ایجاد کند.

مستندات