Развёртывание mihomo на Linux-сервере с systemd
Содержание
На сервере графический клиент не нужен: ядро mihomo — это один исполняемый файл, который читает config.yaml и слушает локальные порты. Связка «бинарник в /usr/local/bin плюс юнит systemd» даёт всё, что требуется от фонового сервиса: автозапуск при загрузке, перезапуск после сбоя и логи в journald.
Разберём развёртывание по шагам: выбор сборки под архитектуру, распаковка, каталог конфигурации, юнит systemd, проверка работы и порядок обновления. Команды выполняются от root или через sudo.
Выбор сборки и установка бинарника
Сначала уточните архитектуру процессора:
uname -m
Вывод x86_64 означает сборку amd64, вывод aarch64 — сборку arm64 (типично для облачных ARM-инстансов и одноплатных компьютеров). Скачайте соответствующий архив mihomo v1.19.29 из центра загрузок: ядро распространяется как один сжатый файл .gz, без установщика.
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
Имя распакованного файла подставьте своё — оно зависит от выбранной сборки. Последняя команда выводит версию: если она отработала, бинарник на месте и запускается.
Пара замечаний по шагам. gunzip удаляет исходный архив и оставляет рядом распакованный файл без расширения — отдельно чистить каталог не нужно. Без chmod +x система откажется запускать файл с сообщением о нехватке прав, и это самая частая заминка на данном этапе. Каталог /usr/local/bin выбран не случайно: он входит в PATH, поэтому ядро дальше вызывается коротким именем mihomo, а не длинным путём. Если файл вы скачивали на локальную машину, перенесите его на сервер любым привычным способом — например, через scp.
Каталог конфигурации и проверка config.yaml
Ядру нужен рабочий каталог, в котором лежит конфигурация и куда оно складывает служебные файлы (например, географические базы). Стандартный выбор для сервера — /etc/mihomo:
sudo mkdir -p /etc/mihomo
sudo nano /etc/mihomo/config.yaml
Содержимое можно взять из подписки провайдера или написать вручную; из каких секций состоит файл, разобрано во введении в конфигурацию mihomo. Перед первым запуском обязательно проверьте синтаксис — так вы поймаете опечатку до того, как её найдёт systemd:
mihomo -t -f /etc/mihomo/config.yaml
В том же каталоге ядро со временем создаст служебные файлы: кеш и базы для правил по странам. Поэтому каталог должен быть доступен процессу на запись, а не только на чтение — при запуске от root это выполняется само собой. Файл конфигурации разумно закрыть от посторонних глаз: в нём лежат пароли и ключи доступа к серверам, так что sudo chmod 600 /etc/mihomo/config.yaml лишним не будет.
Осторожно с публичным IP. Если сервер смотрит в интернет, не выставляйте наружу ни порты прокси (allow-lan), ни API управления (external-controller): держите их на 127.0.0.1 и ходите через SSH-туннель либо закройте доступ файрволом.
Юнит systemd для автозапуска
Создайте файл /etc/systemd/system/mihomo.service примерно такого содержания:
[Unit]
Description=mihomo proxy service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=always
RestartSec=3
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
Ключевые строки здесь три. ExecStart передаёт ядру каталог данных параметром -d. Restart=always поднимает сервис после падения или разрыва сети. After=network-online.target откладывает старт до появления сети, иначе ядро может не разрешить адреса узлов при загрузке машины.
Остальные строки тоже не декоративны. Type=simple означает, что процесс не уходит в фон сам — именно так и ведёт себя mihomo, и systemd следит за ним напрямую. RestartSec=3 задаёт паузу перед перезапуском: без неё сервис при устойчивой ошибке уходит в быстрый цикл падений. LimitNOFILE поднимает лимит открытых файловых дескрипторов — для прокси, который держит множество одновременных соединений, стандартного значения может не хватить.
Запуск от root — самый простой вариант, но не единственный. Если политика сервера требует минимальных привилегий, создайте отдельного системного пользователя, передайте ему владение каталогом /etc/mihomo и укажите его в поле User. Учтите только, что непривилегированный процесс не сможет занять порты ниже 1024 и не поднимет интерфейс TUN; для обычного локального прокси на портах вида 7890 это ограничение роли не играет.
Запуск сервиса и чтение логов
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
systemctl status mihomo
Команда enable --now делает две вещи сразу: включает автозапуск и стартует сервис. Если статус показывает active (running), ядро работает. При ошибке смотрите журнал — там видно и загрузку правил, и причину отказа:
journalctl -u mihomo -f
Самая частая причина падения сразу после старта — ошибка в конфигурации; строку и поле ядро называет прямо в логе. Обратите внимание на характерный признак: если systemctl status показывает раз за разом растущее число попыток запуска, значит Restart=always честно поднимает сервис, который тут же падает, — смотреть нужно именно журнал, а не статус.
Набор команд для повседневного обслуживания небольшой:
| Команда | Когда нужна |
|---|---|
systemctl restart mihomo | После правки config.yaml |
systemctl stop mihomo | Перед заменой бинарника |
systemctl disable mihomo | Отключить автозапуск, не удаляя сервис |
systemctl daemon-reload | После правки самого файла юнита |
journalctl -u mihomo --since today | Разбор событий за сегодня |
Правки конфигурации без перезапуска сервиса не подхватываются: ядро читает файл при старте. Забытый restart — вторая по частоте причина недоумения после ошибок синтаксиса.
Проверка: трафик действительно идёт через прокси
Убедитесь, что порт слушается, и пропустите через него запрос. Номер порта возьмите из своей конфигурации — он задан полем mixed-port (в готовых профилях встречаются и 7890, и 7897):
ss -tlnp | grep mihomo
curl -x http://127.0.0.1:7890 -I https://example.com
Ответ с кодом состояния означает, что цепочка «curl → mihomo → узел» работает. Если запрос висит и обрывается по тайм-ауту, проверьте выбранный узел и правила маршрутизации, а заодно секцию DNS: на сервере без корректной настройки резолвинга запросы часто не уходят дальше — подробности в руководстве по настройке DNS в mihomo.
Обновление ядра и откат
Обновление сводится к замене одного файла. Порядок безопасный: остановить сервис, сохранить старый бинарник, положить новый, запустить.
sudo systemctl stop mihomo
sudo cp /usr/local/bin/mihomo /usr/local/bin/mihomo.bak
sudo mv ./mihomo-linux-amd64 /usr/local/bin/mihomo
sudo systemctl start mihomo
Конфигурация в /etc/mihomo при этом не трогается. Если новая версия повела себя неожиданно, откат занимает пару команд: остановить сервис, вернуть mihomo.bak на место и запустить снова. Та же схема работы с ядром применима и на десктопе — например, в запуске mihomo из командной строки в Windows.