بازگشت به وبلاگ

پروکسی برای گیت‌هاب از ایران: چگونه یک توسعه‌دهنده تحت تحریم‌ها به کد دسترسی داشته باشد

گیت‌هاب به دلیل تحریم‌های ایالات متحده، دسترسی از ایران را مسدود کرده است - اما توسعه‌دهندگان راه‌حل‌های کارآمدی پیدا می‌کنند. بررسی می‌کنیم که کدام پروکسی‌ها واقعاً کار می‌کنند و چگونه می‌توان آن‌ها را در گیت، وی‌اس کد و ترمینال تنظیم کرد.

📅۲۸ مرداد ۱۴۰۵
```html

GitHub در سال 2019 به درخواست OFAC — نهاد نظارتی آمریکایی که بر اجرای تحریم‌ها نظارت دارد، دسترسی کاربران از ایران را مسدود کرد. از آن زمان، توسعه‌دهندگان ایرانی با یک تصویر مشابه روبرو هستند: مخازن غیرقابل دسترسی، push و pull انجام نمی‌شود و حساب کاربری ممکن است در هر لحظه مسدود شود. با این حال، کار متوقف نمی‌شود — تیم‌ها به ادامه commit، deploy و شرکت در پروژه‌های open-source ادامه می‌دهند. در این مقاله بررسی می‌کنیم که چه چیزی واقعاً در سال‌های 2024–2025 کار می‌کند، کدام پروکسی‌ها برای GitHub مناسب هستند و چگونه آنها را به درستی بدون از دست دادن سرعت تنظیم کنیم.

چرا GitHub ایران را مسدود می‌کند: تحریم‌ها و پیاده‌سازی فنی

در ژوئیه 2019، GitHub شروع به محدود کردن دسترسی کاربران از ایران، کریمه، کوبا، سوریه و کره شمالی کرد. دلیل این امر، الزامات OFAC (دفتر کنترل دارایی‌های خارجی) در چارچوب قوانین تحریمی ایالات متحده است. مایکروسافت، که از سال 2018 مالک GitHub است، موظف به رعایت این محدودیت‌ها به عنوان یک شرکت آمریکایی است.

از نظر فنی، مسدودسازی در چندین سطح کار می‌کند:

  • مسدودسازی جغرافیایی بر اساس IP: GitHub کشور را بر اساس آدرس IP شناسایی کرده و درخواست‌ها را از دامنه آدرس‌های ایرانی (بلوک‌های AS متعلق به ارائه‌دهندگان ایرانی) مسدود می‌کند.
  • مسدودسازی حساب‌ها: حساب‌های ثبت شده با IP‌های ایرانی یا با ذکر ایران در پروفایل ممکن است به حالت فقط خواندنی یا کاملاً مسدود شوند.
  • مسدودسازی مخازن خصوصی: مخازن عمومی به صورت جزئی برای خواندن در دسترس هستند، اما مخازن خصوصی کاملاً بسته هستند.
  • محدودیت‌های GitHub Actions و Packages: پایپ‌لاین‌های CI/CD و مخازن بسته‌ها نیز از مناطق مسدود شده در دسترس نیستند.

با این حال، خود GitHub بارها اعلام کرده است که مخالف این محدودیت‌ها است و برای کاهش آنها در حال لابی‌گری است. در سال 2019، این شرکت موفق به دریافت مجوز برای ارائه دسترسی رایگان به مخازن عمومی برای توسعه‌دهندگان ایرانی شد، اما هیچ‌گاه مسدودسازی کامل برطرف نشد.

⚠️ مهم است که درک کنید: مسدودسازی علیه سازمان‌ها و نهادهای دولتی تحت تحریم‌ها است، نه علیه توسعه‌دهندگان فردی. بیشتر برنامه‌نویسان ایرانی در تیم‌های بین‌المللی کار می‌کنند و به طور شخصی تحت تحریم‌ها قرار نمی‌گیرند — اما از نظر فنی، سیستم همه را بر اساس IP مسدود می‌کند.

به همین دلیل، راه‌حل مشکل در تغییر آدرس IP نهفته است — این تنها راه برای دور زدن مسدودسازی جغرافیایی از نظر فنی است. بیایید بررسی کنیم که کدام ابزارها برای این کار مناسب هستند.

چه چیزی واقعاً کار می‌کند: پروکسی، VPN و دور زدن

توسعه‌دهندگان ایرانی از چندین رویکرد استفاده می‌کنند. هر کدام مزایا و معایب خاص خود را دارند — بیایید آنها را به طور صادقانه بررسی کنیم، بدون بازاریابی.

1. پروکسی‌های مسکونی

پروکسی‌های مسکونی از آدرس‌های IP واقعی کاربران خانگی از کشورهای دیگر — آلمان، هلند، ایالات متحده، ترکیه استفاده می‌کنند. از نظر GitHub، چنین درخواستی به عنوان یک درخواست از یک کاربر عادی از یک کشور مجاز به نظر می‌رسد. این گزینه‌ای بسیار مطمئن برای کار مداوم است: خطر مسدود شدن خود پروکسی حداقل و ثبات آن بالا است.

معایب — سرعت آن کمتر از پروکسی‌های دیتاسنتر و هزینه آن بیشتر است. برای عملیات Git (push/pull/clone) معمولاً این مسئله بحرانی نیست: مخازن معمولاً چند مگابایت وزن دارند، نه گیگابایت.

2. پروکسی‌های دیتاسنتر

پروکسی‌های دیتاسنتر سریع‌تر کار می‌کنند و هزینه کمتری دارند. برای کلون کردن مخازن بزرگ، دانلود آثار و کار با API GitHub مناسب هستند. با این حال، IP‌های دیتاسنتر راحت‌تر به عنوان پروکسی شناسایی می‌شوند — برخی از دامنه‌ها قبلاً در لیست سیاه GitHub قرار گرفته‌اند. توصیه می‌کنیم از پروکسی‌های دیتاسنتر از مکان‌های اروپایی (DE, NL, FR) استفاده کنید — آنها کمتر تحت فیلترها قرار می‌گیرند.

3. VPN

VPN — محبوب‌ترین ابزار در میان کاربران ایرانی است. این ابزار در سطح کل سیستم کار می‌کند و نیازی به تنظیم در هر برنامه به طور جداگانه ندارد. معایب: بسیاری از سرورهای VPN قبلاً توسط GitHub مسدود شده‌اند (به‌ویژه رایگان‌های محبوب)، سرعت ناپایدار است و در صورت قطع اتصال، ترافیک ممکن است از طریق IP ایرانی نشت کند.

4. Tor

Tor از نظر فنی کار می‌کند، اما GitHub به طور فعال گره‌های خروجی Tor را مسدود می‌کند. سرعت آن بسیار پایین است — کلون کردن حتی یک مخزن کوچک می‌تواند ساعت‌ها طول بکشد. برای دسترسی مقطعی به رابط وب مناسب است، اما برای توسعه منظم مناسب نیست.

5. تونل‌های SSH از طریق سرور در کشور دیگر

اگر شما یک VPS در اروپا یا ایالات متحده دارید، می‌توانید یک پروکسی SOCKS5 از طریق تونل SSH راه‌اندازی کنید. این از نظر فنی مطمئن و رایگان است (در صورت داشتن سرور)، اما نیاز به دانش پایه‌ای از لینوکس دارد. اطلاعات بیشتر در مورد تنظیمات — در بخش مربوط به Git.

خلاصه‌ای از ابزارها:

برای کار روزمره با GitHub، ترکیب بهینه: پروکسی مسکونی یا دیتاسنتری + تنظیمات در Git در سطح پیکربندی است. این ثبات را بدون تأثیر بر کل ترافیک سیستم فراهم می‌کند.

کدام نوع پروکسی‌ها برای GitHub مناسب هستند: جدول مقایسه

همه گزینه‌ها را در یک جدول بررسی می‌کنیم تا انتخاب مناسب برای وضعیت خود آسان باشد:

نوع سرعت قابلیت اطمینان ریسک مسدود شدن GitHub بهترین برای
پروکسی‌های مسکونی متوسط بالا حداقل کار روزمره، push/pull، رابط وب
پروکسی‌های دیتاسنتر بالا متوسط متوسط کلون کردن مخازن بزرگ، API GitHub، CI/CD
پروکسی‌های موبایل متوسط بسیار بالا بسیار پایین کار با حساب کاربری، اگر قبلاً تحت نظر باشد
VPN (پرداختی) متوسط متوسط متوسط دسترسی عمومی به اینترنت + GitHub
تونل SSH (VPS خودتان) بالا بالا پایین توسعه‌دهندگان با VPS در اروپا/ایالات متحده
Tor بسیار پایین پایین بالا برای کار با Git توصیه نمی‌شود

اگر حساب شما قبلاً هشدارهایی دریافت کرده یا به طور موقت مسدود شده است، بهتر است از پروکسی‌های موبایل استفاده کنید — آنها از IP‌های اپراتورهای موبایل استفاده می‌کنند که GitHub تقریباً هرگز آنها را مسدود نمی‌کند، زیرا هزاران کاربر پشت یک IP موبایل قرار دارند.

چگونه پروکسی را در Git، ترمینال و IDE تنظیم کنیم: راهنمای گام به گام

مزیت اصلی تنظیم پروکسی در Git (نه در سطح سیستم یا VPN) این است که شما کنترل می‌کنید که کدام ترافیک از طریق پروکسی می‌رود. درخواست‌های محلی مستقیم باقی می‌مانند، فقط ترافیک GitHub از طریق IP خارجی مسیریابی می‌شود.

تنظیم پروکسی HTTPS در Git (به صورت جهانی)

ترمینال را باز کنید و دستورات زیر را اجرا کنید، با جایگزینی HOST و PORT با اطلاعات پروکسی خود:

# برای پروکسی HTTP/HTTPS:
git config --global http.proxy http://HOST:PORT

# برای پروکسی SOCKS5 (توصیه می‌شود):
git config --global http.proxy socks5://HOST:PORT

# اگر پروکسی با احراز هویت (نام کاربری + رمز عبور):
git config --global http.proxy socks5://USERNAME:PASSWORD@HOST:PORT

# فقط برای github.com اعمال شود (مخازن دیگر را دست نزنید):
git config --global http.https://github.com.proxy socks5://HOST:PORT

آخرین دستور — مفیدترین است: این پروکسی را فقط برای درخواست‌های به github.com اعمال می‌کند و بر GitLab، Bitbucket یا مخازن داخلی شرکت تأثیری نمی‌گذارد.

بررسی تنظیمات

# مشاهده تنظیمات فعلی پروکسی در Git:
git config --global --list | grep proxy

# تست اتصال به GitHub از طریق پروکسی:
git ls-remote https://github.com/github/gitignore HEAD

اگر دستور ls-remote هش کامیت را برگرداند — پروکسی کار می‌کند. اگر خطا Connection refused یا Could not resolve host بود — صحت HOST و PORT را بررسی کنید.

غیرفعال کردن پروکسی (زمانی که نیازی نیست)

# حذف پروکسی جهانی:
git config --global --unset http.proxy

# حذف پروکسی فقط برای github.com:
git config --global --unset http.https://github.com.proxy

تنظیمات در VS Code

VS Code از تنظیمات سیستمی پروکسی برای ترمینال داخلی و افزونه‌ها استفاده می‌کند. اگر پروکسی را در Git از طریق ترمینال تنظیم کرده‌اید، ترمینال داخلی VS Code به طور خودکار این تنظیمات را دریافت می‌کند. برای پروکسی HTTP در خود ویرایشگر (به عنوان مثال، برای نصب افزونه‌ها) باز کنید:

File → Preferences → Settings → جستجو "proxy" → آدرس پروکسی را در فیلد http.proxy وارد کنید.

تنظیم از طریق تونل SSH (اگر VPS خود را دارید)

اگر شما یک VPS در اروپا یا ایالات متحده دارید، می‌توانید یک پروکسی محلی SOCKS5 از طریق SSH با یک دستور راه‌اندازی کنید:

# ایجاد پروکسی SOCKS5 در پورت محلی 1080 از طریق SSH:
ssh -D 1080 -C -N user@your-vps-ip

# سپس در Git این پروکسی محلی را مشخص کنید:
git config --global http.proxy socks5://127.0.0.1:1080

پرچم -D 1080 پروکسی SOCKS5 را در پورت 1080 باز می‌کند، -C فشرده‌سازی را فعال می‌کند، -N به SSH می‌گوید که دستورات را اجرا نکند — فقط تونل را نگه دارد.

SSH در مقابل HTTPS: کدام بهتر از طریق پروکسی برای GitHub کار می‌کند

این یکی از رایج‌ترین سوالات است: کدام پروتکل برای کار با GitHub از طریق پروکسی استفاده شود — SSH (پورت 22 یا 443) یا HTTPS (پورت 443)؟

HTTPS از طریق پروکسی

اتصالات HTTPS به راحتی می‌توانند پروکسی شوند — دستورات git config http.proxy که در بالا بررسی کردیم، دقیقاً برای HTTPS کار می‌کنند. معایب: در هر push/pull، Git نام کاربری و رمز عبور (یا توکن دسترسی شخصی) را درخواست می‌کند. راه‌حل — ذخیره توکن در ذخیره‌ساز اعتبار:

# فعال کردن ذخیره توکن در keychain سیستم:
git config --global credential.helper store

# پس از اولین push موفق، توکن به طور خودکار ذخیره می‌شود

SSH از طریق پروکسی (ProxyCommand)

اتصالات SSH نمی‌توانند از طریق http.proxy استاندارد در Git پروکسی شوند — نیاز به تنظیمات جداگانه در ~/.ssh/config دارید. بلوک زیر را اضافه کنید:

Host github.com
    HostName ssh.github.com
    User git
    Port 443
    ProxyCommand nc -X 5 -x HOST:PORT %h %p

در اینجا ssh.github.com:443 یک نقطه انتهایی SSH ویژه GitHub است که در پورت 443 (HTTPS) کار می‌کند و به دور زدن مسدودسازی‌ها در پورت 22 کمک می‌کند. nc -X 5 از پروکسی SOCKS5 استفاده می‌کند.

برای بررسی اتصال SSH می‌توانید از دستور زیر استفاده کنید:

ssh -T [email protected]
# پاسخ مورد انتظار: Hi username! You've successfully authenticated...

توصیه:

برای اکثر توسعه‌دهندگان، تنظیم HTTPS + پروکسی SOCKS5 در پیکربندی Git ساده‌تر است. SSH از طریق ProxyCommand نیاز به نصب ابزار netcat و پیکربندی کمی پیچیده‌تر دارد، اما راحتی کار با کلیدهای SSH بدون وارد کردن توکن را فراهم می‌کند.

ریسک‌ها برای حساب کاربری و چگونه آنها را به حداقل برسانیم

استفاده از پروکسی برای GitHub نه تنها یک مسئله فنی است، بلکه یک سوال امنیتی برای حساب کاربری نیز هست. تنظیمات نادرست می‌تواند توجه به حساب را جلب کند یا مشکلات جدیدی ایجاد کند.

ریسک 1: تغییر مداوم IP

اگر از پروکسی‌های چرخشی (IP با هر درخواست یا هر چند دقیقه تغییر می‌کند) استفاده می‌کنید، GitHub ممکن است فعالیت مشکوکی را شناسایی کند: یک حساب کاربری از ده‌ها IP مختلف در مدت زمان کوتاهی وارد می‌شود. این یک محرک برای بررسی امنیت و احتمال مسدود شدن است.

راه‌حل: از پروکسی‌های ثابت (sticky) با IP ثابت یا پروکسی‌های جلسه‌ای با زمان جلسه طولانی (حداقل 24 ساعت) استفاده کنید. برای GitHub، چرخش لازم نیست — ثبات لازم است.

ریسک 2: استفاده از IP‌های مسدود شده دیتاسنترها

برخی از دامنه‌های IP ارائه‌دهندگان محبوب (AWS، DigitalOcean، Vultr) قبلاً در لیست سیاه قرار گرفته‌اند یا توجه بیشتری را جلب می‌کنند. GitHub آنها را به طور مستقیم مسدود نمی‌کند، اما ممکن است درخواست تأیید اضافی کند.

راه‌حل: دیتاسنترهای اروپایی (DE، NL، CH) را انتخاب کنید — آنها کمتر در لیست‌های سیاه قرار می‌گیرند. قبل از استفاده دائمی، IP را از طریق ipinfo.io یا scamalytics.com بررسی کنید.

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

اگر در پروفایل GitHub شما ایران ذکر شده باشد (در فیلد Location)، احتمال بیشتری وجود دارد که حساب تحت محدودیت‌ها قرار گیرد، صرف نظر از IP. این به این معنی نیست که باید منبع را پنهان کنید — اما باید درک کنید که این یک عامل اضافی است.

ریسک 4: کار با مخازن سازمانی

اگر سازمان شما در GitHub به عنوان یک شرکت ایرانی ثبت شده باشد یا مدیران ایرانی داشته باشد، محدودیت‌ها ممکن است سخت‌تر باشند — حتی تا حد مسدود شدن کل سازمان. در این صورت، پروکسی برای حساب شخصی کمک می‌کند، اما مشکل را در سطح سازمان حل نمی‌کند.

چه کار کنیم اگر حساب قبلاً مسدود شده است

GitHub یک فرآیند رسمی برای بازگرداندن حساب برای توسعه‌دهندگان خصوصی ارائه می‌دهد. به [email protected] بنویسید و وضعیت را توضیح دهید. در نامه خود ذکر کنید:

  • شما یک توسعه‌دهنده فردی هستید که با سازمان‌های تحت تحریم ارتباطی ندارید
  • فعالیت شما — توسعه open-source یا تجاری نرم‌افزار است
  • لینک‌های مربوط به مخازن عمومی و فعالیت شما

بر اساس تجربه جامعه، GitHub دسترسی را برای اکثر توسعه‌دهندگان فردی در مدت 1–4 هفته بازمی‌گرداند.

چک‌لیست: بررسی سریع تنظیمات پروکسی برای GitHub

از این چک‌لیست استفاده کنید تا مطمئن شوید که همه چیز به درستی قبل از شروع کار تنظیم شده است:

✅ قبل از تنظیم

  • اطلاعات پروکسی را دریافت کنید: HOST، PORT، نوع (HTTP/SOCKS5)، نام کاربری/رمز عبور
  • IP پروکسی را در ipinfo.io بررسی کنید — کشور نباید ایران باشد
  • مطمئن شوید که IP در لیست سیاه نیست: در scamalytics.com بررسی کنید
  • یک IP ثابت (غیر چرخشی) برای کار دائمی انتخاب کنید

✅ تنظیمات Git

  • دستور git config --global http.proxy اجرا شده است
  • پروکسی فقط برای github.com اعمال شده است (نه به صورت جهانی) — اگر نیاز به تنظیم دقیق دارید
  • credential.helper برای ذخیره توکن (برای HTTPS) تنظیم شده است
  • برای SSH: بلوک در ~/.ssh/config با ProxyCommand اضافه شده است

✅ بررسی عملکرد

  • دستور git ls-remote https://github.com/github/gitignore HEAD هش را برمی‌گرداند
  • دستور ssh -T [email protected] خوشامدگویی را برمی‌گرداند (برای SSH)
  • Push به مخزن آزمایشی با موفقیت انجام شد
  • هیچ خطای 403 Forbidden یا Repository access blocked وجود ندارد

✅ امنیت حساب کاربری

  • از IP ثابت (غیر چرخشی) استفاده می‌شود
  • احراز هویت دو عاملی در حساب GitHub فعال شده است
  • توکن دسترسی شخصی با حداقل مجوزهای لازم تنظیم شده است (فقط repo)
  • توکن دارای تاریخ انقضا است (غیر دائمی)

نتیجه‌گیری

محدودیت‌های تحریمی GitHub واقعیتی ناخوشایند برای توسعه‌دهندگان ایرانی است، اما یک بن‌بست نیست. راه‌حل فنی وجود دارد و کار می‌کند: پروکسی با IP خارجی به همراه تنظیمات صحیح Git به شما امکان می‌دهد توسعه کامل را انجام دهید — commit کنید، مخازن را کلون کنید، با GitHub Actions کار کنید و در پروژه‌های open-source شرکت کنید.

نکات کلیدی از مقاله:

  • برای کار روزمره پروکسی‌های مسکونی یا دیتاسنتری ثابت از اروپا را انتخاب کنید — IP پایدار بدون چرخش.
  • پروکسی را در پیکربندی Git تنظیم کنید، نه در سطح سیستم — این کنترل دقیقی بدون تأثیر بر کل ترافیک فراهم می‌کند.
  • اگر حساب قبلاً تحت نظر است — از IP‌های موبایل استفاده کنید، آنها تقریباً هرگز تحت مسدودسازی قرار نمی‌گیرند.
  • اگر حساب مسدود شده است — به [email protected] بنویسید، GitHub دسترسی را برای توسعه‌دهندگان فردی بازمی‌گرداند.
  • از SSH از طریق پورت 443 استفاده کنید (ssh.github.com) — این بیشتر مسدودسازی‌ها را در سطح ارائه‌دهنده دور می‌زند.

اگر به دنبال راه‌حل مطمئن برای کار دائمی با GitHub هستید، پیشنهاد می‌کنیم به پروکسی‌های مسکونی توجه کنید — آنها از IP‌های واقعی کاربران خانگی از کشورهای مجاز استفاده می‌کنند، حداقل توجه سیستم‌های حفاظتی را جلب می‌کنند و اتصال ثابتی برای عملیات Git فراهم می‌کنند. برای کارهای با بار بالا (کلون کردن مخازن بزرگ، پایپ‌لاین‌های CI/CD) یک جایگزین خوب پروکسی‌های دیتاسنتر هستند — آنها سریع‌تر و اقتصادی‌تر در کار با حجم‌های بزرگ داده هستند.

```