رفتن به محتوای اصلی
FA

خانه / وبلاگ / پیشرفته

اجرای هستهٔ Mihomo از خط فرمان، از باز کردن بسته تا systemd

اجرای هستهٔ Mihomo از خط فرمان، از باز کردن بسته تا systemd

سرورها و روترها و دستگاه‌های NAS میز کاری ندارند، پس نصب Clash Verge رویشان بی‌معناست. به‌جایش هستهٔ Mihomo را اجرا کنید — یک باینری خط فرمانی است و بس.

این نوشته کل ماجرا را روی Linux amd64 طی می‌کند.

۱. دانلود و نصب

آنچه ما میزبانی می‌کنیم یک آرشیو .gz است که یک فایل اجرایی درش هست:

# استخراج
gunzip mihomo-linux-amd64-v1.19.29.gz

# اجرایی کردنش
chmod +x mihomo-linux-amd64-v1.19.29

# گذاشتنش در PATH با نامی کوتاه‌تر
sudo mv mihomo-linux-amd64-v1.19.29 /usr/local/bin/mihomo

# بررسی
mihomo -v

باید یک رشتهٔ نسخه و اطلاعات ساخت بگیرید.

۲. یک پوشهٔ کاری آماده کنید

Mihomo جایی برای نگه داشتن پیکربندی و فایل‌های داده‌اش می‌خواهد:

sudo mkdir -p /etc/mihomo
cd /etc/mihomo

فایل config.yaml خود را آنجا بگذارید. اگر لینک اشتراک دارید دانلودش کنید:

sudo curl -L -o /etc/mihomo/config.yaml \
  -A "clash.meta" \
  "لینک-اشتراک-شما"

پیکربندی دست‌کم به این‌ها نیاز دارد تا کار کند:

mixed-port: 7890          # پورت ترکیبی HTTP + SOCKS5
allow-lan: true           # اجازه به دستگاه‌های دیگر شبکه برای اتصال
bind-address: "*"
mode: rule
log-level: info
external-controller: 0.0.0.0:9090   # API کنترل
secret: "رمز خودتان را بگذارید"       # رمز API، اگر در دسترس باشد الزامی است

۳. اول در پیش‌زمینه اجرایش کنید

mihomo -d /etc/mihomo

سوییچ -d پوشهٔ کاری را تعیین می‌کند. یک شروع سالم چنین است:

INFO[0000] Start initial configuration in progress
INFO[0000] Geodata Loader mode: memconservative
INFO[0000] HTTP proxy listening at: [::]:7890
INFO[0000] RESTful API listening at: [::]:9090

وقتی listening at دیدید یعنی بالاست.

از کار کردنش مطمئن شوید، با Ctrl+C متوقفش کنید، بعد تبدیلش کنید به سرویس.

ترتیب استقراردانلود و استخراجیک باینریآماده کردن پیکربندیفایل config.yaml در پوشهٔ کاریاجرا در پیش‌زمینهاز بالا آمدنش مطمئن شویدنوشتن unit برای systemdماندگارش کنیدفعال کردن در بوتدستور systemctl enable
اجرای پیش‌زمینه را رد نکنید — خطاهای پیکربندی همان‌جا روشن‌ترند

۴. فایل unit سیستمی

فایل /etc/systemd/system/mihomo.service را بسازید:

[Unit]
Description=Mihomo Daemon
Documentation=https://wiki.metacubex.one
After=network.target nss-lookup.target

[Service]
Type=simple
User=root
LimitNPROC=500
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH
Restart=always
RestartSec=5
ExecStartPre=/usr/local/bin/mihomo -t -d /etc/mihomo
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo

[Install]
WantedBy=multi-user.target

خط ExecStartPre بررسی پیکربندی را اجرا می‌کند (-t یعنی test). آن‌وقت پیکربندی خراب به‌جای اینکه سرویس در حال اجرا را بیندازد در بررسی می‌افتد — جزئیات کوچکی که دردسر زیادی را می‌خرد.

sudo systemctl daemon-reload
sudo systemctl enable mihomo      # اجرا هنگام بوت
sudo systemctl start mihomo       # همین حالا اجرا کن
sudo systemctl status mihomo      # بررسی

active (running) یعنی تمام شد.

دستورهای روزمره

sudo systemctl restart mihomo     # بعد از تغییر پیکربندی
sudo systemctl stop mihomo
journalctl -u mihomo -f           # دنبال کردن لاگ
journalctl -u mihomo -n 100       # آخرین ۱۰۰ خط

۵. اجازه دادن به دستگاه‌های دیگر

allow-lan: true پیشاپیش دسترسی از شبکهٔ محلی را می‌دهد. دستگاه‌های دیگر فقط پروکسی‌شان را به IP و پورت این دستگاه اشاره می‌دهند:

