Skip to content
Intermediate / 3 min read

چگونه پروکسی‌های IPRoyal Shadowsocks را در لینوکس برای ترافیک CLI و مرورگر متمرکز بر حریم خصوصی پیکربندی کنیم

IPRoyal Shadowsocks را روی لینوکس با shadowsocks-libev راه‌اندازی کنید، آن را به عنوان سرویس systemd اجرا کنید، IP خروجی خود را تأیید کنید، و ترافیک curl، Git، Python و مرورگر را از طریق یک پروکسی SOCKS5 محلی مسیردهی کنید.

لینوکس SOCKS5 Shadowsocks حریم خصوصی/ناشناسی

مرور کلی

Shadowsocks یک پروتکل پروکسی رمزنگاری‌شده مبتنی بر SOCKS5 است. در لینوکس، یک کلاینت محلی Shadowsocks روی 127.0.0.1:1080 گوش می‌دهد، ترافیک را رمزنگاری می‌کند و آن را به یک نقطه پایانی Shadowsocks راه دور ارسال می‌کند. این به شما اجازه می‌دهد ابزارهای CLI انتخاب‌شده، مرورگرها یا ترافیک سیستم را از طریق یک نقطه پایانی IPRoyal Shadowsocks مسیردهی کنید بدون تغییر کل پشته شبکه خود.

این آموزش نشان می‌دهد چگونه پروکسی‌های IPRoyal Shadowsocks را در لینوکس با استفاده از shadowsocks-libev پیکربندی کنید، کلاینت را به عنوان سرویس systemd اجرا کنید، IP خروجی خود را تأیید کنید، و ابزارهای رایج مانند curl، git، Python و Firefox را از طریق شنونده SOCKS5 محلی مسیردهی کنید. IPRoyal به عنوان ارائه‌دهنده مثال استفاده می‌شود زیرا پروکسی‌های مسکونی، ISP و دیتاسنتر را با پشتیبانی HTTP، SOCKS5 و Shadowsocks فهرست می‌کند. اگر از ارائه‌دهنده دیگری استفاده می‌کنید، اعتبارنامه‌ها و جزئیات سرور را با موارد خود جایگزین کنید.

پیش‌نیازها

  • یک توزیع لینوکس با systemd، مانند Ubuntu، Debian، Fedora، Arch Linux، یا یک سرور یا دسکتاپ سازگار.
  • دسترسی sudo یا root برای نصب و مدیریت سرویس.
  • یک حساب IPRoyal با اعتبارنامه‌های Shadowsocks: آدرس سرور، پورت سرور، رمز عبور، و روش رمزنگاری.
  • آشنایی اولیه با ترمینال و ویرایشگرهای متن مانند nano یا vim.
  • اختیاری: curl برای تست.

چگونه IPRoyal Shadowsocks در یک راه‌اندازی لینوکس قرار می‌گیرد

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

یک جریان معمولی:

  1. یک برنامه به 127.0.0.1:1080 متصل می‌شود.
  2. کلاینت محلی Shadowsocks درخواست را رمزنگاری می‌کند.
  3. درخواست رمزنگاری‌شده به نقطه پایانی IPRoyal Shadowsocks می‌رود.
  4. نقطه پایانی درخواست را به سایت مقصد ارسال می‌کند.
  5. پاسخ از طریق همان تونل بازمی‌گردد.

از آنجا که شنونده محلی SOCKS5 است، می‌توانید از آن با ابزارهایی که از SOCKS5 یا socks5h (SOCKS5 با حل DNS راه دور) پشتیبانی می‌کنند استفاده کنید. از socks5h استفاده کنید زمانی که می‌خواهید پرس‌وجوهای DNS از طریق پروکسی حل شوند نه روی دستگاه محلی شما.

مراحل

مرحله ۱: نصب یک کلاینت Shadowsocks در لینوکس

shadowsocks-libev را نصب کنید، که کلاینت ss-local را فراهم می‌کند و به خوبی با systemd کار می‌کند.

برای Debian یا Ubuntu:

sudo apt update
sudo apt install shadowsocks-libev

برای Fedora یا توزیع‌های خانواده RHEL:

