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 を好む場合は読み替えて構いません。
sudo mkdir -p /etc/mihomo
sudo mkdir -p /var/log/mihomo
Mihomo を取得して配置する
展開後に実行権限を付与し、systemd に繋ぐ前に mihomo -v でバージョンを確認します。
# 最新の 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
3 Clash 互換の最小 YAML
Mihomo は -d で渡したディレクトリの config.yaml を読みます。ファイル形式は Clash Premium 系とほぼ互換なので、古いチュートリアルのスニペットも軽い修正で流用しやすいです。このテンプレートは mixed ポートでの日常利用を想定し、ローカルのアプリやコンテナは TUN ドライバなしで http://127.0.0.1:7890 に http_proxy を向けられます。DNS では FakeIP と上流リゾルバを有効にしています。nameserver と fallback は地域と脅威モデルに合わせて調整してください。
proxies には実ノードを列挙するか、リモート購読を読み込む proxy-providers を追加します。アウトバウンドを入れるまでは、パーサを満たすために proxy-groups を DIRECT のみにしておくのが安全です。ノードを挿入したらセレクタグループに名前を足し、ストリーミングや LAN 例外などルールを増やせます。Clash 以外形式の購読 URL を YAML に変換する場合は、自前の subconverter など信頼できるフローを使い、本番ホストに載せる前に生成物を必ず監査してください。
# 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.yaml。external-controller をすべてのインターフェースに晒す場合はファイアウォールで管理ポートを守るか、localhost のみにバインドしてください。サンプルは VPS 上のリモートダッシュボード向けに 0.0.0.0 ですが、パケットフィルタなしの公開は危険です。
4 systemd ユニットファイル
長時間デーモンは nohup より systemd の監督向きです。Mihomo はフォアグラウンドに留まるため Type=simple で十分です。Restart=always でクラッシュを回復し、設定ミスでループしないよう RestartSec を挟みます。StandardOutput と StandardError で /var/log/mihomo に追記しつつ、好みで journalctl も併用できます。
下記のユニットは簡単のため root で動かします。後から TUN を有効にしたり特権ポートを使う場合も root が要ることが多いです。高位ポートだけで十分なら専用ユーザー mihomo を作り、/etc/mihomo の読み取り権だけ付与して User= を落とせます。mixed から卒業して TUN に進む際は CAP_NET_ADMIN などの要件をドキュメントで確認してください。
sudo nano /etc/systemd/system/mihomo.service
次のユニット定義を貼り付けます:
[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
5 サービスの有効化と操作
ユニットを保存したら設定キャッシュを再読み込みし、デーモンを起動してマルチユーザーターゲットで自動起動を有効にします。status でメインプロセスが active か確認し、初回の編集では journalctl -u mihomo -f を併用して YAML ミスをすぐ捕捉します。
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_proxy と https_proxy に HTTP プロキシ URI を渡せば動きます。
一時的に現在のシェルだけ
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 にローカルアドレスを入れておきます。
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
動作確認
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で既存リスナーを特定します。 - ダッシュボードにリモートから届かない:
ufwやfirewalld、クラウドのセキュリティグループで管理ポートを開けるか、external-controllerを127.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 補助、混在ネット向けの初期値など、バラバラのツールをつなぎ合わせるよりオンボーディングが滑らかなことが多いです。サーバーでは本文の軽量スタックが輝き、デスクトップではメンテされたビルドを選ぶと運用が楽になります。