اشتراک در شبکهٔ محلیگوشی لپ‌تاپ روتر یا NAS192.168.1.10:7890هستهٔ Mihomoبر پایهٔ قواعد تصمیم می‌گیرداینترنتترافیک محلی مستقیم از همین دستگاه بیرون می‌رود و به گره نمی‌خورد
یک دستگاه را تنظیم کنید، همهٔ دستگاه‌ها بهره می‌برند

روی دستگاه‌های کلاینت:

  • ویندوز: Settings ← Network & Internet ← Proxy ← Manual ← مقدار 192.168.1.10 و 7890 را وارد کنید
  • گوشی (Wi-Fi): روی شبکهٔ فعلی نگه دارید ← Modify ← Advanced ← Proxy: Manual ← همان نشانی و پورت
  • در سطح روتر: اگر خود روتر دروازه است، می‌توانید این را با TUN/TProxy برای پروکسی شفاف جفت کنید تا همهٔ دستگاه‌ها خودکار پوشش داده شوند (راه‌اندازی سنگین‌تری است و اینجا نمی‌آید)

۶. API کنترل و پنل وب

external-controller: 0.0.0.0:9090 یک RESTful API برای تعویض گره و بازرسی اتصال‌ها و بارگذاری دوبارهٔ پیکربندی باز می‌کند.

بررسی سریع:

curl -H "Authorization: Bearer secret-شما" http://127.0.0.1:9090/version

نقاط پایانی مفید:

نقطهٔ پایانیکاربرد
GET /proxiesفهرست همهٔ گره‌ها و گروه‌های سیاست
PUT /proxies/{group}تعویض گرهٔ انتخاب‌شدهٔ یک گروه
GET /connectionsاتصال‌های جاری
DELETE /connectionsبستن همهٔ اتصال‌ها
GET /logsجریان زندهٔ لاگ
PUT /configs?force=trueبارگذاری دوبارهٔ پیکربندی

با یک پنل وب چیزی نزدیک به کلاینت گرافیکی به دست می‌آورید. فایل‌های پنل را در پوشه‌ای محلی بگذارید و external-ui را به آن اشاره بدهید:

external-ui: /etc/mihomo/ui
external-ui-name: metacubexd

بعد در مرورگر به http://ip-سرور:9090/ui بروید.

۷. به‌روز نگه داشتن اشتراک

استقرار بدون رابط گرافیکی کلاینتی برای تازه کردن اشتراک ندارد، پس سراغ cron بروید:

sudo crontab -e

یک خط اضافه کنید (به‌روزرسانی ساعت ۴ بامداد و راه‌اندازی مجدد):

0 4 * * * curl -L -A "clash.meta" -o /etc/mihomo/config.yaml "لینک-اشتراک-شما" && systemctl restart mihomo

نسخهٔ امن‌تر در یک فایل موقت دانلود می‌کند، اعتبارسنجی می‌کند و تنها بعدش پیکربندی زنده را جایگزین می‌کند:

#!/bin/bash
TMP=$(mktemp)
curl -fsSL -A "clash.meta" -o "$TMP" "لینک-اشتراک-شما" || exit 1
# بررسی کمینهٔ سلامت: باید بخش proxies داشته باشد
grep -q "^proxies:" "$TMP" || { rm -f "$TMP"; exit 1; }
mv "$TMP" /etc/mihomo/config.yaml
systemctl restart mihomo

با نام /usr/local/bin/update-mihomo.sh ذخیره‌اش کنید، chmod +x بزنید و از cron صدایش کنید. این‌طور یک سرویس اشتراک که موقتاً خراب شده نمی‌تواند پیکربندی سالم را با صفحهٔ خطا بازنویسی کند.

مشکل‌های رایج

با unmarshal error بالا نمی‌آید YAML نامعتبر است، یا فیلدی به کار برده که این نسخهٔ هسته نمی‌شناسد. برای بررسی پیکربندی mihomo -t -d /etc/mihomo را اجرا کنید.

پورت در حال استفاده است sudo ss -tlnp | grep 7890 نشان می‌دهد چه چیزی گرفته‌اش. پورت را در پیکربندی عوض کنید یا آن فرایند را متوقف کنید.

پایگاه دادهٔ GeoIP دانلود نمی‌شود فایل‌های geoip.metadb و geosite.dat را دستی در پوشهٔ کاری بگذارید، یا به‌روزرسانی خودکار را خاموش کنید:

geo-auto-update: false

خلاصه

چهار گام: باینری را جایی بگذارید، پیکربندی را کنارش بگذارید، سرویس systemd بسازید، و پورت را با فایروال ببندید.

وقتی راه افتاد یک سرویس پس‌زمینه است که عملاً نگهداری نمی‌خواهد — به‌مراتب کم‌کارتر از نصب کلاینت روی تک‌تک دستگاه‌ها.

بیشتر بخوانید: اشتراک پروکسی در شبکهٔ محلی و نصب Clash Verge روی لینوکس.