دور زدن تحریم‌ها و دسترسی به GitLab از داخل ایران

متاسفانه اخیرا سرویس محبوب GitLab به سرورهای گوگل منتقل شده است و امکان دسترسی مستقیم به مخازن قرار گرفته بر روی آن برای برنامه‌نویسان ایرانی ممکن نیست.

در صورتی که در دسترسی به این سرویس مشکل دارید، این مطلب برای شماست. این مقاله شامل راه‌حل‌هایی کاربردی برای دسترسی به GitLab است که تابحال توسط سایر دوستان مطرح شده و در ادامه آن راه‌حل پیشنهادی و مورد استفاده خودم را نیز بیان می‌کنم.

در همین ابتدا ذکر این نکته خالی از لطف نیست که راه‌های زیادی برای عبور از محدودیت و عبور همه ترافیک سیستم از یک سرور واسط وجود دارد که موضوع بحث ما نیست. در این مقاله تمرکز فقط بر روی عبور دادن ترافیک و داده‌های مربوط به Git از یک سرور واسط است.

راه‌حل ۱: تنظیم سرور http واسط بر روی Git

نرم‌افزار Git بدون نیاز به هیچ ابزار جانبی، امکان استفاده از یک سرور http واسط را جهت عبور دادن اطلاعات و ارتباط با سرورهای اصلی دارد.

با وارد کردن کامند زیر در ترمینال می‌توان با تعیین آدرس آی‌پی و پورت سرور http واسط، از این قابلیت استفاده کرد.

git config --global http.proxy http://username:password@server-ip:port

پیدا کردن سرور واسط جهت رد کردن ترافیک و دسترسی GitLab کار مشکلی نیست و سرویس‌های نظیر FOD به صورت رایگان این خدمات را ارائه می‌کنند.

البته در صورت تمایل می‌توان با استفاده از پروژه‌هایی مانند proxy-chain سرویس واسط اختصاصی جهت عبور دادن ترافیک Git راه‌اندازی کرد.

نقاط قوت

  • با بکارگیری این روش تنها ترافیک Git از سرور واسط عبور می‌کند.
  • با تعیین تنظیمات محلی بر روی هر پروژه Git می‌توان ترافیک پروژه‌های دلخواه را از این طریق به GitLab ارسال کرد.

نقاط ضعف

  • مخزن محلی باید با آدرس‌هایی از نوع http به مخزن اصلی متصل باشد؛ این روش راه‌حلی جهت تبادل اطلاعات با مخزن اصلی از طریق آدرس‌های ssh ارائه نمی‌کند.

راه‌حل ۲: استفاده از SSH Tunnel و تنظیم سرور http واسط بر روی Git

در صورتی که به یک سرور لینوکسی در خارج از ایران دسترسی SSH داشته باشید با استفاده از کامند زیر یک ارتباط امن بین سیستم شما و سرور برقرار خواهد شد:

ssh username@server-ip -p server-port-number -D local-port-number
# ssh root@example.com -p 15222 -D 5555

در صورت تمایل می‌توان سویچ‌های C- برای فشرده‌سازی، q- برای عدم نمایش هشدارها و پیام‌ها، N- برای اعلام عدم نیاز به اجرای دستورات و کامند بر روی سرور و f- برای انتقال پروسه به بکگراند را به دستور بالا اضافه کنیم. در اینصورت دستور بالا به شکل زیر خواهد شد:

ssh username@server-ip -p server-port-number -D local-port-number -C -q -N -f -g
# ssh root@example.com -p 15222 -D 5555 -C -q -N -f -g

این دستور، پورت 5555 را بر روی سیستم شما باز می‌کند و کافی‌ست که Git را با دستور زیر برای عبور دادن ترافیک از پورت مورد نظر مطلع سازید:

git config --global http.proxy 'socks5://127.0.0.1:5555'

توجه داشته باشید که در هنگام ارتباط و تبادل اطلاعات بین مخزن محلی به مخزن اصلی، باید ارتباط SSH برقرار و پورت 5555 بر روی سیستم شما باز باشد.

نقاط قوت

  • با بکارگیری این روش تنها ترافیک Git از سرور واسط عبور می‌کند.
  • با تعیین تنظیمات محلی بر روی هر پروژه Git می‌توان ترافیک پروژه‌های دلخواه را از این طریق به GitLab ارسال کرد.

نقاط ضعف

  • دسترسی به سرور لینوکسی در خارج از کشور مورد نیاز است.
  • مخزن محلی باید با آدرس‌هایی از نوع http به مخزن اصلی متصل باشد؛ این روش راه‌حلی جهت تبادل اطلاعات با مخزن اصلی از طریق آدرس‌های ssh ارائه نمی‌کند.

راه‌حل ۳ (پیشنهاد من): استفاده از SSH Tunnel و دستور proxychains

برنامه proxychains امکان عبور دادن ترافیک سایر برنامه‌ها را از سرورهای واسط تعیین شده در فایل تنظیمات فراهم می‌کند.

جهت استفاده از این برنامه کافی‌ست که در ترمینال و قبل از دستورات اصلی، عبارت proxychains را قرار دهیم تا تمامی درخواست‌های شبکه که در حین اجرای این دستورات مطرح می‌شوند، به کمک این برنامه از سرورهای واسط مدنظر عبور کنند.

برای شروع با اجرای دستور زیر در اوبونتو یا دستورات مشابه در سایر لینوکس‌ها، بسته مربوط به برنامه را نصب می‌کنیم:

sudo apt-get install proxychains

سپس به روش ذکر شده در «راه‌حل ۲» یک SSH Tunnel ایجاد کرده و با دستور زیر فایل تنظیمات proxychains را باز می‌کنیم:

vi /etc/proxychains.conf

در بخش [ProxyList] معمولا تعدادی تنظیم پیش‌فرض وجود دارد که بهتر است آن‌ها را حذف کنید. حال کافی‌ست با قرار دادن عبارت زیر، واسط مورد نظر را به proxychains معرفی کنید:

socks5 127.0.0.1 5555

فایل تنظیمات ذخیره کنید و از آن خارج شوید.

از این پس برای ایجاد ارتباط بین مخزن محلی و مخزن GitLab کافی‌ست که دستور proxychains را در ابتدای دستورات Git ذکر کنیم. به عنوان مثال:

proxychains git push origin master
proxychains git pull origin master

با قرار گرفتن دستور proxychains در ابتدای دستورات Git، مخازن محلی پروژه به راحتی به مخازن موجود بر روی GitLab متصل خواهند شد.

نقاط قوت

  • این روش برای همه نوع مخزن کار می‌کند و فرقی نمی‌کند که آدرس مخزن از نوع ssh یا http باشد.
  • تنها ترافیک دستوراتی از Git که قبل از آن عبارت proxychains قرار گرفته است، از سرور واسط عبور می‌کند.
  • نیازی به اعمال تنظیمات اضافی در Git وجود ندارد.

نقاط ضعف

  • دسترسی به سرور لینوکسی خارج از کشور مورد نیاز است.

جمع‌بندی

با توجه به نقاط قوت و نقاط ضعف مطرح شده و در صورت دسترسی به سرور مناسب، برای دسترسی به سرویس GitLab «راه‌حل ۳» را پیشنهاد می‌کنم.

آیا شما برای دسترسی به اینگونه سرویس‌ها، راه‌حل مناسب دیگری را سراغ دارید؟! لطفا آن را به اشتراک بگذارید تا جهت سهولت دسترسی سایرین، در ادامه مقاله ذکر شود.

از توجه شما ممنونم :)