sudo dnf install shadowsocks-libev

برای Arch Linux:

sudo pacman -S shadowsocks-libev

اگر توزیع شما shadowsocks-libev را بسته‌بندی نکرده است، می‌توانید shadowsocks-rust را از مدیر بسته خود نصب کنید یا آن را از منبع بسازید. مفاهیم پیکربندی زیر یکسان هستند، هرچند نام‌های باینری ممکن است متفاوت باشند.

مرحله ۲: ایجاد فایل محیطی IPRoyal Shadowsocks

یک فایل محیطی ایجاد کنید که حاوی جزئیات نقطه پایانی IPRoyal Shadowsocks باشد. مقادیر جانگهدار را با سرور، پورت، رمز عبور و روش دقیق از داشبورد IPRoyal خود جایگزین کنید.

sudo mkdir -p /etc/iproyal
sudo nano /etc/iproyal/shadowsocks.env

مقادیر زیر را اضافه کنید:

SS_SERVER=YOUR_IPROYAL_SERVER
SS_PORT=8388
SS_PASSWORD=YOUR_IPROYAL_PASSWORD
SS_METHOD=aes-256-gcm
SS_LOCAL_ADDRESS=127.0.0.1
SS_LOCAL_PORT=1080

نکات:

  • از روش رمزنگاری دقیقاً همانطور که توسط IPRoyal ارائه شده استفاده کنید. روش‌های رایج شامل aes-256-gcm، chacha20-ietf-poly1305 و aes-128-gcm هستند، اما نقطه پایانی باید از روشی که انتخاب می‌کنید پشتیبانی کند.
  • اگر IPRoyal یک نقطه پایانی SOCKS5 به جای نقطه پایانی Shadowsocks به شما می‌دهد، از پیکربندی کلاینت SOCKS5 یا ابزاری مانند ProxyChains به جای Shadowsocks استفاده کنید.
  • اگر فایل حاوی اعتبارنامه است، آن را فقط برای root قابل خواندن نگه دارید:
sudo chmod 600 /etc/iproyal/shadowsocks.env

مرحله ۳: تست پیکربندی در پیش‌زمینه

قبل از ایجاد سرویس، کلاینت را در پیش‌زمینه اجرا کنید تا تأیید کنید که اعتبارنامه‌ها و مسیر شبکه کار می‌کنند.

sudo ss-local -s YOUR_IPROYAL_SERVER -p 8388 -b 127.0.0.1 -l 1080 -k YOUR_IPROYAL_PASSWORD -m aes-256-gcm -u -v

آن ترمینال را باز بگذارید. در یک ترمینال دوم، شنونده SOCKS5 محلی را تست کنید:

curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me

اگر دستور یک آدرس IP برگرداند که با IP عمومی عادی شما متفاوت است، تونل کار می‌کند. برای توقف کلاینت پیش‌زمینه، Ctrl+C را در ترمینال اول فشار دهید.

مرحله ۴: اجرای کلاینت Shadowsocks به عنوان سرویس systemd

یک واحد systemd ایجاد کنید تا کلاینت در هنگام بوت شروع شود و پس از خرابی‌ها دوباره راه‌اندازی شود.

sudo nano /etc/systemd/system/iproyal-shadowsocks.service

اضافه کنید:

[Unit]
Description=IPRoyal Shadowsocks local client
After=network-online.target
Wants=network-online.target

[Service]
EnvironmentFile=/etc/iproyal/shadowsocks.env
ExecStart=/usr/bin/ss-local -s ${SS_SERVER} -p ${SS_PORT} -b ${SS_LOCAL_ADDRESS} -l ${SS_LOCAL_PORT} -k ${SS_PASSWORD} -m ${SS_METHOD} -u
Restart=on-failure
RestartSec=5
LimitNOFILE=32768

[Install]
WantedBy=multi-user.target

مسیر ExecStart را تنظیم کنید اگر باینری ss-local شما جای دیگری است. می‌توانید آن را با این دستور پیدا کنید:

command -v ss-local

اگر ارائه‌دهنده شما از رله UDP پشتیبانی نمی‌کند، -u را از خط ExecStart حذف کنید.

