チュートリアル · 読了まで約 12 分

Linux に Mihomo を導入、systemd で自動起動:
日常利用向けの最小 YAML

デスクトップ環境がなくても、Linux 上で安定した Clash 互換プロキシは構築できます。本稿では Debian/Ubuntu 系ホストでのバイナリ導入、運用を意識した小さな YAML、クラッシュ後に復帰しブート時に起動する systemd ユニットまでをまとめます。

Linux · Mihomo · systemd · Clash · VPS

1 Linux で Mihomo を使う理由

Debian や Ubuntu のサーバー、Fedora ワークステーション、開発用の小さな VPS などを扱う場合、GUI に依存せずメモリ占有が小さく、再起動やアップデートのあとも自動で立ち上がるプロキシ層が欲しくなることがあります。コミュニティが継続開発する Clash.Meta 系コアである Mihomo は、その役割に適しています。一般的な Clash クライアントと同じ YAML 方言を話し、Hysteria2 や TUIC v5 などの新しいトランスポートにも対応でき、最初は mixed ポートだけの構成から、準備ができたら TUN による透過的ルーティングへ拡張できます。

デスクトップ Linux ではグラフィカルな Clash フロントエンドを入れることも多いですが、ヘッドレス環境や最小構成のクラウドイメージでは、単一の静的バイナリと設定ディレクトリが定番です。それを systemd と組み合わせると、プロセス監視、journal との連携、screen や cron に頼らずマルチユーザーブートで有効化、といった運用が一度に揃います。本ガイドはそのスタックを対象に、多くの VPS で一般的な amd64 に Mihomo を置き、後から拡張できる Clash 互換の最小 YAML を入れ、再起動やクラッシュに耐える systemd ユニットを登録する流れを示します。

以下の設定は意図的に保守的です。ポート 7890 で HTTP と SOCKS の mixed リスナーを開け、必要に応じて LAN から他端末が参照できるようにし、FakeIP を使った DNS 処理で漏えいを減らします。プロキシ一覧はプレースホルダです。プロバイダーからノードを貼り付けるか、信頼できる変換フローを経てサブスクリプションをマージしてください。ここに書いた内容はプロバイダーのセキュリティ責務を置き換えるものではなく、鍵やエンドポイント、地域ポリシーへの適合は利用者側の責務です。

2 バイナリのダウンロードと導入

まず CPU アーキテクチャを確認します。クラウドの x86_64 イメージは Mihomo では amd64 と呼ばれます。64bit の Raspberry Pi OS や Ampere VPS など ARM64 では arm64 アーティファクトが必要です。不明な場合は uname -m を実行し、x86_64 なら amd64、aarch64 なら arm64 に対応します。

公式ビルドは GitHub Releases で公開されています。最新の安定タグから正しいアセット名を選び、curl または wget で取得します。下の例は amd64 の 1.18.0 です。新しいリリースが出たら URL を差し替えてください。バイナリを /usr/local/bin に置くのは、ローカル管理ソフトウェアとして FHS に沿う一般的な作法で、手動トラブルシュート時も PATH がすっきりします。

ディレクトリを用意する

設定は /etc/mihomo、ログは /var/log/mihomo に置くのがわかりやすい定番です。ディストリビューションが /usr/local/etc を好む場合は読み替えて構いません。

Bash
sudo mkdir -p /etc/mihomo
sudo mkdir -p /var/log/mihomo

Mihomo を取得して配置する

展開後に実行権限を付与し、systemd に繋ぐ前に mihomo -v でバージョンを確認します。

Bash
# 最新の amd64 リリースアセット URL に置き換える
wget https://github.com/MetaCubeX/Mihomo/releases/download/v1.18.0/mihomo-linux-amd64-v1.18.0.gz

gunzip mihomo-linux-amd64-v1.18.0.gz
sudo mv mihomo-linux-amd64-v1.18.0 /usr/local/bin/mihomo
sudo chmod +x /usr/local/bin/mihomo
/usr/local/bin/mihomo -v
パッケージマネージャーについて: 一部のディストリビューションや第三者リポジトリでは Mihomo や Clash.Meta パッケージが提供されます。更新が楽になる一方、Ubuntu・Debian・Arch・RHEL 系で手動導入は依然として移植性が高いです。変更管理のルールに合わせて選んでください。

3 Clash 互換の最小 YAML

Mihomo は -d で渡したディレクトリの config.yaml を読みます。ファイル形式は Clash Premium 系とほぼ互換なので、古いチュートリアルのスニペットも軽い修正で流用しやすいです。このテンプレートは mixed ポートでの日常利用を想定し、ローカルのアプリやコンテナは TUN ドライバなしで http://127.0.0.1:7890http_proxy を向けられます。DNS では FakeIP と上流リゾルバを有効にしています。nameserverfallback は地域と脅威モデルに合わせて調整してください。

proxies には実ノードを列挙するか、リモート購読を読み込む proxy-providers を追加します。アウトバウンドを入れるまでは、パーサを満たすために proxy-groupsDIRECT のみにしておくのが安全です。ノードを挿入したらセレクタグループに名前を足し、ストリーミングや LAN 例外などルールを増やせます。Clash 以外形式の購読 URL を YAML に変換する場合は、自前の subconverter など信頼できるフローを使い、本番ホストに載せる前に生成物を必ず監査してください。

YAML (/etc/mihomo/config.yaml)
# External controller (dashboard / API)
external-controller: 0.0.0.0:9090
secret: "change_me_strong_password"

mixed-port: 7890
allow-lan: true
mode: rule
log-level: info
ipv6: false

dns:
  enable: true
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://8.8.8.8/dns-query
    - https://1.1.1.1/dns-query

proxies: []

proxy-groups:
  - name: Proxy
    type: select
    proxies:
      - DIRECT

rules:
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

シークレットを含むため権限を絞ります:sudo chown root:root /etc/mihomo/config.yaml && sudo chmod 600 /etc/mihomo/config.yamlexternal-controller をすべてのインターフェースに晒す場合はファイアウォールで管理ポートを守るか、localhost のみにバインドしてください。サンプルは VPS 上のリモートダッシュボード向けに 0.0.0.0 ですが、パケットフィルタなしの公開は危険です。

4 systemd ユニットファイル

長時間デーモンは nohup より systemd の監督向きです。Mihomo はフォアグラウンドに留まるため Type=simple で十分です。Restart=always でクラッシュを回復し、設定ミスでループしないよう RestartSec を挟みます。StandardOutputStandardError/var/log/mihomo に追記しつつ、好みで journalctl も併用できます。

下記のユニットは簡単のため root で動かします。後から TUN を有効にしたり特権ポートを使う場合も root が要ることが多いです。高位ポートだけで十分なら専用ユーザー mihomo を作り、/etc/mihomo の読み取り権だけ付与して User= を落とせます。mixed から卒業して TUN に進む際は CAP_NET_ADMIN などの要件をドキュメントで確認してください。

Bash
sudo nano /etc/systemd/system/mihomo.service

次のユニット定義を貼り付けます:

Service file
[Unit]
Description=Mihomo Daemon, A rule-based tunnel in Go.
After=network.target network-online.target nss-lookup.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=always
RestartSec=5
StandardOutput=append:/var/log/mihomo/output.log
StandardError=append:/var/log/mihomo/error.log

[Install]
WantedBy=multi-user.target
セキュリティ: root 実行はバイナリや設定が侵害されたときの影響範囲を広げます。高位ポートで足りる場合は専用アカウントを優先し、管理 API をインターネットに晒す場合は露出を完全に理解したうえで行ってください。

5 サービスの有効化と操作

ユニットを保存したら設定キャッシュを再読み込みし、デーモンを起動してマルチユーザーターゲットで自動起動を有効にします。status でメインプロセスが active か確認し、初回の編集では journalctl -u mihomo -f を併用して YAML ミスをすぐ捕捉します。

Bash
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
sudo systemctl status mihomo --no-pager

