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-loginsetup یک لینک 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 ایجاد
کند.
