MCPcopy Index your code
hub / github.com/Kianmhz/GooseRelayVPN

github.com/Kianmhz/GooseRelayVPN @v1.7.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.7.1 ↗ · + Follow
390 symbols 1,423 edges 40 files 145 documented · 37%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

GooseRelayVPN

GitHub

English README

یک VPN مبتنی بر SOCKS5 که ترافیک خام TCP را از طریق یک وب اپ Google Apps Script به سرور خروجی VPS کوچک خودتان تونل می‌کند. هر چیزی که در مسیر شبکه قرار دارد فقط TLS به یک IP گوگل با SNI=www.google.com می‌بیند. همه چیز در مسیر به‌صورت سرتاسری با AES-256-GCM رمز می‌شود — گوگل هرگز متن خام را نمی‌بیند و کلید را نگه نمی‌دارد.

توضیح ساده: مرورگر/اپ شما از طریق SOCKS5 به این ابزار روی کامپیوترتان وصل می‌شود. ابزار هر بایت TCP را در فریم‌های AES-GCM می‌پیچد و از طریق یک ارتباط HTTPS رو‌به‌گوگل به وب اپ Apps Script شما می‌فرستد. Apps Script آن بایت‌ها را بدون تغییر به VPS شما فوروارد می‌کند، VPS رمزگشایی کرده و اتصال واقعی را باز می‌کند. برای فایروال/فیلتر انگار فقط دارید با گوگل حرف می‌زنید.

⚠️ برای سرور خروجی به یک VPS کوچک نیاز دارید. برخلاف پراکسی‌های صرفاً Apps Script، این پروژه TCP خام را تونل می‌کند — هر چیزی که SOCKS5 حمل می‌کند — پس یک net.Dial واقعی باید جایی انجام شود. یک VPS ارزان حدود ۴ دلار در ماه کافی است. در عوض می‌توانید SSH، IMAP و هر پروتکل دلخواه را تونل کنید — نه فقط HTTP.

حمایت از پروژه

اگر این پروژه را دوست دارید، لطفاً با ستاره دادن در GitHub (⭐) از آن حمایت کنید. این کار باعث دیده شدن پروژه می‌شود.

اگر تمایل دارید، می‌توانید به صورت مالی هم حمایت کنید:

  • TRX / USDT TRC20: TSxg2WAXYnkoR2UiUTzCxbmqNARAt91aqB
  • BNB / USDT BEP20: 0xe7b48d8fd5fbbb4e3fa9a06723a62a88585139ea
  • TON: UQDBzJqzJ5e7uZFPrmarTRSGGbD1UoFK2q5_jWh4D2nnNdUB

نکات مهم

  • هرگز tunnel_key را با کسی به اشتراک نگذارید. هر کسی این کلید را داشته باشد می‌تواند مثل شما از تونل/VPS استفاده کند.
  • داشتن یک سرور با دسترسی اینترنت عمومی الزامی است. سرور خروجی باید از سمت Google Apps Script قابل دسترسی باشد.
  • هر Deployment ID در Google Apps Script حدود ۲۰٬۰۰۰ اجرا در روز سهمیه دارد و این سهمیه حدود ساعت ۱۰:۳۰ صبح به وقت ایران (GMT+3:30) ریست می‌شود.
  • در این پروژه نیازی به نصب گواهی MITM محلی ندارید. تنظیمات گواهی در MasterHttpRelayVPN مخصوص معماری همان پروژه است و اینجا لازم نیست.
  • این پروژه از ایده مخزن اصلی الهام گرفته است: https://github.com/masterking32/MasterHttpRelayVPN

سلب مسئولیت

