راهنمای پیکربندی SOCKS5: مرورگرها، SSH، curl، git و Python
یک راهنمای عملی پیکربندی SOCKS5 برای Firefox، macOS، Linux، فورواردینگ داینامیک SSH، curl، git و Python — شامل تمایز socks5 در مقابل socks5h که عامل بیشتر نشتهای جغرافیایی و DNS است.
جستوجو برای یک پیکربندیکننده SOCKS5 معمولاً به این معناست که از قبل یک هاست، یک پورت و احتمالاً یک نام کاربری و رمز عبور دارید — و میخواهید یک مرورگر، یک شل یا یک اسکریپت ترافیک را از طریق آن مسیریابی کند. هیچ پیکربندیکننده جهانی واحدی وجود ندارد، اما هر جایی که SOCKS5 را پیکربندی میکنید به همان چند مقدار یکسان نیاز دارد و رفتارهای عجیب آن قابل پیشبینی است. این راهنما تنظیماتی را پوشش میدهد که مردم واقعاً استفاده میکنند.
SOCKS5 در حدود ۶۰ ثانیه چیست
SOCKS5 (RFC 1928) یک پروتکل پروکسی در لایه انتقال است. کلاینت شما اتصالی به پروکسی باز میکند، از آن میخواهد به مقصدی برسد و سپس بایتها را در هر دو جهت بازپخش میکند. دو پیامد از این طراحی ناشی میشود:
- پروکسی پروتکلهای برنامه را تجزیه یا بازنویسی نمیکند، بنابراین ترافیک HTTPS، SSH و TCP دلخواه را بدون پیکربندی ویژه حمل میکند.
- SOCKS5 هیچ چیزی را رمزنگاری نمیکند. محرمانگی از پروتکل مقصد (HTTPS، SSH) یا از اجرای تونل روی یک انتقال رمزنگاریشده مانند SSH به دست میآید.
احراز هویت نام کاربری و رمز عبور برای SOCKS5 یک مشخصه جداگانه است، RFC 1929. پشتیبانی کلاینتها از آن متفاوت است و این تفاوت سهم بزرگی از مشکلات پیکربندی را ایجاد میکند.
مقادیری که پیش از شروع نیاز دارید
- هاست — نام میزبان یا نشانی IP پروکسی.
- پورت — پورت شنود که توسط ارائهدهنده یا تونل ارائه میشود.
- احراز هویت — نام کاربری و رمز عبور، قرار دادن IP در فهرست مجاز، یا هیچکدام.
- طرحواره — اینکه ابزار شما
socks5://یاsocks5h://را انتظار دارد.
socks5:// در مقابل socks5h:// و چرا DNS موقعیت جغرافیایی شما را تعیین میکند
| طرحواره | چه کسی DNS را حل میکند | ترافیک را رمزنگاری میکند | چه زمانی استفاده شود |
|---|---|---|---|
socks5:// |
دستگاه شما | خیر | حل DNS محلی قابل قبول است |
socks5h:// |
پروکسی | خیر | میخواهید جستوجوها و موقعیت جغرافیایی با پروکسی مطابقت داشته باشد |
پیشوند http:// |
دستگاه شما | خیر | از یک پروکسی HTTP استفاده میکنید، نه SOCKS |
پیشوند https:// |
دستگاه شما | TLS به پروکسی | ارائهدهنده یک نقطه پایانی پروکسی پوشیدهشده با TLS ارائه میدهد |
حرف h به این معناست که نام میزبان توسط پروکسی حل میشود. استفاده از socks5:// در حالی که socks5h:// را میخواستید، شایعترین علت پروکسیای است که کار میکند اما هنوز منطقه اشتباه را نشان میدهد و همچنین میتواند نام میزبانهایی را که بازدید میکنید در معرض حلکننده محلی شما قرار دهد. فقط برخی ابزارها — curl، git از طریق libcurl و کتابخانههای خاص Python — قرارداد socks5h را رعایت میکنند؛ برنامههای GUI معمولاً آن را بهصورت یک جعبه انتخاب نشان میدهند.
پیکربندی SOCKS5 در Firefox
Firefox آسانترین مرورگر رایج برای اشاره به یک پروکسی SOCKS5 است، زیرا تنظیمات پروکسی خودش را نگه میدارد و از سیستمعامل ارثبری نمیکند.
- Settings را باز کنید و Network Settings را جستوجو کنید، یا به Settings، سپس General و سپس Network Settings بروید.
- پیکربندی دستی پروکسی را انتخاب کنید.
- هاست و پورت را در فیلد SOCKS Host وارد کنید و SOCKS v5 را انتخاب کنید.
- اگر پروکسی باید نامهای میزبان را حل کند، Proxy DNS when using SOCKS v5 را تیک بزنید.
- فیلدهای پروکسی HTTP را خالی بگذارید مگر اینکه پروکسی HTTP هم داشته باشید.
- روی OK کلیک کنید، سپس صفحهای را بارگذاری کنید که نشانی IP شما را گزارش میدهد تا تغییر را تأیید کنید.
Chrome، Edge و سایر مرورگرهای Chromium
مرورگرهای مبتنی بر Chromium تنظیمات پروکسی سیستمعامل را میخوانند. برای آزمایش جداگانه، یکی را با یک فلگ و یک پروفایل موقت اجرا کنید:
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--proxy-server="socks5://127.0.0.1:1080" \
--user-data-dir=/tmp/chrome-socks-test
# Linux
google-chrome --proxy-server="socks5://127.0.0.1:1080" --user-data-dir=/tmp/chrome-socks-test
دو هشدار. --user-data-dir جداگانه تست را از پروفایل عادی شما جدا نگه میدارد، و فلگ جای مطمئنی برای اعتبارنامهها نیست — اگر پروکسی شما به احراز هویت نیاز دارد، آن را در تنظیمات سیستمعامل پیکربندی کنید یا بهجای جاسازی نام کاربری و رمز عبور در فلگ، از طریق یک فورواردر محلی مسیریابی کنید.
macOS: پیکربندی SOCKS5 از ترمینال
ابزار networksetup دقیقاً همان تنظیمی را مینویسد که پنل ترجیحات Network نشان میدهد.
# List available network services if you are unsure of the name
networksetup -listallnetworkservices
# Replace "Wi-Fi" with your active service name
sudo networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 1080
sudo networksetup -setsocksfirewallproxystate "Wi-Fi" on
# Turn it back off
sudo networksetup -setsocksfirewallproxystate "Wi-Fi" off
بسیاری از ابزارهای خط فرمان تنظیمات پروکسی سیستمی macOS را کاملاً نادیده میگیرند و به پیکربندی خودشان نیاز دارند، بنابراین فرض نکنید که با موفقیت این دستور، ترمینال هم پوشش داده شده است.
Linux و ابزارهای CLI: متغیرهای محیطی
export ALL_PROXY="socks5h://user:[email protected]:1080"
export all_proxy="$ALL_PROXY"
تعداد زیادی از ابزارهای خط فرمان ALL_PROXY یا نوع حروف کوچک آن را میخوانند. با env | grep -i proxy بررسی کنید چه چیزی تنظیم شده است. برنامههای گرافیکی در Linux عموماً بهجای این متغیرها از تنظیمات پروکسی محیط دسکتاپ پیروی میکنند، بنابراین هر دو مسیر را پیکربندی کنید یا برای باینریهای سرسخت از یک پوششدهنده مانند proxychains استفاده کنید.
SSH: سروری که کنترل میکنید را به یک پروکسی SOCKS5 تبدیل کنید
# -D enables dynamic (SOCKS) forwarding, -N runs no remote command, -C compresses
ssh -N -C -D 1080 [email protected]
# Add -f to push it into the background
ssh -f -N -C -D 1080 [email protected]
این اغلب سریعترین راه برای به دست آوردن یک نقطه پایانی SOCKS5 کارآمد است. نیازی به نصب چیزی روی سرور راه دور نیست، هیچ دسترسی ارتقایافتهای لازم نیست، و پرش بین دستگاه شما و سرور توسط SSH رمزنگاری میشود — که یکی از ضعفهای SOCKS5 را برطرف میکند. پس از برپا شدن تونل، مرورگر یا CLI خود را به 127.0.0.1:1080 اشاره دهید.
curl، git و Python
# Resolve DNS locally
curl --socks5 127.0.0.1:1080 https://api.ipify.org
# Resolve DNS at the proxy
curl --socks5-hostname 127.0.0.1:1080 https://api.ipify.org
# With username and password authentication
curl --socks5-hostname 127.0.0.1:1080 \
--proxy-user "USER:PASS" \
https://api.ipify.org
# Route git through a SOCKS5 proxy; git uses libcurl underneath
git config --global http.proxy socks5h://127.0.0.1:1080
git config --global https.proxy socks5h://127.0.0.1:1080
# Undo when you are finished
git config --global --unset http.proxy
git config --global --unset https.proxy
# Requires: pip install "requests[socks]"
import requests
proxies = {
"http": "socks5h://user:[email protected]:1080",
"https": "socks5h://user:[email protected]:1080",
}
response = requests.get("https://api.ipify.org", proxies=proxies, timeout=15)
print(response.status_code, response.text)
کتابخانه requests پیش از آنکه پروکسیهای SOCKS را بفهمد به وابستگی PySocks نیاز دارد. بدون آن، خطای وابستگیهای گمشده پیش از هر تلاش برای اتصال رخ میدهد که بهراحتی با خرابی پروکسی اشتباه گرفته میشود.
عیبیابی خرابیهایی که واقعاً با آنها روبهرو میشوید
| نشانه | علت احتمالی | راهحل |
|---|---|---|
| اتصال رد شد | هیچ چیزی روی آن پورت شنود نمیکند | پورت را تأیید کنید و اینکه پروکسی یا تونل SSH در حال اجراست |
| احراز هویت SOCKS5 ناموفق بود | اعتبارنامه اشتباه، یا پروکسی انتظار IP مجاز را دارد | اعتبارنامهها را دوباره بررسی کنید؛ اگر IP شما مجاز است آنها را حذف کنید |
| سایت هنوز منطقه اشتباه را نشان میدهد | DNS بهصورت محلی حل شده چون از socks5:// استفاده کردهاید |
به socks5h:// تغییر دهید یا DNS راه دور را فعال کنید |
| 407 Proxy Authentication Required | شما به یک پورت پروکسی HTTP اشاره کردهاید، نه SOCKS | فهرست پورتهای ارائهدهنده را بررسی کنید |
| در curl کار میکند، در مرورگر شکست میخورد | مرورگر از تنظیمات سیستم استفاده میکند، یا یک افزونه آنها را بازنویسی میکند | افزونههای پروکسی را غیرفعال کنید و تنظیمات سیستم را بررسی کنید |
| برنامههای UDP شکست میخورند | تداعی UDP در SOCKS5 بهندرت در سمت کلاینت پیادهسازی میشود | برای ترافیک UDP بهجای آن از VPN استفاده کنید |
پیش از اعتماد، تأیید کنید
# Compare the reported IP with and without the proxy
curl -sS https://api.ipify.org; echo
curl -sS --socks5-hostname 127.0.0.1:1080 https://api.ipify.org; echo
اگر هر دو نشانی یکسان باشند، ترافیک از پروکسی عبور نمیکند. وقتی دقت جغرافیایی مهم است، یک تست نشت DNS نیز در مرورگر اجرا کنید تا تأیید شود جستوجوها از طریق پروکسی خارج میشوند نه حلکننده محلی شما.
جمعبندی
یک پیکربندیکننده SOCKS5 در واقع فقط چهار مقدار است که در جای درست اعمال میشوند: هاست، پورت، اعتبارنامهها و تصمیمی درباره اینکه DNS کجا حل شود. مرورگر یا ابزار CLI را که واقعاً استفاده میکنید پیکربندی کنید، IP خروجی را با مقایسه curl بالا تأیید کنید، و هر زمان دقت جغرافیایی یا حریم خصوصی DNS مهم است، بهصورت پیشفرض از socks5h:// استفاده کنید.