نیاز معمولاً باریک است. سایتی به خاطر قانونی در اشتراک به پروکسی سپرده شده و حالا سر هر ورود کپچا می‌خواهد؛ یا سرویسی با اتصال مستقیم باز نمی‌شود و می‌خواهید فقط همان یکی، نه چیز دیگری، از گره رد شود. هیچ‌کدام اشتراک تازه یا بازنویسی گروه‌ها نمی‌خواهد. یک خط کافی است.

قانون‌ها از بالا به پایین خوانده می‌شوند و اولین تطبیق کار را تمام می‌کند

هسته وقتی درخواستی می‌گیرد، فهرست rules را به ترتیب می‌پیماید. همین که سطری تطبیق پیدا کرد، اتصال به هدف همان سطر سپرده می‌شود و خواندن متوقف می‌شود؛ هیچ‌چیزِ پایین‌تر دیده نمی‌شود. این فهرست مجموعه‌ای از شرط‌ها نیست، یک خط لوله ترتیب‌دار است. وقتی این را بپذیرید، پرسش‌تان درباره هر قانون تازه از «درست نوشته شده؟» به «بالای سرش چه نشسته؟» تغییر می‌کند.

rules:
  - DOMAIN-SUFFIX,github.com,PROXY
  - DOMAIN-KEYWORD,steamcommunity,PROXY
  - DOMAIN,ocsp.apple.com,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - PROCESS-NAME,Telegram.exe,PROXY
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,PROXY
پیشنهاد همکاریلینک اشتراک را از کجا بیاوریم؟سرویس همکار ما هنگام ثبت‌نام ۱ گیگابایت ترافیک پرسرعت هنگ‌کنگ رایگان می‌دهد.دریافت سرور پرسرعت

انواع قانونی که واقعاً سراغشان می‌روید

  • DOMAIN: تطبیق کامل. DOMAIN,example.com فقط همین یک نام را می‌گیرد؛ www.example.com نامی دیگر است و تطبیق نمی‌خورد.
  • DOMAIN-SUFFIX: دامنه به‌همراه تمام زیردامنه‌هایش. پرکاربردترین نوع؛ یک خط، پیشوندهای api و cdn و img را یکجا جمع می‌کند.
  • DOMAIN-KEYWORD: اگر آن رشته هرجای نام میزبان بیاید تطبیق می‌خورد. راحت است و آسان‌ترین راه گرفتن چیزهایی که اصلاً قصدشان را نداشتید؛ کلیدواژه‌ای مثل google انبوهی میزبان بی‌ربط را هم با خود می‌آورد.
  • IP-CIDR و IP-CIDR6: تطبیق بر اساس بازه نشانی. برای شبکه محلی و برای اتصال‌هایی که اصلاً نام میزبان ندارند.
  • GEOIP: تطبیق بر اساس کشور صاحب نشانی، با تکیه بر پایگاه داده GeoIP محلی.
  • PROCESS-NAME: تطبیق بر اساس برنامه‌ای که اتصال را باز کرده، بدون هیچ توجهی به مقصد.
  • DST-PORT: تطبیق بر اساس پورت مقصد؛ به درد ثابت کردن مسیر SMTP یا پورت یک بازی می‌خورد.

بخش آخر هر سطر هدف است: یا نام یک گروه، دقیقاً همان‌طور که در proxy-groups نوشته شده — یک فاصله اضافه یا یک emoji جاافتاده و پیکربندی بارگذاری نمی‌شود — یا مستقیم DIRECT و REJECT. قانون‌های IP یک بخش اختیاری دیگر هم می‌گیرند: no-resolve. بدون آن، درخواستی که نام دامنه دارد اول باید حل شود تا نشانی‌ای برای مقایسه به دست آید، و دو بار هزینه می‌دهید: یک جست‌وجوی اضافه، و همان پرس‌وجویی که می‌خواستید از آن پرهیز کنید که به هر حال بیرون رفته است.

قانونی که جای اشتباه بنشیند هرگز اجرا نمی‌شود