GooseRelayVPN فقط برای اهداف آموزشی، تست و پژوهش ارائه شده است.

  • بدون ضمانت: این نرم‌افزار به‌صورت "همان‌گونه که هست" ارائه می‌شود و هیچ ضمانت صریح یا ضمنی، از جمله قابلیت فروش، مناسب بودن برای هدف خاص یا عدم نقض حقوق دیگران، برای آن وجود ندارد.
  • محدودیت مسئولیت: توسعه‌دهندگان و مشارکت‌کنندگان مسئول هیچ خسارت مستقیم، غیرمستقیم، اتفاقی، تبعی یا هر نوع خسارت ناشی از استفاده از این پروژه نیستند.
  • مسئولیت کاربر: اجرای این پروژه خارج از محیط‌های کنترل‌شده ممکن است بر شبکه‌ها، حساب‌ها یا سیستم‌های متصل اثر بگذارد. تمام مسئولیت نصب، پیکربندی و استفاده بر عهده کاربر است.
  • رعایت قوانین: پیش از استفاده، رعایت تمام قوانین محلی، کشوری و بین‌المللی بر عهده کاربر است.
  • رعایت قوانین گوگل: اگر از Google Apps Script در این پروژه استفاده می‌کنید، رعایت Terms of Service گوگل، قوانین استفاده مجاز، سهمیه‌ها و سیاست‌های پلتفرم بر عهده شماست. سوءاستفاده ممکن است باعث تعلیق حساب گوگل یا deployment شما شود.
  • شرایط مجوز: استفاده، کپی، توزیع و تغییر فقط تحت شرایط مجوز مخزن مجاز است. هر استفاده خارج از آن شرایط ممنوع است.

نحوه کار

Browser/App
  -> SOCKS5  (127.0.0.1:1080)
  -> AES-256-GCM raw-TCP frames
  -> HTTPS to a Google edge IP   (SNI=www.google.com, Host=script.google.com)
  -> Apps Script doPost()        (dumb forwarder, never sees plaintext)
  -> Your VPS :8443/tunnel       (decrypts, demuxes by session_id, dials target)
  <- Same path in reverse via long-polling

اپلیکیشن شما بایت‌های TCP را از طریق شنونده SOCKS5 روی کامپیوترتان به این ابزار می‌فرستد. کلاینت هر تکه را با AES-256-GCM رمز می‌کند و batchها را روی یک ارتباط HTTPS با domain fronting برای وب اپ Apps Script شما POST می‌کند. Apps Script یک اسکریپت ~۳۰ خطی است که بدنه را بدون تغییر به VPS شما فوروارد می‌کند — هرگز رمزگشایی نمی‌کند و کلید AES هرگز به گوگل نمی‌رسد. VPS رمزگشایی می‌کند، مقصد واقعی را دایل می‌کند و بایت‌ها را در همان مسیر برمی‌گرداند. فیلتر فقط TLS به گوگل می‌بیند.


راهنمای راه‌اندازی مرحله‌به‌مرحله

مرحله ۱: گرفتن یک VPS

به یک VPS لینوکسی با IP عمومی نیاز دارید. هر ارائه‌دهنده‌ای کار می‌کند.

مرحله ۲: دریافت باینری‌ها

شما به دو برنامه جداگانه نیاز دارید: - goose-client — روی کامپیوتر خودتان اجرا می‌شود. این همان چیزی است که هر روز اجرا می‌کنید. - goose-server — روی VPS اجرا می‌شود. یک‌بار راه‌اندازی می‌کنید و همان‌جا می‌ماند.

🚀 میانبر برای VPS لینوکسی: اگر سرور خروجی شما لینوکس است و دسترسی root دارید، اسکریپت نصب زیر مراحل ۲ تا ۷ مربوط به سرور (دانلود، تنظیمات، تولید tunnel_key، یونیت systemd، فایروال) را در یک دستور انجام می‌دهد. کلاینت و Apps Script (مراحل ۵ و ۸ به بعد) را باید خودتان روی کامپیوترتان انجام دهید.