systemd را دوباره بارگذاری کنید و سرویس را شروع کنید:

sudo systemctl daemon-reload
sudo systemctl enable --now iproyal-shadowsocks
sudo systemctl status iproyal-shadowsocks

مرحله ۵: تأیید شنونده SOCKS5 محلی و IP خروجی

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

ss -ltnp | grep 1080

سپس IP خروجی را از طریق پروکسی تأیید کنید:

curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
curl --socks5-hostname 127.0.0.1:1080 https://ipinfo.io/ip

نتیجه را با اتصال مستقیم خود مقایسه کنید:

curl https://ifconfig.me

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

مرحله ۶: مسیردهی ابزارهای CLI از طریق پروکسی SOCKS5 محلی

از شنونده SOCKS5 محلی با ابزارهایی که از SOCKS5 پشتیبانی می‌کنند استفاده کنید. socks5h را ترجیح دهید تا حل DNS از طریق پروکسی انجام شود.

برای curl:

curl --socks5-hostname 127.0.0.1:1080 https://httpbin.org/ip

برای git:

git config --global http.proxy socks5h://127.0.0.1:1080
git config --global https.proxy socks5h://127.0.0.1:1080

برای حذف آن تنظیمات پروکسی Git بعداً:

git config --global --unset http.proxy
git config --global --unset https.proxy

برای Python requests، پشتیبانی SOCKS را نصب کنید و از پروکسی استفاده کنید:

python3 -m pip install 'requests[socks]'
import requests

proxies = {
    'http': 'socks5h://127.0.0.1:1080',
    'https': 'socks5h://127.0.0.1:1080',
}

response = requests.get('https://httpbin.org/ip', proxies=proxies, timeout=30)
print(response.json())

برای wget، از یک پوشش سازگار با SOCKS5 یا متغیرهای محیطی در جایی که پشتیبانی می‌شود استفاده کنید. curl و Python معمولاً کمابیش‌ترین رفتار مبهم را برای تست SOCKS5 ارائه می‌دهند.

مرحله ۷: پیکربندی پروکسی مرورگر یا دسکتاپ

برای Firefox، تنظیمات را باز کنید، Network Settings را جستجو کنید، Manual proxy configuration را انتخاب کنید و تنظیم کنید:

  • SOCKS Host: 127.0.0.1
  • Port: 1080
  • SOCKS v5: انتخاب شده
  • Proxy DNS when using SOCKS v5: فعال

برای محیط‌های دسکتاپ GNOME، می‌توانید پروکسی سیستم را به صورت دستی تنظیم کنید:

gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.socks host '127.0.0.1'
gsettings set org.gnome.system.proxy.socks port 1080

برای بازگشت به اتصال مستقیم:

gsettings set org.gnome.system.proxy mode 'none'

همه برنامه‌ها به تنظیمات پروکسی سیستم احترام نمی‌گذارند. در صورت شک، پروکسی را مستقیماً در برنامه پیکربندی کنید یا از یک پوشش آگاه به SOCKS5 استفاده کنید.

مرحله ۸: تأیید رفتار DNS و نشت

یک درخواست اجرا کنید که resolver و IP را گزارش دهد:

curl --socks5-hostname 127.0.0.1:1080 https://ipinfo.io/json

بررسی کنید که آیا IP گزارش‌شده متعلق به نقطه پایانی پروکسی است. از آنجا که socks5h نام میزبان را برای حل به پروکسی می‌فرستد، پرس‌وجوهای DNS محلی برای آن درخواست اجتناب می‌شوند. اگر به جای آن از socks5:// استفاده کنید، نام میزبان ممکن است ابتدا به صورت محلی حل شود، که می‌تواند اطلاعات DNS را نشت دهد.

عیب‌یابی

سرویس شروع می‌شود اما IP تغییر نمی‌کند

  • تأیید کنید که دستور تست شما از --socks5-hostname یا socks5h:// استفاده می‌کند، نه یک اتصال مستقیم.
  • لاگ‌های سرویس را بررسی کنید:
