ساختار فایل پیکربندی mihomo: آموزش مقدماتی YAML
فهرست مطلب
هر کاری که mihomo انجام میدهد از یک فایل بیرون میآید: config.yaml. پورتهای محلی، حالت مسیریابی، رفتار DNS، فهرست سرورها و قواعد تصمیمگیری، همه در همین فایل و با قالب YAML توصیف میشوند. بیشتر کاربران هرگز این فایل را از صفر نمینویسند، چون اشتراک آن را آماده تحویل میدهد؛ اما دیر یا زود لازم میشود آن را بخوانید: برای فهمیدن یک خطای راهاندازی، تغییر یک قاعده، یا کشف اینکه چرا ترافیک به مسیری میرود که انتظار نداشتید.
این راهنما پیکربندی mihomo را از پایه توضیح میدهد: قواعد نگارشی YAML که منشأ بیشتر خطاها هستند، معنی فیلدهای سطح بالا، یک نمونه کمینه که واقعاً اجرا میشود، و روش بررسی فایل پیش از اینکه اتصالتان را خراب کند.
قواعد YAML که واقعاً اهمیت دارند
YAML ساختار را با فاصلهگذاری میسازد، نه با آکولاد. همین باعث میشود خوانا باشد و در عین حال نسبت به جزئیات نامرئی حساس:
- تورفتگی فقط با space، هرگز با Tab. قرارداد رایج دو فاصله برای هر سطح است و یک کاراکتر Tab در هر جای فایل، کل تجزیه را متوقف میکند.
- بعد از دونقطه یک فاصله بگذارید. نوشتن
mode: ruleدرست است وmode:ruleخطا میدهد. - همترازی را حفظ کنید. عضوهای یک فهرست یا کلیدهای یک نگاشت باید دقیقاً از یک ستون شروع شوند.
- مقادیر حاوی کاراکتر خاص را در گیومه بگذارید. نام سرورهایی که
:یا#یا ایموجی دارند، داخل گیومه دوتایی امنترند. - مراقب کاراکترهای پنهان باشید. متنی که از پیامرسان یا صفحه وب کپی میشود ممکن است دونقطه فارسی، گیومه هوشمند یا فاصله بدونشکست داشته باشد؛ ظاهرشان یکسان است اما فایل را میشکنند. اگر خطی بیدلیل کار نمیکند، همان کاراکتر را دوباره تایپ کنید.
فیلدهای سطح بالا در یک نگاه
| فیلد | کارکرد |
|---|---|
mixed-port | یک پورت محلی که هم اتصال HTTP و هم SOCKS را میپذیرد |
mode | حالت خروج ترافیک: rule، global یا direct |
log-level | سطح جزئیات لاگ: silent، error، warning، info، debug |
external-controller | نشانی API کنترلی که داشبوردها و کلاینتهای گرافیکی از آن استفاده میکنند |
dns | تنظیمات حلکننده داخلی نام، از جمله enhanced-mode |
proxies | فهرست تکتک سرورها |
proxy-groups | گروههایی که سرورها را برای انتخاب و خودکارسازی سازمان میدهند |
rules | قواعدی که هر ترافیک را به یک گروه یا سیاست میسپارند |
یک پیکربندی کمینه که اجرا میشود
فایل زیر هیچ سروری ندارد و همه ترافیک را مستقیم میفرستد، اما درست تجزیه میشود، بالا میآید و اسکلتی است که میتوانید رویش بسازید:
mixed-port: 7890
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
proxies: []
proxy-groups: []
rules:
- MATCH,DIRECT
آن را با نام config.yaml ذخیره کنید، در همان پوشه دستور mihomo -d . را اجرا کنید و ببینید هسته بدون خطا بالا میآید. عدد پورت فقط یک نمونه است؛ در کلاینتهای گرافیکی مقدار واقعی را در صفحه تنظیمات ببینید (معمولاً 7890 یا 7897).
نکته: نمادهای [] یعنی «فهرست خالی». وقتی سرور اضافه میکنید، این علامت را حذف کنید و اعضا را در خطهای بعدی با تورفتگی بنویسید.
رابطه proxies، proxy-groups و rules
این سه بخش یک زنجیره میسازند و فهمیدن ترتیبشان بیشتر از حفظ کردن نام فیلدها ارزش دارد. proxies نقطههای خروج خام را تعریف میکند: آدرس، پورت، پروتکل و اطلاعات احراز هویت هر سرور. proxy-groups این سرورها را در واحدهای نامدار بستهبندی میکند — یک گروه انتخاب دستی، یک گروه سنجش خودکار تأخیر، یک زنجیره پشتیبان — و رفتار هر نوع گروه با بقیه فرق دارد. در انتها rules تصمیم میگیرد هر درخواست به کدام گروه برود و از بالا به پایین ارزیابی میشود؛ انواع قواعد و ترتیب تطبیق خودشان بحث مفصلی دارند.
در پیکربندیهای خوشساخت، یک قاعده مستقیماً به نام یک سرور اشاره نمیکند بلکه به یک گروه اشاره میکند. مزیتش روشن است: بعداً با عوض کردن انتخاب داخل گروه، رفتار همه قواعد مرتبط تغییر میکند و لازم نیست به فهرست قواعد دست بزنید.
اعتبارسنجی فایل پیش از اجرا
mihomo یک حالت آزمایشی دارد که فایل را میخواند و تجزیه میکند، بدون آنکه چیزی را بالا بیاورد:
mihomo -t -f config.yaml
اگر همهچیز درست باشد پیام موفقیت چاپ میشود؛ در غیر این صورت مشکل و معمولاً شماره خط را میبینید. عادت کنید بعد از هر ویرایش دستی این دستور را بزنید؛ یک ثانیه وقت میگیرد و جلوی قطع شدن ناگهانی اتصال را میگیرد.
خواندن خطاهای رایج
- پیامهایی درباره کاراکتر Tab یا «mapping values are not allowed»: مشکل تورفتگی است. به خط گزارششده بروید و فاصلهها را از نو با space بسازید.
- کلید تکراری: یک فیلد دو بار در یک سطح آمده، معمولاً بعد از چسباندن یک قطعه آماده. یکی را حذف کنید.
- خطای نوع مقدار: جایی که عدد انتظار میرفت متن نوشته شده، مثل
mixed-port: "abc". - «یافت نشد» برای یک سرور یا گروه: نامی که در قاعده یا گروه ارجاع داده شده وجود ندارد. نامها باید موبهمو یکسان باشند، از جمله حروف بزرگ و کوچک و ایموجی.
ترفند: وقتی خطا بیمعنا به نظر میرسد، خط قبل از خط گزارششده را نگاه کنید؛ تجزیهگرهای YAML اشتباه را اغلب یک خط دیرتر متوجه میشوند.
پس از اینکه ساختار فایل برایتان آشنا شد، لایه بعدی که بیشترین تأثیر را بر رفتار روزمره دارد بخش تنظیمات DNS و حالت fake-ip است؛ خیلی از رفتارهایی که جادویی به نظر میرسند از همانجا میآیند.