شکست همیشگی این شکلی است: قانون را ته فهرست، درست بالای MATCH، اضافه می‌کنید چون مرتب به نظر می‌رسد. و هرگز عمل نمی‌کند. فهرستی که از اشتراک ساخته شده معمولاً ده‌ها یا صدها سطر geosite و یک سطر GEOIP,CN,DIRECT را خیلی بالاتر از آن نقطه دارد، و یکی از آن‌ها مدت‌ها پیش دامنه شما را برداشته است. جای قانون سفارشی بالاتر از هر چیزی است که می‌تواند زودتر تطبیق بخورد، که عملاً یعنی همان چند سطر اول rules. برای اینکه بفهمید چه کسی ترافیک را برمی‌دارد، آن اتصال را در صفحه اتصال‌های کلاینت باز کنید؛ آنجا نوشته با کدام قانون تطبیق خورده است.

چطور بفهمیم یک سایت چه دامنه‌هایی لازم دارد

  1. صفحه اتصال‌های کلاینت را باز کنید و فهرست موجود را پاک کنید تا موارد تازه به چشم بیایند.
  2. سایت را در مرورگر باز کنید و واقعاً از آن استفاده کنید: وارد شوید، صفحه‌ها را ورق بزنید، تصویری را باز کنید، ویدیویی را دو ثانیه پخش کنید.
  3. به صفحه اتصال‌ها برگردید و نام میزبان‌هایی را که ظاهر شده‌اند بخوانید. یک صفحه معمولاً از سه دسته تغذیه می‌شود: دامنه اصلی، دامنه CDN برای فایل‌های ثابت، و دامنه API برای بخش سرور. دو تای آخر اغلب نام‌هایی دارند که هیچ شباهت آشکاری به اولی ندارند.
  4. افزودن تنها دامنه اصلی همان کار نیمه‌کاره همیشگی است: صفحه بالا می‌آید، تصویرها بی‌پایان می‌چرخند، یا درخواست ورود منقضی می‌شود. هر سه را پوشش بدهید تا قانون تمام شود.

مسیریابی بر اساس نام برنامه

PROCESS-NAME فایل اجرایی‌ای را که اتصال را باز کرده تطبیق می‌دهد، و همین را می‌خواهید وقتی می‌گویید «این برنامه هرجا وصل شود از پروکسی برود». شیوه نوشتن در دو سکو فرق دارد: در ویندوز پسوند را هم بنویسید، مثل Telegram.exe؛ در macOS و لینوکس نام خود فایل اجرایی بدون پسوند. ضمناً هسته باید بتواند اطلاعات فرایندها را ببیند تا اصلاً تطبیقی در کار باشد، و در بعضی سکوها این یعنی کلاینت به دسترسی کافی نیاز دارد یا باید گزینه مربوطه را روشن کنید. وقتی نام فرایند خوانده نشود، این قانون خطا نمی‌دهد؛ فقط بی‌صدا هرگز تطبیق نمی‌خورد.

بعد از ذخیره

پیکربندی را دوباره بارگذاری کنید تا هسته آن را بردارد. بیشتر کلاینت‌ها دکمه بارگذاری مجدد را در صفحه پیکربندی‌ها دارند، و رفتن به پیکربندی دیگر و برگشتن هم همان کار را می‌کند. بعد نوبت مرحله‌ای است که همه را زمین می‌زند: اتصال‌هایی که از قبل برقرارند مسیرشان عوض نمی‌شود. مسیر یک اتصال TCP لحظه دست‌دادن قفل می‌شود و تغییر بعدی قانون‌ها هرگز به آن نمی‌رسد. مرورگر هنوز از اتصال‌های keep-alive قبلی استفاده می‌کند، پس ده بار تازه‌سازی هم همان مسیر قدیم را نشان می‌دهد. پیش از آزمایش، اتصال‌های مربوط را از صفحه اتصال‌ها ببندید، و اگر لجباز بود زبانه را ببندید و دوباره باز کنید.

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