journalctl -u iproyal-shadowsocks -e
  • تأیید کنید که آدرس سرور، پورت، رمز عبور و روش رمزنگاری دقیقاً با داشبورد IPRoyal مطابقت دارند.
  • با یک مقصد متفاوت مانند https://httpbin.org/ip تست کنید تا رفتار خاص سایت را رد کنید.

ss-local با خطای احراز هویت یا روش شکست می‌خورد

  • روش رمزنگاری باید با نقطه پایانی راه دور مطابقت داشته باشد. اگر IPRoyal chacha20-ietf-poly1305 را ارائه می‌دهد، از aes-256-gcm استفاده نکنید.
  • وجود فاصله‌های انتهایی یا کاراکترهای پنهان در فیلد رمز عبور را بررسی کنید.
  • اگر رمز عبور شما حاوی کاراکترهای خاص است، آن را به درستی در فایل محیطی نقل قول کنید یا از یک فایل پیکربندی که کلاینت شما پشتیبانی می‌کند استفاده کنید.
  • کلاینت را در حالت verbose اجرا کنید تا خطای دقیق را ببینید:
sudo ss-local -s YOUR_IPROYAL_SERVER -p 8388 -b 127.0.0.1 -l 1080 -k YOUR_IPROYAL_PASSWORD -m aes-256-gcm -u -v

اتصال در 127.0.0.1:1080 رد می‌شود

  • ممکن است سرویس دیگری از قبل از پورت 1080 استفاده کند. بررسی کنید با:
sudo ss -ltnp | grep 1080
  • SS_LOCAL_PORT را در فایل محیطی به مقدار دیگری مانند 1081 تغییر دهید، سرویس را دوباره راه‌اندازی کنید و دستورات کلاینت خود را به‌روزرسانی کنید.
  • تأیید کنید که سرویس systemd واقعاً در حال اجرا است:
systemctl is-active iproyal-shadowsocks

وقفه‌های زمانی یا توان عملیاتی پایین

  • اگر داشبورد شما چندین مکان را ارائه می‌دهد، یک نقطه پایانی یا منطقه IPRoyal متفاوت را امتحان کنید.
  • با حالت فقط TCP با حذف -u از خط ExecStart تست کنید اگر نقطه پایانی از UDP پشتیبانی نمی‌کند.
  • فایروال محلی و سیاست‌های شبکه خود را بررسی کنید. برخی شبکه‌های شرکتی یا دانشگاهی پورت‌های خروجی غیراستاندارد را مسدود می‌کنند.
  • مقادیر timeout را فقط برای تست کاهش دهید; timeoutهای بسیار کم می‌توانند باعث خرابی‌های کاذب در لینک‌های کند شوند.

ترافیک مرورگر از پروکسی استفاده نمی‌کند

  • در Firefox، مطمئن شوید که SOCKS v5 انتخاب شده و Proxy DNS when using SOCKS v5 فعال است.
  • اگر از تنظیمات GNOME استفاده می‌کنید، به یاد داشته باشید که فقط برخی برنامه‌ها به پروکسی سیستم احترام می‌گذارند.
  • همان مقصد را با curl --socks5-hostname تست کنید تا تأیید کنید شنونده SOCKS5 محلی مستقل از مرورگر کار می‌کند.

خلاصه

شما یک نقطه پایانی IPRoyal Shadowsocks را در لینوکس پیکربندی کردید با نصب shadowsocks-libev، ایجاد یک پیکربندی کلاینت محلی، اجرای آن به عنوان سرویس systemd، و تأیید IP خروجی از طریق یک شنونده SOCKS5 محلی. همچنین یاد گرفتید چگونه ترافیک curl، Git، Python requests و مرورگر را از طریق 127.0.0.1:1080 مسیردهی کنید، و چگونه مشکلات رایج احراز هویت، پورت، DNS و timeout را عیب‌یابی کنید. IPRoyal یکی از ارائه‌دهندگانی است که می‌توانید در نظر بگیرید زمانی که به پروکسی‌های مسکونی، ISP یا دیتاسنتر با پشتیبانی SOCKS5 و سبک Shadowsocks نیاز دارید; همیشه قبل از پیکربندی کلاینت‌ها، پروتکل و اعتبارنامه‌های دقیق را در داشبورد ارائه‌دهنده خود تأیید کنید.