bash bash <(curl -Ls https://raw.githubusercontent.com/Kianmhz/GooseRelayVPN/main/scripts/goose-server.sh)

اسکریپت قبل از نصب، هش tarball را با SHA256SUMS.txt منتشرشده در ریلیز مقایسه می‌کند، یک tunnel_key تازه می‌سازد که باید در کانفیگ کلاینت قرار دهید، و در اجرای بعدی منوی install / update / uninstall و reconfigure را نشان می‌دهد.

گزینه A — دانلود نسخه آماده (پیشنهادی):

  1. به صفحه Releases بروید.
  2. آرشیو مناسب سیستم‌عامل خود را دانلود کنید:
  3. Windows: GooseRelayVPN-client-vX.Y.Z-windows-amd64.zip
  4. macOS (Intel): GooseRelayVPN-client-vX.Y.Z-darwin-amd64.tar.gz
  5. macOS (M1/M2/M3): GooseRelayVPN-client-vX.Y.Z-darwin-arm64.tar.gz
  6. Linux: GooseRelayVPN-client-vX.Y.Z-linux-amd64.tar.gz
  7. Android / Termux (arm64): GooseRelayVPN-client-vX.Y.Z-android-arm64.tar.gz
  8. برای سرور، باینری مناسب سیستم‌عامل VPS خود را دانلود کنید:
  9. لینوکس (رایج‌ترین): bash wget https://github.com/kianmhz/GooseRelayVPN/releases/latest/download/GooseRelayVPN-server-vX.Y.Z-linux-amd64.tar.gz tar -xzf GooseRelayVPN-server-vX.Y.Z-linux-amd64.tar.gz
  10. ویندوز سرور: فایل GooseRelayVPN-server-vX.Y.Z-windows-amd64.zip را از صفحه Releases دانلود کنید و آن را در پوشه‌ای مثل C:\goose-relay\ اکسترکت کنید. برای راه‌اندازی سرویس، مرحله ۸ (ویندوز) را ببینید.

(عدد vX.Y.Z را با آخرین نسخه در صفحه Releases جایگزین کنید.)

💡 اگر صفحه Releases باز نمی‌شود، می‌توانید مستقیماً با لینک‌های زیر دانلود کنید (vX.Y.Z را با آخرین نسخه جایگزین کنید): - کلاینت — ویندوز: https://github.com/Kianmhz/GooseRelayVPN/releases/download/vX.Y.Z/GooseRelayVPN-client-vX.Y.Z-windows-amd64.zip - کلاینت — macOS (Apple Silicon): https://github.com/Kianmhz/GooseRelayVPN/releases/download/vX.Y.Z/GooseRelayVPN-client-vX.Y.Z-darwin-arm64.tar.gz - کلاینت — macOS (Intel): https://github.com/Kianmhz/GooseRelayVPN/releases/download/vX.Y.Z/GooseRelayVPN-client-vX.Y.Z-darwin-amd64.tar.gz - کلاینت — لینوکس: https://github.com/Kianmhz/GooseRelayVPN/releases/download/vX.Y.Z/GooseRelayVPN-client-vX.Y.Z-linux-amd64.tar.gz - کلاینت — اندروید/Termux: https://github.com/Kianmhz/GooseRelayVPN/releases/download/vX.Y.Z/GooseRelayVPN-client-vX.Y.Z-android-arm64.tar.gz - سرور — لینوکس: https://github.com/Kianmhz/GooseRelayVPN/releases/download/vX.Y.Z/GooseRelayVPN-server-vX.Y.Z-linux-amd64.tar.gz

گزینه B — ساخت از سورس (Go 1.22+) — توصیه نمی‌شود، ممکن است ناپایدار باشد:

git clone https://github.com/kianmhz/GooseRelayVPN.git
cd GooseRelayVPN
go build -o goose-client ./cmd/client
go build -o goose-server ./cmd/server

گزینه C — اجرای فقط سرور با Docker (GHCR):

اگر روی VPS استفاده از کانتینر را ترجیح می‌دهید، می‌توانید goose-server را مستقیم از GHCR اجرا کنید:

docker pull ghcr.io/kianmhz/gooserelayvpn-server:latest

مرحله ۳: ساخت یک کلید مخفی

این دستور را یک‌بار اجرا کنید:

openssl rand -hex 32

رشته ۶۴ کاراکتری خروجی را کپی کنید. همان مقدار را هم در کانفیگ کلاینت و هم سرور می‌گذارید. محرمانه نگه دارید — هر کسی این کلید را داشته باشد می‌تواند از تونل شما استفاده کند.

مرحله ۴: پیکربندی

فایل‌های نمونه را کپی کنید:

cp client_config.example.json client_config.json
cp server_config.example.json server_config.json

هر دو فایل را باز کنید و کلید را در فیلد tunnel_key بگذارید. فعلاً script_keys را خالی بگذارید.

client_config.json:

{
  "socks_host":  "127.0.0.1",
  "socks_port":  1080,
  "google_host": "216.239.38.120",
  "sni":         "www.google.com",
  "script_keys": ["PASTE_DEPLOYMENT_ID"],
  "tunnel_key":  "PASTE_OUTPUT_OF_GEN_KEY"
}

server_config.json:

{
  "server_host": "0.0.0.0",
  "server_port": 8443,
  "tunnel_key":  "SAME_VALUE_AS_CLIENT"
}

مرحله ۵: راه‌اندازی Google Apps Script

این بخش رایگانِ سمت گوگل است که ترافیک شما را پنهان می‌کند.

  1. وارد Google Apps Script شوید و لاگین کنید.
  2. روی New project کلیک کنید.
  3. کد پیش‌فرض را حذف کنید و همه محتوای apps_script/Code.gs را جایگزین کنید.
  4. این خط را با IP VPS خودتان جایگزین کنید: javascript const VPS_URL = 'http://YOUR.VPS.IP:8443/tunnel';
  5. روی Deploy → New deployment کلیک کنید و نوع را Web app بگذارید.
  6. Execute as: Me و Who has access: Anyone را انتخاب کنید.
  7. روی Deploy بزنید. یک پنجره باز می‌شود که Deployment ID را نشان می‌دهد. آن را کپی و در script_keys قرار دهید.
  8. آن Deployment ID را در script_keys داخل client_config.json هم وارد کنید.

⚠️ هر بار که Code.gs را ویرایش می‌کنید باید یک deployment جدید بسازید (Deploy → New deployment) و script_keys را به‌روزرسانی کنید. صرفاً ذخیره کردن کد کافی نیست.

نسخهٔ جدید Code.gs در doGet متادیتای نسخه/پروتکل را هم برمی‌گرداند تا بررسی pre-flight بتواند ناسازگاری نسخه را تشخیص دهد. اگر deployment قدیمی باشد، باید یک‌بار دوباره deploy کنید تا هشدار ناسازگاری نگیرید.

مرحله ۶: باز کردن پورت 8443 روی فایروال VPS

سرور باید از اینترنت روی پورت 8443 قابل دسترسی باشد. روی VPS اجرا کنید:

sudo ufw allow 8443/tcp

سپس از کامپیوتر خودتان تست کنید (IP واقعی VPS را جایگزین کنید):

curl http://YOUR.VPS.IP:8443/healthz

باید یک JSON مثل { "ok": true, "version": "vX.Y.Z", "protocol": 1 } با HTTP 200 بگیرید. اگر curl تایم‌اوت شد یا خطا داد، فایروال ارائه‌دهنده ابری را هم بررسی کنید (در AWS/Hetzner به نام "Security Groups"، در DigitalOcean/Vultr به نام "Firewall Rules") و یک قانون ورودی برای TCP پورت 8443 اضافه کنید.

مرحله ۷: اجرای سرور روی VPS

روی VPS این دستور را اجرا کنید:

لینوکس:

./goose-server -config server_config.json

ویندوز سرور:

.\goose-server.exe -config server_config.json

باید آدرس listening و آدرس‌های healthz/tunnel را ببینید. این ترمینال را باز بگذارید، یا مرحله ۸ را انجام دهید تا بعد از ریبوت هم بالا بماند.

Docker (ایمیج GHCR):

⚠️ مهم: کانتینر فایل server_config.json را به‌صورت خودکار نمی‌سازد. باید قبل از اجرا، server_config.json را خودتان بسازید و با tunnel_key خودتان پر کنید.

docker run -d \
  --name goose-server \
  --restart unless-stopped \
  -p 8443:8443 \
  -v $(pwd)/server_config.json:/app/server_config.json:ro \
  ghcr.io/kianmhz/gooserelayvpn-server:latest

Docker Compose (پیشنهادی برای راه‌اندازی کانتینری):

cp server_config.example.json server_config.json
nano server_config.json
docker compose up -d

فایل docker-compose.yml داخل مخزن آماده است. به‌صورت پیش‌فرض از ghcr.io/kianmhz/gooserelayvpn-server:latest استفاده می‌کند و برای پین کردن نسخه می‌توانید override کنید:

GOOSE_SERVER_IMAGE=ghcr.io/kianmhz/gooserelayvpn-server:vX.Y.Z docker compose up -d

تست از روی کامپیوتر خودتان:

curl http://YOUR.VPS.IP:8443/healthz

مرحله ۸: اجرای خودکار سرور بعد از ریبوت (systemd)

اگر می‌خواهید سرور بعد از ریبوت VPS خودکار بالا بیاید، یک سرویس systemd بسازید.

روی VPS اجرا کنید:

sudo nano /etc/systemd/system/goose-relay.service

این را قرار دهید (اگر مسیر باینری شما فرق دارد، اصلاح کنید):

[Unit]
Description=GooseRelayVPN exit server
After=network.target

[Service]
Type=simple
WorkingDirectory=/root
ExecStart=/root/goose-server -config /root/server_config.json
Restart=always
RestartSec=3
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

بعد اجرا کنید:

sudo systemctl daemon-reload
sudo systemctl enable goose-relay
sudo systemctl start goose-relay
sudo systemctl status goose-relay --no-pager

مرحله ۸ (ویندوز): اجرای خودکار سرور بعد از ریبوت (NSSM)

اگر VPS شما ویندوز سرور دارد، به جای systemd از NSSM (Non-Sucking Service Manager) استفاده کنید تا goose-server را به عنوان یک سرویس ویندوز ثبت کنید. فایل goose-server.exe یک باینری ساده Go است و نیازی به نصب ندارد.

۱. باز کردن پورت ۸۴۴۳ در فایروال ویندوز (با دسترسی Administrator در Command Prompt):

netsh advfirewall firewall add rule name="GooseRelayVPN" protocol=TCP dir=in localport=8443 action=allow

همچنین یک قانون ورودی TCP/8443 در پنل فایروال ارائه‌دهنده ابری خود اضافه کنید (Security Groups / Firewall Rules).

۲. دانلود NSSM از آدرس https://nssm.cc/download، آن را اکسترکت کنید و مسیر nssm.exe را یادداشت کنید (مثلاً C:\nssm\win64\nssm.exe).

۳. ثبت و شروع سرویس (با دسترسی Administrator):

C:\nssm\win64\nssm.exe install GooseRelayVPN "C:\goose-relay\goose-server.exe"
C:\nssm\win64\nssm.exe set GooseRelayVPN AppParameters "-config C:\goose-relay\server_config.json"
C:\nssm\win64\nssm.exe set GooseRelayVPN AppDirectory "C:\goose-relay"
C:\nssm\win64\nssm.exe set GooseRelayVPN Start SERVICE_AUTO_START
C:\nssm\win64\nssm.exe start GooseRelayVPN

۴. بررسی اجرا بودن سرویس:

C:\nssm\win64\nssm.exe status GooseRelayVPN
curl http://YOUR.VPS.IP:8443/healthz

برای توقف یا حذف سرویس:

C:\nssm\win64\nssm.exe stop GooseRelayVPN
C:\nssm\win64\nssm.exe remove GooseRelayVPN confirm

مرحله ۹: اجرای کلاینت روی کامپیوتر

```bash ./goose-client -config client_config.js

Extension points exported contracts — how you extend this code

SessionFactory (FuncType)
SessionFactory creates a new tunneled session for the given "host:port" target. The returned session is owned by the car
internal/socks/server.go

Core symbols most depended-on inside this repo

Close
called by 51
internal/socks/conn.go
shortScriptKey
called by 28
internal/carrier/client.go
New
called by 23
internal/session/session.go
EnqueueTx
called by 23
internal/session/session.go
Write
called by 22
internal/socks/conn.go
EncodeBatch
called by 21
internal/frame/crypto.go
New
called by 21
internal/carrier/client.go
NewCryptoFromHexKey
called by 17
internal/frame/crypto.go

Shape

Function 235
Method 107
Struct 45
FuncType 2
TypeAlias 1

Languages

Go100%

Modules by API surface

internal/carrier/client.go48 symbols
internal/exit/exit_timing_test.go33 symbols
bench/harness/main.go30 symbols
internal/exit/exit.go26 symbols
internal/session/session.go20 symbols
internal/frame/crypto_test.go16 symbols
internal/carrier/client_test.go16 symbols
internal/carrier/fronting.go14 symbols
internal/carrier/client_blacklist_test.go14 symbols
internal/session/session_test.go13 symbols
internal/config/client.go13 symbols
cmd/client/diagnostics.go13 symbols

For agents

$ claude mcp add GooseRelayVPN \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact