Перейти к содержимому
RU

Главная / Блог / Продвинутое

Запуск ядра Mihomo из командной строки: от распаковки до systemd

Запуск ядра Mihomo из командной строки: от распаковки до systemd

У серверов, маршрутизаторов и NAS нет рабочего стола, так что ставить туда Clash Verge бессмысленно. Запускайте ядро Mihomo — это один консольный бинарник.

Ниже весь процесс на Linux amd64.

1. Скачать и установить

Мы раздаём архив .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

Вы должны увидеть строку версии и информацию о сборке.

2. Подготовьте рабочий каталог

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, обязателен, если порт доступен

3. Сначала запустите на переднем плане

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
Не пропускайте запуск на переднем плане — ошибки конфигурации там видны яснее всего

4. Unit для systemd

Создайте /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       # последние 100 строк

5. Как дать пользоваться другим устройствам

allow-lan: true уже разрешает доступ из локальной сети. Другие устройства просто указывают прокси на IP и порт этой машины:

Раздача по локальной сетиТелефон ноутбук Маршрутизатор или NAS192.168.1.10:7890Ядро Mihomoрешает по правиламИнтернетЛокальный трафик уходит прямо с этой машины, не касаясь узла
Настраиваете одно устройство — выигрывают все

На клиентских устройствах:

  • Windows: Параметры → Сеть и Интернет → Прокси → Вручную → введите 192.168.1.10 и 7890
  • Телефон (Wi-Fi): долгое нажатие на текущую сеть → Изменить → Дополнительно → Прокси: Вручную → тот же адрес и порт
  • На уровне маршрутизатора: если сам маршрутизатор является шлюзом, это можно совместить с TUN/TProxy для прозрачного проксирования, и тогда все устройства покрыты автоматически (более сложная настройка, здесь не рассматривается)

6. Управляющий 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.

7. Обновление подписки

У headless-развёртывания нет клиента, который обновит подписку, так что берём cron:

sudo crontab -e

Добавьте строку (обновление в 4 утра и перезапуск):

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 на Linux.