گاهی مبنای مسیریابی «کدام دامنه بازدید میشود» نیست، بلکه «کدام برنامه دارد بازدید میکند» است. مثلاً: فقط یک ابزار توسعه پروکسی شود، یا برعکس یک کلاینت بیتتورنت کاملاً از پروکسی بیرون نگه داشته شود.
این کار قواعد فرایندی میخواهد.
پیششرط: روشن کردن find-process-mode
این رایجترین دلیل کار نکردن قاعدهای است که نوشتهاید.
find-process-mode: strictسه مقدار:
| مقدار | رفتار | هزینه |
|---|---|---|
off | اصلاً دنبال فرایند نمیگردد؛ همهٔ قواعد فرایندی مردهاند | هیچ |
strict (پیشنهادی) | فقط وقتی قواعد فرایندی وجود دارند جستوجو میکند | کم |
always | برای هر اتصال جستوجو میکند، پس لاگ همیشه نام فرایند را میگوید | بیشتر |
مزیت always این است که ستون «Process» صفحهٔ اتصالها همیشه داده دارد و برای عیبیابی خیلی راحت است؛ بهایش یک جستوجو در جدول فرایندهای سیستم برای هر اتصال است.
نحو پایه
rules:
- PROCESS-NAME,Telegram.exe,🚀 انتخاب
- PROCESS-NAME,qbittorrent.exe,DIRECT
- PROCESS-PATH,/usr/local/bin/curl,🚀 انتخابPROCESS-NAME در برابر PROCESS-PATH
Mihomo از PROCESS-NAME-REGEX و PROCESS-PATH-REGEX هم پشتیبانی میکند:
- PROCESS-NAME-REGEX,(?i)^(chrome|msedge)\.exe$,🚀 انتخاب
- PROCESS-PATH-REGEX,(?i).*\\JetBrains\\.*,🚀 انتخابپیدا کردن نام فرایند
روش ۱: از صفحهٔ اتصالها بخوانید (سریعترین)
find-process-mode را روی always بگذارید، صفحهٔ Connections را در Clash Verge باز کنید و بگذارید برنامه یک بار به شبکه دست بزند. ستون «Process» آنوقت نام دقیق را نشان میدهد.
این روش قابلاتکاست — حدس نزنید، همان را کپی کنید.
روش ۲: Task Manager / Activity Monitor
ویندوز: Task Manager ← زبانهٔ Details؛ ستون «Name» همان نام فرایند است.
مک: Activity Monitor ← دوبار کلیک روی فرایند ← به «Process Name» نگاه کنید.
لینوکس: ps -e -o comm= نام همهٔ فرایندها را فهرست میکند.
روش ۳: خط فرمان
# ویندوز: همهٔ فرایندهایی که الان از شبکه استفاده میکنند
Get-NetTCPConnection -State Established |
Select-Object -Property OwningProcess -Unique |
ForEach-Object { (Get-Process -Id $_.OwningProcess).ProcessName }# macOS / Linux
lsof -i -P -n | awk '{print $1}' | sort -uکاربردهای عملی
۱. واداشتن کلاینتهای بیتتورنت به رفتن مستقیم
خیلی از ارائهدهندههای اشتراک ترافیک بیتتورنت را در شرایطشان منع میکنند و فرستادنش از راه آنها حسابتان را به خطر میاندازد. ضمناً سهمیهٔ ترافیکتان را هم هدر میدهد.
prepend-rules:
- PROCESS-NAME,qbittorrent.exe,DIRECT
- PROCESS-NAME,Transmission.exe,DIRECT
- PROCESS-NAME,aria2c.exe,DIRECT
- PROCESS-NAME,BitComet.exe,DIRECT
- PROCESS-NAME,uTorrent.exe,DIRECT
- PROCESS-NAME,deluge.exe,DIRECTبرای اطمینان بیشتر یک قاعدهٔ پورت هم:
- DST-PORT,6881-6889,DIRECT۲. فرستادن ابزارهای توسعه از راه پروکسی
prepend-rules:
- PROCESS-NAME,git.exe,🚀 انتخاب
- PROCESS-NAME,node.exe,🚀 انتخاب
- PROCESS-NAME,python.exe,🚀 انتخاب
- PROCESS-NAME,docker.exe,🚀 انتخاب
- PROCESS-NAME,go.exe,🚀 انتخاب۳. فرستادن سکوهای بازی به یک گرهٔ مشخص
prepend-proxy-groups:
- name: "🎮 بازی"
type: fallback
include-all: true
filter: "(?i)IPLC|dedicated|game"
interval: 300
prepend-rules:
- PROCESS-NAME,steam.exe,🎮 بازی
- PROCESS-NAME,Battle.net.exe,🎮 بازی
- PROCESS-NAME,EpicGamesLauncher.exe,🎮 بازی۴. واداشتن نرمافزارهای منطقهای به رفتن مستقیم
بعضی برنامهها از راه پروکسی بد رفتار میکنند (محدودیت منطقهای، کنترل ریسک):
prepend-rules:
- PROCESS-NAME,WeChat.exe,DIRECT
- PROCESS-NAME,DingTalk.exe,DIRECT
- PROCESS-NAME,QQ.exe,DIRECT
- PROCESS-NAME,cloudmusic.exe,DIRECT
- PROCESS-NAME,BaiduNetdisk.exe,DIRECT۵. ترکیب با شرطهای دیگر
فقط وقتی برنامهٔ خاصی به بازهٔ خاصی میرود پروکسی کن:
- AND,((PROCESS-NAME,Telegram.exe),(IP-CIDR,91.108.4.0/22)),🚀 انتخابیک برنامه برای مقصدهای خارجی از پروکسی و برای محلی مستقیم برود:
- AND,((PROCESS-NAME,chrome.exe),(GEOIP,CN)),DIRECT
- PROCESS-NAME,chrome.exe,🚀 انتخابحواستان به ترتیب باشد: قاعدهٔ ترکیبی مشخصتر باید پیش از قاعدهٔ ساده بیاید.
ملاحظات کارایی
قواعد فرایندی بهمراتب گرانتر از قواعد دامنهایاند. هر تطبیق اینها را میطلبد:
توصیههای بهینهسازی:
پشتیبانی پلتفرمها
| پلتفرم | پشتیبانی | نکته |
|---|---|---|
| Windows | ✅ کامل | نام exe لازم است؛ حواستان به حروف باشد |
| macOS | ✅ کامل | ممکن است دسترسی اضافه بخواهد |
| Linux | ✅ کامل | دسترسی خواندن /proc لازم است |
| Android | ⚠️ ناقص | پروکسی بهازای برنامه ابزار بهتری است |
| روتر / دروازه | ❌ | ترافیک از دستگاههای دیگر میآید، پس فرایند محلی نیست |
روی اندروید قواعد فرایندی به کار نبرید — هم CMFA و هم FlClash پروکسی گرافیکی بهازای برنامه ارائه میدهند که بر پایهٔ نام بسته انتخاب میکند و هم دقیقتر است هم کمزحمتتر.
عیبیابی قاعدهای که کاری نمیکند
سریعترین راه سنجیدن: find-process-mode را روی always بگذارید، صفحهٔ اتصالها را باز کنید، بگذارید برنامه به شبکه دست بزند، و ستون Process را بخوانید.
- ستون خالی ← هسته فرایند را نمیبیند؛ دسترسیها را بررسی کنید
- ستون پر ولی متفاوت با قاعدهٔ شما ← قاعده را با آنچه نشان داده شده جور کنید
- ستون میخواند ولی ستون Rule قاعدهٔ دیگری را نشان میدهد ← مسئلهٔ ترتیب است؛ قاعدهٔ خودتان را با
prepend-rulesبالا ببرید
خلاصه
find-process-mode: strictپیششرط است؛ بدونش هیچچیز کار نمیکند- نام فرایند را از صفحهٔ اتصالها کپی کنید نه اینکه حدس بزنید
- زیر پروکسی سیستم ترافیک خط فرمان به هسته نمیرسد، پس برای آن ابزارها قواعد فرایندی فقط زیر TUN اثر دارند
- برای سناریوهای دروازه از SRC-IP-CIDR استفاده کنید، جایی که قواعد فرایندی بیفایدهاند
- قواعد فرایندی نسبتاً گراناند؛ دیرتر بگذاریدشان و هرجا شد قواعد دامنهای را ترجیح بدهید
بیشتر بخوانید: مرجع انواع قواعد و راهنمای سریع پروکسی ابزارهای توسعه.
مستندات مرتبط
نحو و منطق تطبیق و هزینهٔ نسبی هر نوع قاعده، اینکه no-resolve واقعاً چه میکند، چرا ترتیب قواعد همهچیز را تعیین میکند، و چطور بفهمیم یک اتصال با کدام قاعده تطبیق خورده.
جایگزین کردن صدها قاعدهٔ دستی با فهرستهای بیرونی. تفاوت سه behavior یعنی domain و ipcidr و classical، قالب text در برابر yaml، تنظیم بازهٔ بهروزرسانی، و وقتی مجموعه قاعده کار نمیکند چه چیزی را بررسی کنیم.
یک پیکربندی کامل که همزمان به VPN داخلی سازمان و دسترسی مستقیم محلی و سرویسهای خارجی پروکسیشده سرویس میدهد: دامنهها و بازههای IP، مسیریابی DNS، و تعارضهایی که پیش میآید.