設定変更後は sudo systemctl restart mihomo、メンテナンスでは stop、自動起動を止めるときは disable が定番です。新しい rule-providers を試すときはバックアップを取っておくとロールバックが楽です。

6 mixed ポートをシェルとアプリに向ける

Mihomo はデスクトップの全体設定を勝手には書き換えません。環境変数か明示的なプロキシ設定でオプトインが必要です。mixed ポートは HTTP と SOCKS の両方を受け付け、多くの CLI は大文字の http_proxyhttps_proxy に HTTP プロキシ URI を渡せば動きます。

一時的に現在のシェルだけ

Shell
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7890"

ユーザーdefaultsを永続化

同じ export を ~/.bashrc~/.zshrc、あるいは GUI セッション用の systemd ユーザードロップインに追記し、新しいシェルを開きます。社内 API を直結させたい場合は no_proxy にローカルアドレスを入れておきます。

Bash
cat >> ~/.bashrc <<'EOF'
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export no_proxy="localhost,127.0.0.1,::1"
EOF
source ~/.bashrc

動作確認

Bash
curl -I https://www.example.com

ルーティングと DNS が通れば TLS ハンドシェイクが速く、HTTP のステータス行が返ります。ハングする場合は Mihomo が動いているか、セレクタに実際に動くアウトバウンドが入っているか、Mihomo の DNS リスナー 1053 を経由するときにファイアウォールが邪魔していないかを確認してください。

7 トラブルシューティング

  • ユニットがすぐ落ちる: journalctl -u mihomo -n 100 --no-pager を実行。YAML のインデントミスや、空の proxies に存在しないノード名を参照していることが多いです。
  • ポート競合: mixed-port を変えるか、sudo ss -lntp で既存リスナーを特定します。
  • ダッシュボードにリモートから届かない: ufwfirewalld、クラウドのセキュリティグループで管理ポートを開けるか、external-controller127.0.0.1 に縛って SSH トンネルで届けます。
  • DNS が妙: 別のリゾルバが 53 を占有していることがあります。Mihomo の DNS を 1053 に置くと衝突を避けやすいです。
  • 権限エラー: サービスアカウントが /etc/mihomo を読め、ログを書けるか確認します。ユーザーを分けた場合は ACL や tmpfiles で整えます。

8 まとめ

Mihomo を /usr/local/bin に置き、宣言的な設定を /etc/mihomo に集約し、起動順と再起動を systemd に任せるパターンが、Linux ホストでは再現性高く使えます。YAML は広い Clash エコシステムと互換なので、デスクトップクライアントやコミュニティルール集の断片を無理なく流用できます。場当たり的なシェルより、無人再起動後も残り、慣れたツールで障害を追える点が利点です。

手動の環境変数運用が窮屈になったら透過的ルーティングを検討してください。Clash Verge Rev の TUN モード解説はデスクトップ OS 上のフルスタック制御を扱いますが、Linux 上で Mihomo の TUN を有効にするときも概念は共通です。ターミナル編集に疲れたら、同じルールを GUI で扱えるクライアントをワークステーション側に置くのも現実的です。

Clash 互換クライアントはルール編集や DNS 補助、混在ネット向けの初期値など、バラバラのツールをつなぎ合わせるよりオンボーディングが滑らかなことが多いです。サーバーでは本文の軽量スタックが輝き、デスクトップではメンテされたビルドを選ぶと運用が楽になります。

→ 無料で Clash をダウンロードして、体験の違いを確かめる

タグ: Linux Mihomo systemd Clash VPS YAML
Clash クライアントのロゴ

Clash Verge Rev

次世代 Clash クライアント · 無料オープンソース

Mihomo コアをベースに、オプションの TUN モードや購読インポート、Windows・macOS と並ぶ Linux 向けパッケージを備えています。サーバーと同じルールをデスクトップで GUI 管理したいときに便利です。

TUN で全トラフィック 高性能 Mihomo コア きめ細かいルール DNS 漏えい対策 複数購読の管理

関連記事