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

برنامه پروکسی را نادیده می‌گیرد: ۴ روش برای دور زدن ترافیک آن در ۲۰۲۶

شما پروکسی را در تنظیمات سیستم وارد کرده‌اید، اما برنامه هنوز هم با IP خانگی کار می‌کند. بررسی می‌کنیم که چرا پروکسی سیستم برنامه‌ها را مجبور نمی‌کند و چهار روش کارآمد برای هدایت ترافیک یک برنامه خاص به SOCKS5 را نشان می‌دهیم: Proxifier، ProxiFyre، proxychains-ng و حالت TUN. با محدودیت‌های هر کدام، خطاهای رایج و انتخاب نوع پروکسی.

📅۲۰ مرداد ۱۴۰۵
برنامه پروکسی را نادیده می‌گیرد: ۴ روش برای دور زدن ترافیک آن در ۲۰۲۶
```html

شما پروکسی را در تنظیمات ویندوز وارد کرده‌اید، برنامه را دوباره راه‌اندازی کرده‌اید — اما هنوز هم با IP خانگی خود کار می‌کند. یا برعکس: مرورگر به‌طور صحیح از طریق پروکسی کار می‌کند، اما کلاینت دسکتاپ در کنار آن همچنان آدرس واقعی را نشان می‌دهد. این یک باگ پروکسی نیست و نه اعتبارنامه‌های نادرست. این ویژگی بنیادی است که سیستم‌عامل‌ها با «پروکسی سیستم» برخورد می‌کنند: این پروکسی تحمیل نمی‌شود، بلکه فقط پیشنهاد می‌شود.

در زیر — چهار روش کارآمد برای وادار کردن یک برنامه خاص به استفاده از SOCKS5، با محدودیت‌های هر یک و مشکلاتی که معمولاً در تنظیمات پیش می‌آید.

چرا پروکسی سیستم کار نمی‌کند: حقیقت فنی کوتاه

در ویندوز یک «پروکسی سیستم» واحد وجود ندارد. حداقل دو مجموعه مستقل از تنظیمات وجود دارد. اول — WinINET: آنچه شما در «تنظیمات → شبکه و اینترنت → پروکسی» تغییر می‌دهید. این تنظیمات توسط Internet Explorer/Edge، بخشی از برنامه‌های .NET و هر چیزی که از استک HTTP استاندارد کاربر استفاده می‌کند، خوانده می‌شود. دوم — WinHTTP، که توسط خدمات سیستم و فرآیندهای پس‌زمینه استفاده می‌شود. و نکته کلیدی: WinHTTP از تنظیمات WinINET استفاده نمی‌کند، مگر اینکه شما به‌طور صریح آن‌ها را وارد کنید. این کار با دستور netsh winhttp import proxy source=ie انجام می‌شود، و — یک جزئیات مهم از مستندات مایکروسافت — این دستور یک عکس از تنظیمات فعلی می‌گیرد. آیا بعداً پروکسی را در تنظیمات تغییر داده‌اید؟ عکس به‌طور خودکار به‌روزرسانی نمی‌شود، باید دستور را دوباره اجرا کنید.

اما حتی وارد کردن هم شما را از دسته اصلی مشکلات نجات نمی‌دهد. تعداد زیادی از برنامه‌ها اصلاً از سیستم سؤال نمی‌کنند: آن‌ها از استک شبکه خود استفاده می‌کنند و سوکت‌های TCP را به‌طور مستقیم باز می‌کنند. اینگونه بسیاری از کلاینت‌های دسکتاپ شبکه‌های اجتماعی و پیام‌رسان‌ها، لانچرهای بازی، تورنت‌ها و برخی از برنامه‌های Electron با پیکربندی داخلی، و ابزارهای کامپایل شده با Go و Rust کار می‌کنند. برای آن‌ها، رشته «پروکسی» در تنظیمات سیستم‌عامل به‌سادگی وجود ندارد.

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

مرحله 0: اطمینان حاصل کنید که مشکل دقیقاً در این است

  1. برنامه را اجرا کنید و ببینید چه IP‌ای نشان می‌دهد (پروفایل حساب، صفحه خدمات، هر نشانگر داخلی).
  2. به‌طور همزمان مرورگری را از طریق همان پروکسی باز کنید و آدرس را مقایسه کنید. IP‌های مختلف = برنامه تنظیمات سیستم را نادیده می‌گیرد.
  3. بررسی کنید که آیا برنامه تنظیمات پروکسی خود را دارد — اغلب آن‌ها در «شبکه»، «اتصال» یا در فایل پیکربندی پنهان شده‌اند. پشتیبانی بومی همیشه بهتر از گرفتن خارجی است: لایه‌های کمتری وجود دارد، خرابی‌های کمتری.
  4. DNS را به‌طور جداگانه بررسی کنید. اگر برنامه نام‌ها را به‌طور محلی حل می‌کند و ترافیک از طریق پروکسی می‌رود، ارائه‌دهنده واقعی شما همچنان می‌بیند که به کجا می‌روید.

روش 1. Proxifier — استاندارد تجاری برای ویندوز و macOS

Proxifier اتصالات برنامه‌ها را می‌گیرد و آن‌ها را به پروکسی مشخص شده طبق قوانین هدایت می‌کند: می‌توانید تعیین کنید «این exe — از طریق پروکسی A، آن — از طریق پروکسی B، بقیه — به‌طور مستقیم»، آن‌ها را بر اساس پورت‌ها و آدرس‌های مقصد تقسیم کنید و زنجیره‌ای از چند پروکسی بسازید.

نسخه‌های فعلی در زمان نوشتن: 4.14 برای ویندوز (انتشار 23 آوریل 2025) و 3.15 برای macOS (18 سپتامبر 2025). مجوز — $39.95 برای هر نسخه، خرید یک‌باره، دائمی، با به‌روزرسانی‌های جزئی رایگان؛ یک آزمایش کامل 31 روزه وجود دارد، تخفیف‌های عمده از دو نسخه و بازگشت در مدت 30 روز.

عملکرد تنظیم:

  1. Proxy Servers → Add: آدرس، پورت، پروتکل SOCKS5 و اعتبارنامه‌ها را مشخص کنید. روی Check کلیک کنید — تست باید قبل از ایجاد قوانین انجام شود، در غیر این صورت شما دو مشکل را همزمان عیب‌یابی خواهید کرد.
  2. Proxification Rules → Add: در Applications فایل اجرایی خاصی را انتخاب کنید، در Action — پروکسی شما.
  3. قانون Default را Direct بگذارید، اگر نمی‌خواهید کل ماشین را به‌طور کلی هدایت کنید. این رایج‌ترین اشتباه تازه‌کارهاست: Default → Proxy کل ماشین را در تونل قرار می‌دهد و به‌روزرسانی OS و آنتی‌ویروس و ترافیک اضافی که شما برای آن هزینه می‌کنید، را شامل می‌شود.
  4. به برگه Connections در زمان واقعی نگاه کنید: آنجا می‌توانید ببینید کدام اتصال از طریق پروکسی رفته و کدام به‌طور مستقیم.

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

روش 2. ProxiFyre — جایگزین رایگان برای ویندوز با پشتیبانی از UDP

اگر بودجه صفر است و پلتفرم ویندوز است، پروژه باز ProxiFyre (مجوز AGPL-3.0) وجود دارد. این پروژه بر اساس NDISAPI/Windows Packet Filter ساخته شده است — یعنی در سطح درایور فیلتر کردن بسته‌ها کار می‌کند و می‌تواند آنچه را که اغلب کمبود دارد، انجام دهد: به‌طور شفاف نه تنها TCP، بلکه UDP را برای هر برنامه به‌طور جداگانه هدایت کند. این برای همه چیزهایی که بر روی UDP و QUIC زندگی می‌کنند — کانال‌های صوتی، کلاینت‌های بازی، بخشی از اتصالات مرورگرهای مدرن، بسیار مهم است.

از موارد مفید در نسخه‌های جدید: پشتیبانی از IPv6 در v2.3.0، SOCKS5-over-TLS در v2.4.0، قوانین استثنا برای برنامه‌ها و catch-all برای سایرین وجود دارد. الزامات: نصب Windows Packet Filter، کتابخانه‌های زمان اجرا Visual Studio و حقوق مدیر.

تنظیم از طریق فایل پیکربندی با فهرست برنامه‌ها و SOCKS5-اندپوینت‌های مربوطه انجام می‌شود. آستانه ورود بالاتر از Proxifier است، اما شما هزینه‌ای نمی‌پردازید و UDP را دریافت می‌کنید.

روش 3. proxychains-ng — گزینه سریع برای لینوکس، با احتیاط‌ها

کلاسیک برای سیستم‌های یونیکس: proxychains4 curl https://example.com. مکانیزم — LD_PRELOAD: کتابخانه فراخوانی‌های سوکت‌ها را در برنامه‌ای که به‌طور دینامیک لینک شده است، جایگزین می‌کند و آن‌ها را به SOCKS هدایت می‌کند.

محدودیت‌هایی که باید قبل از اینکه شما یک فرآیند کاری بر اساس این بسازید، بدانید:

  • فقط TCP. UDP و ICMP اصلاً هدایت نمی‌شوند — ping از طریق proxychains هیچ چیز معناداری را بررسی نمی‌کند.
  • فقط باینری‌های دینامیک لینک شده. ابزارهای استاتیک (وضعیت معمول برای Go) به‌طور خاموش LD_PRELOAD را نادیده می‌گیرند — ترافیک به‌طور مستقیم خواهد رفت و شما متوجه نخواهید شد.
  • در macOS به SIP برخورد می‌کند. System Integrity Protection بارگذاری کتابخانه را در باینری‌های سیستمی مسدود می‌کند: proxychains4 ssh user@host کار نخواهد کرد. راه‌حل کارآمد — کپی کردن باینری به دایرکتوری خود (cp /usr/bin/ssh ~/.local/bin/) و اجرای کپی. من توصیه نمی‌کنم که SIP را به‌خاطر راحتی غیرفعال کنید: شما امنیت کل سیستم را به‌خاطر یک ابزار تضعیف می‌کنید.

برای کارهای نقطه‌ای (curl، اسکریپت پایتون، ابزار کنسولی) proxychains همچنان سریع‌ترین راه است — با یک دستور نصب می‌شود و نیازی به روت ندارد.

روش 4. حالت TUN: گرفتن در سطح رابط مجازی

عمومی‌ترین کلاس راه‌حل‌ها. یک رابط شبکه مجازی ایجاد می‌شود، مسیرهای سیستم در آن هدایت می‌شوند و استک TCP/IP کاربر بسته‌ها را تجزیه کرده و آن‌ها را از طریق SOCKS5 به بیرون می‌دهد. اینگونه tun2socks (از استک gVisor استفاده می‌کند، TCP و UDP را می‌داند، برای تمام پلتفرم‌ها موجود است) و sing-box در حالت TUN کار می‌کنند.

مزیت کلیدی نسبت به LD_PRELOAD: همه چیز، از جمله باینری‌های استاتیک و برنامه‌هایی با استک خودشان، گرفته می‌شود. sing-box به‌طور اضافی دارای مسیریابی بر اساس فرآیندها است — فیلدهای process_name، process_path و process_path_regex، که قوانین واقعی per-app را فراهم می‌کند؛ طبق مستندات، این در لینوکس، ویندوز و macOS پشتیبانی می‌شود (در پلتفرم‌های موبایل، قوانین بر اساس نام بسته یا bundle ID تعیین می‌شوند).

دو تله که تقریباً همه در آن‌ها گیر می‌کنند:

  1. حلقه مسیریابی. اگر تمام ترافیک به TUN برود، اتصال به خود SOCKS5 نیز سعی می‌کند به TUN برود — تونل شروع به پیچیدن خود می‌کند. این با یک مسیر استثنا واضح به IP پروکسی از طریق رابط فیزیکی درمان می‌شود. این یک مشکل شناخته شده و به‌طور منظم در پیکربندی‌های sing-box ظاهر می‌شود.
  2. حقوق. ایجاد یک رابط TUN و ویرایش جدول مسیریابی به روت/مدیر نیاز دارد. در ماشین‌های شرکتی با سیاست‌ها، این ممکن است در دسترس نباشد.

در لینوکس دو رویکرد مرتبط دیگر نیز وجود دارد: redsocks — گرفتن از طریق قوانین iptables با هدایت به پورت محلی (فقط لینوکس، نیاز به روت)، و sshuttle، که مسیریابی شبیه به VPN را بر روی دسترسی SSH معمولی ایجاد می‌کند و مشکل کلاسیک «TCP بر روی TCP» را دور می‌زند.

چه چیزی بیشتر از همه خراب می‌شود

  • نشت DNS. حتی با تنظیم صحیح SOCKS5، برنامه ممکن است دامنه‌ها را به‌طور محلی حل کند. بررسی کنید که حل به سمت پروکسی می‌رود، نه ارائه‌دهنده شما.
  • SOCKS4 به جای SOCKS5 انتخاب شده است. SOCKS4 به‌طور کلی از UDP پشتیبانی نمی‌کند و در برخی پیاده‌سازی‌ها نمی‌تواند نام دامنه را منتقل کند. برای گرفتن ترافیک دلخواه فقط SOCKS5 را بگیرید — چرا دقیقاً اینگونه، به‌طور مفصل در مطلب درباره اصول کار SOCKS5 توضیح داده شده است.
  • پروکسی HTTP به جای SOCKS. پروکسی HTTP می‌تواند HTTP را از طریق CONNECT — اتصالات TLS پروکسی کند. ترافیک TCP دلخواه کلاینت بازی یا پیام‌رسان را هدایت نمی‌کند.
  • قانون Default برای تمام ترافیک. با هدایت کل ماشین، شما ترافیک استخر مقیم را برای به‌روزرسانی‌ها و تلمتری می‌سوزانید.
  • عدم بررسی پس از تنظیم. همیشه IP خروجی واقعی را از خود برنامه دوباره بررسی کنید، نه از مرورگر در کنار آن.

چه نوع پروکسی برای گرفتن انتخاب کنیم

از نظر فنی، گرفتن با هر SOCKS5-اندپوینت کار می‌کند، اما نوع انتخاب شده تعیین می‌کند که آیا سناریوی شما به نتیجه می‌رسد یا خیر.

  • مقیم — زمانی که برنامه با سرویسی کار می‌کند که شهرت IP را ارزیابی می‌کند: شبکه‌های اجتماعی، بازارها، پنل‌های تبلیغاتی، فرم‌های پرداخت. آدرس مرکز داده تقریباً به‌سرعت شناسایی می‌شود. پروکسی‌های مقیم با پشتیبانی از SOCKS5 و جلسات چسبنده مناسب هستند — آخرین مورد حیاتی است، زیرا تغییر IP در میانه یک جلسه فعال برای ضد تقلب بدتر از IP «غیر خودی» از ابتدا به نظر می‌رسد.
  • مرکز داده — برای وظایف فنی بدون ضد تقلب سختگیر: دسترسی به API، خدمات داخلی، ایستگاه‌های آزمایشی، همه‌چیز که در آن سرعت و ثبات کانال مهم است، نه «ظاهر مسکونی» آدرس. در اینجا پروکسی‌های مرکز داده بهترین پینگ و پیش‌بینی‌پذیری را ارائه می‌دهند.
  • موبایل — زمانی که برنامه به‌طور طبیعی موبایلی است (شبیه‌ساز، کلاینت شبکه اجتماعی) و حداکثر اعتماد به پلتفرم مورد نیاز است.

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

چگونه در یک دقیقه روش را انتخاب کنیم

  1. برنامه دارای تنظیمات پروکسی خود است → از آن‌ها استفاده کنید، هیچ چیزی را نگیرید.
  2. ویندوز، نیاز به نتیجه امروز، بودجه وجود دارد → Proxifier.
  3. ویندوز، نیاز به UDP و رایگان → ProxiFyre.
  4. لینوکس، یک کار یک‌باره با ابزار کنسولی → proxychains-ng.
  5. نیاز به گرفتن یک باینری استاتیک، بازی یا همه چیز به‌طور همزمان با قوانین per-app → حالت TUN (sing-box، tun2socks)، فراموش نکنید که مسیر استثنا به پروکسی را در نظر بگیرید.

نتیجه اصلی ساده است: «پروکسی کار نمی‌کند» در نه مورد از ده به معنای «پروکسی در سطح نادرست تنظیم شده است». تنظیمات سیستم — این یک درخواست مودبانه به برنامه است، در حالی که گرفتن در سطح درایور، LD_PRELOAD یا رابط TUN — تحمیل است. لایه را به‌درستی انتخاب کنید، IP خروجی واقعی را از خود برنامه بررسی کنید و فراموش نکنید که DNS را نیز بررسی کنید — و مشکل یک‌بار برای همیشه حل می‌شود، نه اینکه پس از هر به‌روزرسانی برنامه دوباره ظاهر شود.

```