قواعد مسیریابی mihomo: DOMAIN، GEOIP و RULE-SET
فهرست مطلب
هر اتصالی که از mihomo عبور میکند از یک صافی رد میشود: فهرست rules. این فهرست تعیین میکند کدام درخواست از پروکسی برود، کدام مستقیم و کدام اصلاً رد شود. تفاوت میان یک پیکربندی خوب و یک پیکربندی آزاردهنده، بیشتر از آنکه به سرعت سرورها مربوط باشد، به همین چند ده خط برمیگردد.
خبر خوب اینکه منطق قواعد mihomo ساده است و با یاد گرفتن پنج شش نوع اصلی میتوانید هر فهرستی را بخوانید و ویرایش کنید. در این راهنما ترتیب ارزیابی، انواع قواعد دامنهای و IP، مجموعهقواعد بیرونی و روش فهمیدن اینکه یک اتصال به کدام قاعده خورده را مرور میکنیم.
قواعد چطور ارزیابی میشوند
سه اصل، تقریباً همه رفتار را توضیح میدهند:
- قواعد از بالا به پایین بررسی میشوند.
- اولین تطبیق برنده است؛ به محض اینکه یک قاعده بخورد، بقیه فهرست نادیده گرفته میشود.
- آخرین خط معمولاً
MATCHاست که هر چیزی را که تا آنجا بیصاحب مانده به یک مقصد پیشفرض میسپارد.
نتیجه عملی این است که ترتیب اهمیت دارد. یک قاعده عمومی که بالای فهرست بنشیند، جلوی همه قواعد اختصاصی زیر خودش را میگیرد. اگر قاعدهای که اضافه کردهاید بیاثر به نظر میرسد، اول به بالای فهرست نگاه کنید، نه به خود قاعده.
هر قاعده سه بخش دارد: نوع، مقدار و مقصد. مقصد یا یک گروه پروکسی است یا یکی از سیاستهای داخلی DIRECT (عبور مستقیم) و REJECT (قطع اتصال).
قواعد دامنهای: DOMAIN، DOMAIN-SUFFIX و DOMAIN-KEYWORD
| نوع | چه چیزی را تطبیق میدهد | مثال |
|---|---|---|
DOMAIN | فقط همان دامنه، دقیق و کامل | DOMAIN,example.com,Proxy |
DOMAIN-SUFFIX | دامنه و همه زیردامنههایش | DOMAIN-SUFFIX,example.com,Proxy |
DOMAIN-KEYWORD | هر دامنهای که این رشته در آن باشد | DOMAIN-KEYWORD,example,Proxy |
در عمل DOMAIN-SUFFIX پرکاربردترین است، چون یک خط، کل زیردامنههای یک سرویس را پوشش میدهد. DOMAIN-KEYWORD قدرتمند اما پرخطر است: کلیدواژه کوتاه ممکن است دامنههای بیربط را هم بگیرد و ساعتها سردرگمتان کند.
قواعد IP و پارامتر no-resolve
گاهی مقصد را با آدرس میشناسید نه با نام. IP-CIDR یک محدوده آدرس را تطبیق میدهد و GEOIP با استفاده از پایگاه داده جغرافیایی تشخیص میدهد آدرس مقصد به کدام کشور تعلق دارد:
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,IR,DIRECT
پارامتر no-resolve ظاهر سادهای دارد ولی مهم است. قواعد IP فقط وقتی کار میکنند که آدرس مقصد معلوم باشد؛ اگر درخواست با نام دامنه بیاید، هسته مجبور میشود آن را حل کند تا قاعده را بسنجد. افزودن no-resolve میگوید «اگر آدرس در دست نیست، این قاعده را رد کن و برو خط بعد». این کار از حل نامهای غیرضروری و تأخیر اضافه جلوگیری میکند و در ترکیب با حالت fake-ip اهمیت بیشتری پیدا میکند.
RULE-SET و rule-providers
نگهداری دستی صدها دامنه در فایل خودتان کار عاقلانهای نیست. mihomo اجازه میدهد فهرستها را از یک منبع بیرونی بگیرید، در دیسک نگه دارید و دورهای تازه کنید:
rule-providers:
ads:
type: http
behavior: domain
url: "https://example.com/ads.yaml"
path: ./ruleset/ads.yaml
interval: 86400
rules:
- RULE-SET,ads,REJECT
فیلد behavior میگوید محتوای فایل از چه جنسی است (فهرست دامنه، محدوده IP یا قواعد کلاسیک) و interval بازه تازهسازی را بر حسب ثانیه تعیین میکند. آدرس بالا فقط یک نمونه ساختاری است؛ نشانی واقعی را مجموعهقواعدی که استفاده میکنید در اختیارتان میگذارد. بیشتر اشتراکها این بخش را از پیش پر میکنند و شما فقط نتیجهاش را میبینید.
یک فهرست قواعد نمونه
rules:
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- RULE-SET,ads,REJECT
- DOMAIN-SUFFIX,example.com,Streaming
- DOMAIN-KEYWORD,cdn,Proxy
- GEOIP,IR,DIRECT
- MATCH,Proxy
ترتیب این فهرست تصادفی نیست: اول شبکه محلی و آدرسهای خصوصی که هرگز نباید وارد تونل شوند، بعد فهرست مسدودسازی، سپس قواعد اختصاصی سرویسها، بعد قاعده جغرافیایی برای ترافیک داخلی و در انتها MATCH که بقیه را به گروه اصلی میفرستد. اگر میخواهید فقط ترافیک خاصی از پروکسی برود، خط آخر را به MATCH,DIRECT تغییر دهید و قواعد دلخواه را بالاتر اضافه کنید.
توجه: قواعد مربوط به آدرسهای خصوصی و localhost را حذف نکنید. بدون آنها دسترسی به روتر، چاپگر و سرویسهای داخل شبکه شما ممکن است از کار بیفتد.
عیبیابی: کدام قاعده خورده است؟
وقتی سایتی از مسیر اشتباه میرود، حدس نزنید. کلاینتهای گرافیکی صفحهای برای اتصالهای فعال دارند که برای هر اتصال، دامنه مقصد، قاعده تطبیقیافته و گروه انتخابی را نشان میدهد؛ در اجرای خط فرمانی هم میتوانید log-level را روی debug بگذارید تا همین اطلاعات در لاگ چاپ شود.
سه اشتباه بیشتر از بقیه تکرار میشود: قاعدهای که زیر یک قاعده عمومیتر دفن شده، اشتباه گرفتن DOMAIN با DOMAIN-SUFFIX برای زیردامنهها، و اشاره به نام گروهی که دقیقاً با نام تعریفشده در فایل پیکربندی یکی نیست. پس از هر ویرایش، فایل را با mihomo -t -f config.yaml بررسی کنید و بعد هسته را دوباره بارگذاری کنید.