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

پروکسی برای توسعه‌دهندگان ایرانی: چگونه در سال 2024 به GitHub، npm و PyPI تحت تحریم‌ها دسترسی پیدا کنیم

توسعه‌دهندگان ایرانی با مسدودیت‌های GitHub، npm و PyPI به دلیل تحریم‌ها مواجه هستند. در این مقاله توضیح می‌دهیم که چگونه می‌توان از طریق پروکسی محدودیت‌ها را دور زد و به کار خود بدون وقفه ادامه داد.

📅۱۹ تیر ۱۴۰۵
```html

توسعه‌دهندگان ایرانی به طور مداوم با محدودیت‌های سختی مواجه هستند: GitHub حساب‌ها را مسدود می‌کند، بسته‌های npm نصب نمی‌شوند، PyPI خطای اتصال می‌دهد. همه این‌ها عواقب تحریم‌ها هستند که کشورهای کامل را از زیرساخت‌های پایه‌ای توسعه قطع می‌کنند. اگر شما از ایران کار می‌کنید یا متخصصان ایرانی را استخدام می‌کنید، این مقاله به شما یک راه‌حل مشخص می‌دهد — بدون آب و تئوری.

چه چیزی مسدود می‌شود و چرا

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

  • GitHub — حساب‌ها را مسدود می‌کند، مخازن غیرقابل دسترسی می‌شوند، Actions اجرا نمی‌شوند، Copilot کار نمی‌کند.
  • npm (npmjs.com) — هنگام تلاش برای نصب بسته‌ها از طریق npm install خطاهای اتصال یا رد دسترسی واضحی رخ می‌دهد.
  • PyPI (pypi.org)pip install متوقف می‌شود یا خطای 403 برمی‌گرداند.
  • Docker Hub — کشیدن تصاویر مسدود شده است.
  • Cloudflare، AWS، Azure، Google Cloud — بخشی از خدمات غیرقابل دسترسی یا ناپایدار کار می‌کند.
  • Stack Overflow، JetBrains، VS Code Marketplace — مسدودیت‌های دوره‌ای در سطح IP.

مسدودیت در سطح آدرس IP رخ می‌دهد: اگر IP شما متعلق به یک ارائه‌دهنده ایرانی باشد (شماره‌های AS IRANCELL، Shatel، MCI و دیگران)، درخواست به طور خودکار قبل از بررسی حساب رد می‌شود. به همین دلیل، VPN یا پروکسی با IP از کشور دیگر یک دور زدن نیست، بلکه تنها راهکار عملی برای دسترسی به زیرساخت‌های توسعه است.

مهم است که درک کنید:

پروکسی و VPN مشکلات را در سطوح مختلف حل می‌کنند. VPN تمام ترافیک سیستم را هدایت می‌کند — این برای مرورگر راحت است، اما برای ابزارهای خط فرمان (git، npm، pip) که نیاز به تنظیم دقیق دارند، مناسب نیست. پروکسی به شما این امکان را می‌دهد که دور زدن تحریم‌ها را فقط برای ابزار خاصی تنظیم کنید، بدون اینکه ترافیک دیگر را تحت تأثیر قرار دهید.

کدام نوع پروکسی برای توسعه مناسب است

برای وظایف توسعه‌دهنده — کار با مخازن، نصب بسته‌ها، CI/CD — پایداری اتصال، سرعت و پاکی IP مهم است. سه نوع اصلی پروکسی را بررسی می‌کنیم و اینکه چگونه آنها به سناریوهای خاص می‌خورند.

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

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

پروکسی‌های مرکز داده

پروکسی‌های مرکز داده سریع و ارزان هستند. آنها برای نصب بسته‌ها از طریق npm و pip مناسب هستند: PyPI و npmjs.com به اندازه GitHub شهرت IP را به شدت بررسی نمی‌کنند. اگر شما فقط نیاز به دانلود وابستگی‌ها در یک خط لوله CI/CD دارید، پروکسی مرکز داده کار را انجام می‌دهد و ارزان‌تر خواهد بود.

پروکسی‌های موبایل

پروکسی‌های موبایل از IP‌های اپراتورهای موبایل (4G/5G) استفاده می‌کنند. این نوع IP از نظر سیستم‌های ضد تقلب "پاک‌ترین" نوع است: پشت یک IP موبایل به طور همزمان هزاران کاربر واقعی وجود دارند، بنابراین مسدود کردن آن به صرفه نیست. پروکسی‌های موبایل زمانی کاربردی هستند که شما قبلاً با مشکلات مسدود شدن حساب GitHub مواجه شده‌اید و می‌خواهید ریسک مسدود شدن دوباره را به حداقل برسانید.

تنظیم پروکسی برای GitHub

GitHub از دو پروتکل برای کار با مخازن استفاده می‌کند: HTTPS و SSH. تنظیم پروکسی برای هر یک به طور متفاوتی انجام می‌شود. هر دو گزینه را بررسی می‌کنیم.

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

این رایج‌ترین روش کار با GitHub است. تنظیمات از طریق پیکربندی git انجام می‌شود. ترمینال را باز کنید و دستور زیر را اجرا کنید:

# تنظیم پروکسی HTTP برای git (host، port، user، password را با داده‌های خود جایگزین کنید)
git config --global http.proxy http://user:password@proxy-host:port
git config --global https.proxy http://user:password@proxy-host:port

# بررسی تنظیمات
git config --global --get http.proxy

# اگر پروکسی بدون احراز هویت باشد:
git config --global http.proxy http://proxy-host:port

پس از این تنظیم، تمام دستورات git clone، git push، git pull از طریق پروکسی انجام خواهند شد. اگر نیاز دارید پروکسی را فقط برای GitHub تنظیم کنید، نه برای تمام مخازن:

# پروکسی فقط برای github.com
git config --global http.https://github.com.proxy http://user:password@proxy-host:port

پروکسی برای git از طریق SSH

اتصال SSH به GitHub از طریق پورت 22 (یا 443 به عنوان جایگزین) کار می‌کند. برای پروکسی کردن ترافیک SSH از ابزار nc (netcat) یا connect استفاده می‌شود. فایل ~/.ssh/config را ویرایش کنید:

Host github.com
  HostName github.com
  User git
  ProxyCommand nc -X connect -x proxy-host:port %h %p
  # یا برای SOCKS5:
  # ProxyCommand nc -X 5 -x proxy-host:port %h %p

اگر شما از Windows استفاده می‌کنید، به جای nc می‌توانید از connect.exe استفاده کنید یا ProxyCommand را از طریق PuTTY تنظیم کنید. در macOS و Linux معمولاً netcat از قبل نصب شده است.

تنظیم متغیرهای محیطی

روش جایگزین — متغیرهای محیطی. آنها نه تنها برای git، بلکه برای بسیاری از ابزارهای خط فرمان دیگر کار می‌کنند:

# Linux / macOS — به ~/.bashrc یا ~/.zshrc اضافه کنید
export HTTP_PROXY="http://user:password@proxy-host:port"
export HTTPS_PROXY="http://user:password@proxy-host:port"
export NO_PROXY="localhost,127.0.0.1"

# Windows (PowerShell)
$env:HTTP_PROXY = "http://user:password@proxy-host:port"
$env:HTTPS_PROXY = "http://user:password@proxy-host:port"

تنظیم پروکسی برای npm و Node.js

npm از پروکسی پشتیبانی داخلی برخوردار است. تنظیم آن فقط یک دستور طول می‌کشد و بلافاصله برای تمام عملیات نصب بسته‌ها اعمال می‌شود. این موضوع به ویژه برای توسعه‌دهندگان ایرانی که با استک JavaScript/TypeScript کار می‌کنند مهم است: React، Vue، Angular، Next.js — همه آنها به طور فعال از npmjs.com استفاده می‌کنند.

# تنظیم پروکسی برای npm
npm config set proxy http://user:password@proxy-host:port
npm config set https-proxy http://user:password@proxy-host:port

# بررسی پیکربندی فعلی
npm config get proxy
npm config get https-proxy

# غیرفعال کردن پروکسی (اگر نیاز به بازگشت به اتصال مستقیم دارید)
npm config delete proxy
npm config delete https-proxy

تنظیمات در فایل ~/.npmrc ذخیره می‌شوند. شما همچنین می‌توانید این فایل را به طور مستقیم ویرایش کنید:

# محتوای ~/.npmrc
proxy=http://user:password@proxy-host:port
https-proxy=http://user:password@proxy-host:port
strict-ssl=false

Yarn و pnpm

اگر شما از Yarn یا pnpm استفاده می‌کنید، تنظیم مشابه است:

# Yarn v1
yarn config set proxy http://user:password@proxy-host:port
yarn config set https-proxy http://user:password@proxy-host:port

# Yarn v2/v3 (Berry) — فایل .yarnrc.yml را ویرایش کنید
# httpProxy: "http://user:password@proxy-host:port"
# httpsProxy: "http://user:password@proxy-host:port"

# pnpm
pnpm config set proxy http://user:password@proxy-host:port
pnpm config set https-proxy http://user:password@proxy-host:port

نکته برای CI/CD:

اگر شما از GitHub Actions، GitLab CI یا سیستم دیگری استفاده می‌کنید، متغیرهای HTTP_PROXY و HTTPS_PROXY را به اسرار پروژه اضافه کنید. این به تمام مراحل خط لوله اجازه می‌دهد که به طور خودکار از پروکسی استفاده کنند.

تنظیم پروکسی برای PyPI و pip

توسعه‌دهندگان Python از ایران به ویژه با مسدودیت PyPI مواجه هستند: pip از HTTPS برای بارگذاری بسته‌ها استفاده می‌کند و اگر IP مسدود شده باشد، نصب به سادگی متوقف می‌شود یا خطا می‌دهد. چندین روش برای تنظیم پروکسی برای pip وجود دارد.

روش 1: پرچم --proxy هنگام نصب

# نصب یکباره از طریق پروکسی
pip install requests --proxy http://user:password@proxy-host:port

# برای pip3
pip3 install django --proxy http://user:password@proxy-host:port

روش 2: فایل پیکربندی pip.conf

برای اینکه مجبور نباشید هر بار پروکسی را مشخص کنید، تنظیمات را به فایل پیکربندی pip اضافه کنید:

# Linux/macOS: ~/.config/pip/pip.conf
# Windows: %APPDATA%\pip\pip.ini

[global]
proxy = http://user:password@proxy-host:port
trusted-host = pypi.org
               pypi.python.org
               files.pythonhosted.org

روش 3: متغیرهای محیطی

# pip به طور خودکار متغیرهای محیطی استاندارد را می‌گیرد
export HTTP_PROXY="http://user:password@proxy-host:port"
export HTTPS_PROXY="http://user:password@proxy-host:port"

# پس از این، pip install معمولی از طریق پروکسی کار می‌کند
pip install numpy pandas scikit-learn

Poetry و Conda

اگر شما از Poetry برای مدیریت وابستگی‌ها استفاده می‌کنید، تنظیم پروکسی از طریق متغیرهای محیطی انجام می‌شود — Poetry به طور خودکار HTTP_PROXY و HTTPS_PROXY را می‌گیرد. برای Conda، به فایل ~/.condarc اضافه کنید:

# ~/.condarc
proxy_servers:
  http: http://user:password@proxy-host:port
  https: http://user:password@proxy-host:port

ابزارهای دیگر توسعه‌دهنده: Docker، Composer، Maven

مسدودیت‌ها فقط GitHub، npm و PyPI را تحت تأثیر قرار نمی‌دهند. تنظیم پروکسی برای سایر ابزارهای محبوب توسعه که ممکن است از ایران غیرقابل دسترسی باشند را بررسی می‌کنیم.

Docker

Docker Hub برای IP‌های ایرانی مسدود شده است. برای انجام docker pull، پروکسی را در پیکربندی Docker daemon تنظیم کنید:

# Linux: فایل /etc/docker/daemon.json را ایجاد یا ویرایش کنید
{
  "proxies": {
    "http-proxy": "http://user:password@proxy-host:port",
    "https-proxy": "http://user:password@proxy-host:port",
    "no-proxy": "localhost,127.0.0.1"
  }
}

# Docker را دوباره راه‌اندازی کنید
sudo systemctl restart docker

در macOS و Windows، تنظیم پروکسی برای Docker Desktop از طریق رابط گرافیکی انجام می‌شود: Settings → Resources → Proxies.

Composer (PHP)

# Composer از متغیرهای محیطی استفاده می‌کند
export HTTP_PROXY="http://user:password@proxy-host:port"
export HTTPS_PROXY="http://user:password@proxy-host:port"

# یا از طریق پیکربندی Composer
composer config --global http-basic.repo.packagist.org user password

Maven (Java)

<!-- ~/.m2/settings.xml -->
<settings>
  <proxies>
    <proxy>
      <id>my-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy-host</host>
      <port>port</port>
      <username>user</username>
      <password>password</password>
      <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
    </proxy>
  </proxies>
</settings>

ماژول‌های Go

# Go از GOPROXY برای بارگذاری ماژول‌ها استفاده می‌کند
# می‌توانید یک آینه مشخص کنید یا پروکسی سیستم را تنظیم کنید
export GOPROXY="https://goproxy.io,direct"
export HTTP_PROXY="http://user:password@proxy-host:port"
export HTTPS_PROXY="http://user:password@proxy-host:port"

امنیت: چگونه حساب خود را در GitHub از دست ندهید

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

قانون ثبات IP

از یک سرور پروکسی ثابت برای کار با GitHub استفاده کنید. اگر ارائه‌دهنده پروکسی شما IP را با هر اتصال تغییر دهد (پروکسی‌های چرخشی)، این ممکن است مشکوک به نظر برسد. برای GitHub بهترین گزینه پروکسی‌های ثابت هستند — یک IP که برای مدت طولانی برای شما اختصاص داده شده است.

  • پروکسی مسکونی ثابت — یک IP خانگی از ایالات متحده یا اروپا که برای شما اختصاص داده شده است. حداکثر اطمینان برای GitHub.
  • پروکسی چرخشی — برای npm/pip (بارگذاری بسته‌ها) مناسب است، اما برای ورود به حساب GitHub مناسب نیست.
  • اتصال مستقیم و پروکسی را مخلوط نکنید: یا همیشه از پروکسی استفاده کنید یا هرگز.

احراز هویت دو مرحله‌ای

2FA را در GitHub فعال کنید — این حساب شما را حتی اگر کسی اطلاعات شما را به دست آورد، محافظت می‌کند. از برنامه احراز هویت (Google Authenticator، Authy) استفاده کنید، نه SMS — SMS ممکن است از ایران در دسترس نباشد یا به طور غیرقابل اعتماد کار کند.

کلیدهای SSH به جای رمزهای عبور

برای کار با GitHub به جای احراز هویت HTTPS با رمز عبور، کلیدهای SSH را تنظیم کنید. کلیدهای SSH به دستگاه متصل هستند، نه به IP، بنابراین تغییر IP در هنگام استفاده از SSH برای سیستم امنیتی GitHub کمتر بحرانی است.

مقایسه انواع پروکسی برای توسعه‌دهندگان

بیایید نتیجه‌گیری کنیم به صورت جدول: کدام نوع پروکسی برای وظایف خاص توسعه‌دهنده ایرانی بهتر است.

وظیفه مسکونی مرکز داده موبایل
GitHub (حساب، push/pull) ✅ عالی ⚠️ ریسک مسدود شدن ✅ عالی
npm install (نصب بسته‌ها) ✅ خوب ✅ عالی ✅ خوب
pip install (PyPI) ✅ خوب ✅ عالی ✅ خوب
Docker Hub (کشیدن تصاویر) ✅ خوب ✅ خوب ⚠️ گران
خطوط لوله CI/CD (درخواست‌های انبوه) ⚠️ گران ✅ عالی ❌ مناسب نیست
سرعت اتصال متوسط بالا متوسط
ریسک مسدود شدن IP پایین متوسط بسیار پایین
هزینه متوسط پایین بالا

استراتژی پیشنهادی

نقشه بهینه برای توسعه‌دهنده:

  1. برای GitHub — پروکسی مسکونی ثابت از ایالات متحده یا آلمان. یک IP، همیشه یکسان.
  2. برای npm/pip/Docker — پروکسی مرکز داده با پهنای باند خوب. سرعت مهم‌تر از شهرت IP است.
  3. برای مرورگر و وب‌سرویس‌ها — همان پروکسی مسکونی یا یک پروکسی جداگانه.

پروتکل‌ها: HTTP در مقابل SOCKS5

بیشتر ابزارهای توسعه (git، npm، pip) از پروکسی HTTP/HTTPS پشتیبانی می‌کنند. SOCKS5 بیشتر عمومی است — این در سطح TCP کار می‌کند و برای هر پروتکلی مناسب است، از جمله SSH. اگر ارائه‌دهنده پروکسی شما از SOCKS5 پشتیبانی می‌کند، از آن برای اتصالات SSH به GitHub استفاده کنید. برای ترافیک HTTP (npm، pip) تقریباً هیچ تفاوتی وجود ندارد.

نتیجه‌گیری و توصیه‌ها

تحریم‌ها موانع واقعی برای توسعه‌دهندگان ایرانی ایجاد می‌کنند، اما آنها کار را غیرممکن نمی‌کنند. پروکسی به درستی تنظیم شده به شما این امکان را می‌دهد که به طور کامل با GitHub کار کنید، بسته‌ها را از طریق npm و pip نصب کنید، تصاویر را از Docker Hub بکشید — بدون از دست دادن حساب‌ها و بدون مسدودیت‌های مداوم.

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

  • برای کار با GitHub از پروکسی مسکونی ثابت استفاده کنید — یک IP دائمی از ایالات متحده یا اروپا.
  • برای نصب بسته‌ها (npm، pip، Composer) پروکسی‌های مرکز داده ارزان‌تر با سرعت خوب مناسب هستند.
  • پروکسی را در سطح ابزارها (git config، npm config، pip.conf) تنظیم کنید، نه فقط در سطح سیستم.
  • اتصال مستقیم و پروکسی را برای یک حساب GitHub مخلوط نکنید.
  • 2FA را فعال کنید و از کلیدهای SSH برای حداکثر امنیت حساب استفاده کنید.

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

```