راهاندازی mihomo روی سرور لینوکس با سرویس systemd
فهرست مطلب
روی یک سرور لینوکس، هیچ محیط گرافیکیای در کار نیست و کلاینتهای دسکتاپ معنایی ندارند. آنچه لازم دارید همان هسته است: یک باینری تنها که با فایل پیکربندی اجرا میشود و بهعنوان سرویس سیستمی همیشه در حال کار میماند.
در این راهنما هسته mihomo را روی لینوکس نصب میکنیم، پوشه پیکربندی استاندارد را میسازیم، یک یونیت systemd کامل مینویسیم تا سرویس پس از هر ریاستارت خودکار بالا بیاید و در پایان روش بهروزرسانی و بازگشت به نسخه قبلی را میبینیم. نسخه ارائهشده در سایت v1.19.29 برای معماریهای amd64 و arm64 است.
دانلود باینری و آمادهسازی آن
ابتدا معماری سرور را مشخص کنید:
uname -m
خروجی x86_64 یعنی به بسته amd64 نیاز دارید و aarch64 یعنی بسته arm64. فایل مناسب را از مرکز دانلود بخش لینوکس بگیرید و روی سرور قرار دهید، سپس آن را باز کنید و اجازه اجرا بدهید:
gunzip mihomo-linux-amd64-v1.19.29.gz
chmod +x mihomo-linux-amd64-v1.19.29
sudo mv mihomo-linux-amd64-v1.19.29 /usr/local/bin/mihomo
نام فایل بسته به نسخه و معماری متفاوت است؛ همان نامی را بنویسید که پس از دانلود میبینید. برای اطمینان از سالم بودن باینری، نسخه آن را بگیرید:
mihomo -v
ساخت پوشه پیکربندی
محل متعارف نگهداری پیکربندی روی سرور، پوشه /etc/mihomo است. آن را بسازید و فایل config.yaml را در آن قرار دهید:
sudo mkdir -p /etc/mihomo
sudo nano /etc/mihomo/config.yaml
محتوای فایل به سناریوی شما بستگی دارد. پیش از راهاندازی سرویس، نحو فایل را بررسی کنید تا مطمئن شوید هسته بهخاطر یک خطای تورفتگی بالا نمیآید:
mihomo -t -f /etc/mihomo/config.yaml
ساختار بخشهای این فایل و خطاهای رایج YAML را در آموزش فایل پیکربندی جمع کردهایم.
هشدار: اگر پورتهای محلی هسته روی همه رابطهای شبکه گوش میدهند، سرور شما به یک پراکسی باز تبدیل میشود. دسترسی را با فایروال محدود کنید یا هسته را فقط روی رابط داخلی بشنوانید.
یونیت systemd
یک فایل سرویس بسازید تا مدیریت اجرا، ریاستارت خودکار و ثبت لاگها بر عهده systemd باشد:
sudo nano /etc/systemd/system/mihomo.service
محتوای زیر را در آن قرار دهید:
[Unit]
Description=mihomo proxy core
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=always
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
پارامتر -d پوشه داده را معرفی میکند؛ هسته فایل config.yaml را از همانجا میخواند و فایلهای کمکی خود را نیز آنجا نگه میدارد. مقدار Restart=always تضمین میکند در صورت خطای موقت، سرویس دوباره بالا بیاید.
فعالسازی سرویس و مشاهده لاگ
پس از ساخت فایل، systemd را از تغییرات باخبر کنید و سرویس را همزمان فعال و اجرا کنید:
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
وضعیت را ببینید و در صورت نیاز، لاگ زنده را دنبال کنید:
systemctl status mihomo
journalctl -u mihomo -f
اگر سرویس مدام ریاستارت میشود، تقریباً همیشه دلیلش خطای پیکربندی یا اشغال بودن پورت است؛ چند خط اول لاگ معمولاً دقیقاً همان علت را نشان میدهد.
تست خروجی
سرویس که بالا آمد، از خود سرور یک درخواست آزمایشی از طریق پورت محلی بفرستید. شماره پورت را از مقدار mixed-port در پیکربندی خود بردارید:
curl -x http://127.0.0.1:7890 -I https://example.com
دریافت پاسخ یعنی هسته درخواست را پذیرفته و از مسیر تعیینشده در قوانین عبور داده است. اگر پاسخ نگرفتید، ابتدا بررسی کنید سرویس در حال اجراست و پورت درست را صدا زدهاید. نکات مربوط به DNS و حالت fake-ip که روی رفتار خروجی اثر میگذارند در راهنمای تنظیمات DNS آمده است.
نکته: پس از هر تغییر در config.yaml، ابتدا فایل را با mihomo -t بررسی و سپس سرویس را با sudo systemctl restart mihomo راهاندازی مجدد کنید.
بهروزرسانی و بازگشت به نسخه قبلی
بهروزرسانی یعنی جایگزینی یک فایل. پیش از هر چیز از باینری فعلی نسخه پشتیبان بگیرید تا در صورت بروز مشکل بتوانید سریع برگردید:
sudo systemctl stop mihomo
sudo cp /usr/local/bin/mihomo /usr/local/bin/mihomo.bak
sudo mv ./mihomo-new /usr/local/bin/mihomo
sudo systemctl start mihomo
اگر نسخه تازه رفتار غیرمنتظرهای داشت، فایل پشتیبان را دوباره جای اصلی برگردانید و سرویس را ریاستارت کنید. چون پیکربندی و باینری از هم جدا هستند، این رفتوبرگشت هیچ اثری روی تنظیمات شما نمیگذارد و در کمتر از یک دقیقه انجام میشود. برای اجرای همین هسته روی رایانه شخصی، مسیر معادل در ویندوز را در راهنمای mihomo برای ویندوز شرح دادهایم.