ساخت یک پیکربندیکننده محلی SOCKS5 برای زنجیرهسازی و چرخش پروکسیهای ChangeMyIP (Windows، macOS، Linux)
هر برنامهای را به یک برنامه پروکسیشده تبدیل کنید: یک پیکربندیکننده محلی SOCKS5 را با gost اجرا کنید، دو نقطه پایانی ChangeMyIP را برای مسیریابی کشوری به کشوری زنجیره کنید، و بین گرههای مسکونی بچرخید.
مرور کلی
یک پیکربندیکننده SOCKS5 یک سرویس محلی کوچک است که روی یک پورت در دستگاه شما گوش میدهد و هر آنچه برنامههایتان از طریق آن ارسال میکنند را به یک پروکسی بالادستی، یا از طریق زنجیرهای از پروکسیها، هدایت میکند. این پاسخ عملی زمانی است که یک برنامه تنظیمات پروکسی خودش را ندارد، یا زمانی که میخواهید چندین برنامه نامرتبط یک پیکربندی پروکسی مشترک داشته باشند به جای ویرایش هر یک به صورت جداگانه.
در این آموزش شما آن پیکربندیکننده را با gost، یک ابزار پروکسی متنباز، میسازید و آن را به اندپوینتهای SOCKS5 ChangeMyIP اشاره میدهید. سپس یک هاپ دوم برای زنجیرهسازی کشور به کشور اضافه میکنید، بین چندین اندپوینت درون یک هاپ میچرخانید، اعتبارنامهها را از دید دور نگه میدارید، و شنونده را به صورت پایدار روی Windows، macOS و Linux اجرا میکنید.
هر ارائهدهنده SOCKS5 با پیکربندی زیر کار میکند. ChangeMyIP به عنوان مثال استفاده شده است زیرا SOCKS5 را روی اندپوینتهای دیتاسنتر اختصاصی و اشتراکی و همچنین اندپوینتهای مسکونی چرخشی ارائه میدهد، و زیرا صورتحساب ماهانه ثابت به این معنی است که یک شنونده محلی همیشهروشن هیچ هزینه اضافی به ازای هر درخواست ندارد.
پیشنیازها
- یک طرح ChangeMyIP که شامل دسترسی SOCKS5 باشد، به همراه میزبان، پورت، نام کاربری و رمز عبور اندپوینت شما از داشبورد.
- یک اندپوینت برای هر هاپی که قصد زنجیره کردن آن را دارید (زنجیرهسازی به دو اندپوینت مستقل نیاز دارد).
- مجوز اتصال یک شنونده روی
127.0.0.1:1080، یا هر پورت محلی آزاد. curlبرای تأیید.- راحتی اولیه در ویرایش یک فایل YAML.
چگونه پیکربندیکننده بین برنامههای شما و ChangeMyIP قرار میگیرد
مسیر ترافیک:
- یک برنامه یک اتصال SOCKS5 به
127.0.0.1:1080باز میکند. - پیکربندیکننده آن را میپذیرد و نشست را به اولین اندپوینت ChangeMyIP (هاپ ورودی) هدایت میکند.
- اگر هاپ دوم تعریف شده باشد، اندپوینت ورودی یک اتصال به اندپوینت خروجی باز میکند.
- اندپوینت خروجی درخواست خروجی را انجام میدهد و پاسخ از زنجیره به عقب برمیگردد.
آنچه این به شما میدهد:
- یک پورت محلی واحد که هر برنامهای میتواند از آن استفاده کند، از جمله برنامههایی که تنظیمات پروکسی داخلی ندارند.
- حل DNS از راه دور، بنابراین جستجوهای نام به حلکننده محلی شما نشت نمیکنند وقتی از طرح
socks5hاستفاده میکنید. - خروج قطعی: یک اندپوینت دیتاسنتر برای یک IP پایدار، یا یک اندپوینت مسکونی چرخشی زمانی که به تنوع IP نیاز دارید.
- مسیریابی زنجیرهای: ترافیک را مجبور کنید از یک جفت مکان خاص عبور کند با زنجیره کردن دو اندپوینت.
مراحل
۱. اندپوینتهای ChangeMyIP را که استفاده خواهید کرد طبقهبندی کنید. میزبان، پورت، نام کاربری و رمز عبور هر یک را کپی کنید، و توجه کنید که آیا یک اندپوینت دیتاسنتر اختصاصی است، یک اندپوینت دیتاسنتر اشتراکی، یا یک اندپوینت مسکونی چرخشی.
| نقش در پیکربندیکننده | نوع اندپوینت | زمان استفاده |
|---|---|---|
| هاپ ورودی | دیتاسنتر اختصاصی | پای اول سریع و پایدار؛ آن را نزدیک به منطقه خود نگه دارید تا تأخیر محدود شود |
| هاپ ورودی | مسکونی چرخشی | زمانی که پای اول نباید به یک زیرشبکه دیتاسنتر اشاره کند |
| هاپ خروجی | دیتاسنتر یا مسکونی در کشور هدف | زمانی که IP نهایی باید در یک کشور یا شهر خاص ظاهر شود |
| تک هاپ (بدون زنجیره) | هر کدام | مسیریابی روزمره که یک IP خروجی کافی است |
۲. gost را نصب کنید. بایگانی انتشار را برای سیستمعامل و معماری خود از صفحه انتشار رسمی gost دانلود کنید، سپس آن را استخراج کنید.
Windows (PowerShell):
Expand-Archive -Path .\gost_*_windows_amd64.zip -DestinationPath .\gost
.\gost\gost.exe -V
macOS و Linux (از بایگانی darwin یا linux و ساخت amd64 یا arm64 مربوطه استفاده کنید):
tar -xzf gost_*_linux_amd64.tar.gz
sudo install -m 0755 gost /usr/local/bin/gost
gost -V
۳. پیکربندی پیکربندیکننده را برای یک هاپ واحد ایجاد کنید. آن را به عنوان gost.yaml ذخیره کنید و محدودش کنید، زیرا حاوی اعتبارنامه است.
chmod 600 gost.yaml
services:
- name: socks-in
addr: "127.0.0.1:1080"
handler:
type: socks5
chain: cmi-single
listener:
type: tcp
chains:
- name: cmi-single
hops:
- name: hop-exit
nodes:
- name: exit-dc
addr: proxy-host.example:1080
connector:
type: socks5
auth:
username: YOUR_USERNAME
password: YOUR_PASSWORD
proxy-host.example:1080 را با اندپوینت داشبورد ChangeMyIP خود جایگزین کنید و اعتبارنامههای صادرشده با طرح خود را پر کنید.
۴. شنونده را راهاندازی کنید و آن را آزمایش دودی کنید.
gost -C gost.yaml
در یک ترمینال دوم، تأیید کنید که IP خروجی متعلق به پروکسی است و نه شما:
curl --silent --show-error --proxy socks5h://127.0.0.1:1080 https://api.ipify.org
echo
curl --silent https://api.ipify.org
echo
درخواست اول باید آدرس اندپوینت ChangeMyIP را گزارش دهد؛ دومی اتصال خود شما را گزارش میدهد.
۵. یک هاپ دوم برای زنجیره کردن دو مکان اضافه کنید. درخواست از برنامه، سپس اندپوینت ورودی، سپس اندپوینت خروجی، و سپس سایت هدف عبور میکند. سایت آدرس اندپوینت خروجی را میبیند؛ اندپوینت خروجی اندپوینت ورودی را به عنوان مشتری خود میبیند.
services:
- name: socks-in
addr: "127.0.0.1:1080"
handler:
type: socks5
chain: cmi-two-hop
listener:
type: tcp
chains:
- name: cmi-two-hop
hops:
- name: hop-entry
nodes:
- name: entry-de
addr: entry-host.example:1080
connector:
type: socks5
auth:
username: YOUR_USERNAME
password: YOUR_PASSWORD
- name: hop-exit
nodes:
- name: exit-us
addr: exit-host.example:1080
connector:
type: socks5
auth:
username: YOUR_USERNAME
password: YOUR_PASSWORD
۶. با استفاده از یک انتخابگر، بین اندپوینتها درون یک هاپ بچرخانید. اینگونه ترافیک را روی چندین آدرس متمایز پخش میکنید به جای اینکه به یک گره بچسبانید.
- name: hop-exit
selector:
strategy: round
maxFails: 1
failTimeout: 30s
nodes:
- name: exit-us-1
addr: exit-us-1.example:1080
connector:
type: socks5
auth:
username: YOUR_USERNAME
password: YOUR_PASSWORD
- name: exit-us-2
addr: exit-us-2.example:1080
connector:
type: socks5
auth:
username: YOUR_USERNAME
password: YOUR_PASSWORD
- name: exit-us-3
addr: exit-us-3.example:1080
connector:
type: socks5
auth:
username: YOUR_USERNAME
password: YOUR_PASSWORD
اگر ترجیح میدهید خودتان آدرسها را لیست نکنید، هاپ را به یک اندپوینت مسکونی چرخشی واحد اشاره دهید: ChangeMyIP IP را از طرف خودش میچرخاند، و پیکربندیکننده فقط به یک گره نیاز دارد. این مجموعه بیش از ۴۰ کشور، ۳۰۰ شهر و ۱۰۰۰ زیرشبکه را پوشش میدهد، بنابراین میتوانید چرخش را روی بسیاری از شبکههای متمایز پخش کنید زمانی که یک کار به نظر رسیدن مثل بازدیدکنندگان نامرتبط بستگی دارد.
۷. برنامههای خود را به شنونده محلی اشاره دهید. تنظیمات پروکسی مرورگر یک میزبان SOCKS5 با 127.0.0.1 و پورت 1080 میگیرد، با DNS از راه دور فعال تا نامها توسط پروکسی حل شوند. ابزارهای خط فرمان معمولاً یک فلگ یا یک متغیر محیطی را میپذیرند:
export ALL_PROXY=socks5h://127.0.0.1:1080
export HTTPS_PROXY=socks5h://127.0.0.1:1080
برخی ابزارها این متغیرها را نادیده میگیرند و به یک فلگ صریح نیاز دارند، مثلاً curl --proxy socks5h://127.0.0.1:1080. همیشه برای هر چیز حساس به حریم خصوصی، طرح socks5h را به socks5 ترجیح دهید.
۸. پیکربندیکننده را در حال اجرا نگه دارید. در لینوکس، یک واحد systemd تمیزترین گزینه است:
[Unit]
Description=Local SOCKS5 configurator (gost)
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/gost -C /etc/gost/gost.yaml
Restart=on-failure
User=proxyuser
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
sudo install -m 0600 gost.yaml /etc/gost/gost.yaml
sudo systemctl daemon-reload
sudo systemctl enable --now gost
systemctl status gost
در Windows، یک وظیفه در Task Scheduler ایجاد کنید که gost.exe -C C:\gost\gost.yaml را هنگام ورود اجرا کند و آن را طوری تنظیم کنید که چه کاربر وارد شده باشد چه نه اجرا شود. در macOS، همان دستور را هنگام تست از یک ترمینال اجرا کنید، سپس آن را در یک LaunchAgent بپیچید تا هنگام ورود شروع شود.
تأیید زنجیره و رفتار DNS
یک درخواست را در یک حلقه تکرار کنید تا ببینید آیا چرخش واقعاً اتفاق میافتد:
for i in 1 2 3; do
curl --silent --proxy socks5h://127.0.0.1:1080 https://api.ipify.org
echo
done
مکان گزارششده آدرس خروجی را بررسی کنید:
curl --silent --proxy socks5h://127.0.0.1:1080 https://ifconfig.co/json
- یک هاپ واحد آدرس آن اندپوینت را برمیگرداند. یک زنجیره دو هاپی آدرس اندپوینت خروجی را برمیگرداند، هرگز آدرس ورودی را. اگر آدرس ورودی را دیدید، زنجیره اعمال نمیشود.
- طرح
socks5hاز پروکسی میخواهد نامهای میزبان را حل کند.socks5://ساده به صورت محلی حل میکند، که میتواند حلکننده و مکان تقریبی شما را نشت دهد حتی اگر خود ترافیک پروکسی شده باشد. - اگر هر درخواست با یک انتخابگر پیکربندیشده همان آدرس را برمیگرداند، بررسی کنید که
maxFailsوfailTimeoutگرهها را حذف نکنند، و خود اندپوینت یک آدرس دیتاسنتر چسبنده نباشد.
عیبیابی
| نشانه | علت احتمالی | راهحل |
|---|---|---|
Failed to connect to 127.0.0.1 port 1080 |
شنونده در حال اجرا نیست، یا به پورت دیگری متصل شده | gost -C gost.yaml را اجرا کنید و مقدار addr را در پیکربندی بررسی کنید |
| شکست احراز هویت SOCKS5 | نام کاربری، رمز عبور، یا میزبان اندپوینت اشتباه | اعتبارنامهها را از داشبورد دوباره کپی کنید و اندپوینت را مستقیماً با curl تست کنید |
| هر درخواست timeout میشود | فایروال دسترسی خروجی به پورت اندپوینت را مسدود میکند، یا IP مبدأ شما مجاز نیست | اندپوینت خام را بدون پیکربندیکننده تست کنید، سپس اتصال را در فایروال خود مجاز کنید |
| IP گزارششده خود شماست | برنامه شنونده را دور میزند، یا شما از socks5:// به جای socks5h:// استفاده کردهاید |
برنامه را به 127.0.0.1:1080 اشاره دهید و طرح را به socks5h تغییر دهید |
| IP هرگز تغییر نمیکند | یک گره واحد بدون انتخابگر، یا یک اندپوینت دیتاسنتر چسبنده | یک انتخابگر با چندین گره اضافه کنید، یا هاپ را به یک اندپوینت مسکونی چرخشی منتقل کنید |
| زنجیرهسازی کار میکند اما کند است | دو هاپ زمان رفت و برگشت را دو برابر میکند | به یک هاپ کاهش دهید، یا هاپ ورودی را نزدیکتر به منطقه خود قرار دهید |
| ویرایشهای پیکربندی تأثیری ندارند | یک فرایند قدیمی هنوز در حال اجراست | سرویس را با systemctl restart gost دوباره راهاندازی کنید، یا فرایند ترمینال را متوقف و دوباره شروع کنید |
خلاصه
- یک پیکربندیکننده محلی SOCKS5، که اینجا با gost ساخته شده، به هر برنامهای روی دستگاه یک اندپوینت پروکسی در
127.0.0.1:1080میدهد، چه برنامه از پروکسی پشتیبانی کند چه نه. - یک هاپ خروج پایدار به شما میدهد؛ دو هاپ مسیریابی کشور به کشور به شما میدهد، با آدرس اندپوینت خروجی که سایتها میبینند.
- انتخابگرها بین چندین اندپوینت درون یک هاپ میچرخند، در حالی که یک اندپوینت مسکونی چرخشی چرخش را از طرف ارائهدهنده انجام میدهد.
- از طرح
socks5hاستفاده کنید تا DNS توسط پروکسی حل شود، و نتیجه را با یک حلقهcurlتکراری و یک جستجوی موقعیت جغرافیایی تأیید کنید. - فایل YAML را روی
0600نگه دارید و شنونده را به عنوان یک سرویس اجرا کنید تا از راهاندازی مجدد و خروج جان سالم به در ببرد.