2024年最新版 mihomo のすべて:導入から運用まで 詳細徹底解説
インターネット上の自由とプライバシーを守るための強力なツールとして、プロキシやVPNは広く利用されています。中でも、Rule-based代理と呼ばれる高度なルーティング機能を持ち、柔軟な設定が可能なツールとして人気を博したのが「Clash」です。しかし、オリジナルのClash for Windowsプロジェクトは開発が終了し、そのエコシステムは複数のフォークや後継プロジェクトに引き継がれています。2024年現在、その中でもコアエンジンとして注目され、多くのクライアントアプリケーションで採用されているのが「mihomo」です。
この記事では、mihomoとは何か、なぜ今mihomoを使うのか、そしてその導入から日々の運用、さらには応用的な使い方まで、2024年の最新情報を踏まえて詳細に解説します。約5000語のボリュームで、初心者から経験者までmihomoを使いこなすためのすべてをお伝えします。
1. はじめに:mihomoとは何か、なぜ注目されるのか
1.1. mihomoの正体:旧Clashコアの後継
mihomo(ミーホーム)は、かつて高い人気を誇ったプロキシクライアント「Clash」のコアエンジンをフォーク(派生)させて開発が続けられているプロジェクトです。オリジナルのClashプロジェクトは開発が停止しましたが、その優れた設計思想と機能は多くの開発者に影響を与え、様々なフォークや後継プロジェクトが生まれました。mihomoはその中でも特に活発に開発されており、多くのサードパーティ製GUIクライアントのバックエンドとして採用されています。
Clashからmihomoへの名称変更は、オリジナルのClashプロジェクトとの区別を明確にし、独立した開発を進めるためのものです。しかし、基本的な機能や設定ファイルの形式(YAML)はClashを踏襲しているため、Clashの経験者であれば比較的スムーズに移行できます。
1.2. mihomoの特徴
mihomoの最大の特徴は、その強力な「Rule-based代理(ルールベースルーティング)」です。これは、通信先(ドメイン、IPアドレス、地域など)に基づいて、自動的にプロキシを使用するか、直接接続するか、あるいは通信を拒否するかを決定する機能です。これにより、特定のウェブサイトやサービスにはプロキシを経由させ、それ以外の通信は直接行う、といった柔軟な使い分けが可能になります。
その他の主要な特徴は以下の通りです。
- 多種多様なプロトコル対応: Shadowsocks (SS), ShadowsocksR (SSR), VMess, VLESS, Trojan, Snell, HTTP, SOCKS5といった従来のプロトコルに加え、Hysteria, Hysteria2, TUICといった比較的新しいプロトコルにも対応しています(対応プロトコルはmihomoのバージョンによって異なりますが、主要なものは網羅されています)。
- 複数プロキシの管理と自動切り替え: 複数のプロキシサーバーを設定し、速度テストに基づいて自動的に最適なサーバーを選択したり、接続に失敗した場合に別のサーバーに切り替えたり(Fallback)といった機能を提供します。
- Tunモードによるシステムレベルの代理: デバイス全体のインターネット通信を捕捉し、mihomoのルールに基づいてルーティングすることが可能です。これにより、ブラウザだけでなく、アプリケーション全体の通信を制御できます。
- 詳細なDNS制御: DNS over HTTPS (DoH), DNS over TLS (DoT), Fake IPなど、様々なDNS設定に対応しており、DNS Leakを防ぎ、より安全かつ柔軟な名前解決を実現します。
- YAML形式の設定ファイル: 人間が読み書きしやすいYAML形式で設定を行います。これにより、複雑なルールやプロキシ設定も構造的に記述できます。
- クロスプラットフォーム対応: コアエンジンはWindows, macOS, Linux, Android, iOS (クライアント経由), ルーターなど、様々なプラットフォームで動作します。
- External Controller API: 外部からmihomoの制御や状態確認を行うためのAPIを提供します。これにより、GUIダッシュボードやスクリプトとの連携が可能です。
1.3. mihomoの利用シーン
mihomoのRule-based代理と多様な機能は、様々なシーンで役立ちます。
- 情報規制の回避: 特定の国のインターネット規制を回避し、検閲されていない情報にアクセスするために利用されます。Rule-based代理により、国内サイトへのアクセスは直接行い、海外サイトへのアクセスのみプロキシを経由させるといった効率的な使い方が可能です。
- ジオ制限の解除: 特定の地域からのアクセスのみに限定されているサービス(動画ストリーミング、ゲームなど)を利用するために、その地域のIPアドレスを持つプロキシを経由します。
- プライバシー保護: インターネットサービスプロバイダ(ISP)や第三者による通信傍受からプライバシーを守るために、暗号化されたプロキシトンネルを経由して通信を行います。
- 開発やテスト: 特定のネットワーク環境をシミュレートしたり、異なる地域からのアクセスをテストしたりする際に利用できます。
- ネットワーク管理: 企業や組織内で、特定の通信を制御・監視するために利用されることもあります(ただし、mihomoは主に個人利用を想定したツールです)。
2024年現在、mihomoはClashエコシステムの中心的な存在として、その強力な機能と柔軟性から多くのユーザーに選ばれています。Hysteria2やTUICといった新しいプロトコルへの対応も進んでおり、今後も進化が期待されます。
2. mihomoの基礎知識
mihomoを理解し、効果的に使用するためには、その基本的なアーキテクチャと設定ファイルの構造を知ることが重要です。
2.1. mihomoのアーキテクチャ
mihomoは、以下の主要な要素で構成されています。
- Core (コア): 通信の処理、プロキシプロトコルの実装、ルール適用、DNS処理などを担うバックエンドエンジンです。通常、コマンドラインツールとして動作します。
- Configuration File (設定ファイル): YAML形式で記述され、使用するプロキシサーバー、プロキシグループ、ルーティングルール、DNS設定などを定義します。
- External Controller (外部コントローラー): mihomoコアを外部から制御するためのAPIです。GUIクライアントやダッシュボードは、このAPIを通じてコアと連携します。
- Tun Device (Tunデバイス): システムレベルでネットワークパケットを捕捉し、mihomoに転送するための仮想ネットワークインターフェースです。Tunモードを有効にする際に使用されます。
通信フローの概要:
- アプリケーションがインターネット通信を開始する。
- mihomoがその通信を捕捉する(Tunモードの場合、またはアプリケーションがmihomoのポートをプロキシとして使用するように設定されている場合)。
- mihomoは設定ファイルの
rulesセクションを参照し、通信先のドメイン、IPアドレス、その他の条件に一致する最初のルールを探す。 - 一致したルールに指定されたプロキシグループまたはアクション(DIRECT, REJECT)に従って通信を処理する。
- プロキシグループが指定された場合、そのグループ内のプロキシサーバーの中から、設定されたポリシー(選択、速度テスト、フォールバックなど)に基づいて使用するプロキシを決定する。
- 決定されたプロキシサーバーを介して、または直接、通信を行う。
2.2. 設定ファイルの構造(YAML形式)
mihomoの設定ファイルはYAML形式で記述されます。YAMLは構造化されたデータを表現するための形式で、人間にとって読みやすいのが特徴です。mihomoの設定ファイルは、複数のトップレベルセクションで構成されます。主要なセクションは以下の通りです。
port: HTTPプロキシとしてリッスンするポート。socks-port: SOCKS5プロキシとしてリッスンするポート。mixed-port: HTTPとSOCKS5の両方としてリッスンするポート(通常はこちらを使用)。redir-port: Transparent Proxy用のポート(主にLinuxで使用)。tproxy-port: TProxy Transparent Proxy用のポート(主にLinuxで使用)。tun: Tunモードの設定。dns: DNS設定。log-level: ログの詳細レベル。external-controller: 外部コントローラーAPIの設定。secret: 外部コントローラーAPIへのアクセスパスワード。proxies: 使用する個々のプロキシサーバーのリスト。proxy-groups: プロキシサーバーをまとめたグループの定義(Select, Fallback, URLTest, LoadBalanceなど)。rules: 通信をどのようにルーティングするかを定義するルールのリスト。script: カスタムスクリプト機能の設定(JavaScript/Lua)。mixin: 複数の設定ファイルをマージするための設定。
これらのセクションは、YAMLのインデントによって階層構造が表現されます。インデントはスペースで行い、タブは使用しないのが一般的です。正確なインデントはYAMLの構文として非常に重要です。
2.3. 主要な機能の概要
- プロキシ (Proxies): 実際に通信を中継するサーバー情報(アドレス、ポート、プロトコル、認証情報など)を定義します。
- プロキシグループ (Proxy Groups): 複数のプロキシを束ね、特定のポリシーに基づいて使用するプロキシを動的に決定します。
select: ユーザーが手動でグループ内のプロキシを選択します。fallback: 複数のプロキシを順番に試し、最初に接続できたプロキシを使用します。定期的にテストを行い、利用可能なプロキシを判断します。urltest: 定期的に各プロキシの接続速度をテストし、最も高速なプロキシを自動的に選択します。loadbalance: 複数のプロキシに均等にトラフィックを分散します(あまり一般的ではありません)。
- ルール (Rules): 通信の宛先(ドメイン、IP、GEOIPなど)やプロトコルに基づいて、使用するプロキシグループまたはアクション(DIRECT, REJECT)を決定します。ルールは上から順番に評価され、最初に一致したルールが適用されます。最後のルールは通常
FINALルールで、どのルールにも一致しなかった場合のデフォルトの動作を定義します。 - Tunモード: オペレーティングシステムのネットワークスタックに仮想インターフェース(Tunデバイス)を作成し、デバイスから発せられるすべてのIPパケットを捕捉してmihomoに転送するモードです。これにより、アプリケーションがプロキシ設定に対応しているかに関わらず、すべての通信をmihomoで制御できます。Windows, macOS, Linuxで利用可能です。Tunモードのスタック実装には
system(OSネイティブ)やgvisor(ユーザー空間実装)があります。 - DNS処理: クライアントからのDNSクエリを受け取り、設定されたネームサーバーに転送します。Fake IPモードでは、特定のドメインに対してmihomoが管理するプライベートIPアドレスを返し、実際の接続時にmihomoが宛先ドメインを解決・処理します。これにより、DNS Leakを防ぎつつ、ルールベースルーティングを効率的に行います。
3. 導入編:mihomoを使い始める準備
mihomoコア自体はコマンドラインツールです。多くのユーザーは、mihomoコアをバックエンドとして利用するGUIクライアントを使用します。ここでは、mihomoコアの入手方法と、主要なプラットフォームでのGUIクライアントを含めた導入方法について解説します。
3.1. mihomoコアの入手
mihomoコアの最新版は、GitHubのリリースページからダウンロードできます。
- GitHub Releases: https://github.com/mihomo/mihomo/releases
使用しているオペレーティングシステムとアーキテクチャ(例: Windows amd64, macOS arm64, Linux amd64など)に合ったバイナリをダウンロードしてください。ファイル名は通常 mihomo-<os>-<arch>-v<version>.gz のような形式です(.gzはgzip圧縮ファイル)。ダウンロード後、解凍して実行可能ファイル(Windowsでは.exe)を取り出します。
3.2. Windows版の導入
Windowsでmihomoを使用する場合、主に以下の方法があります。
- コマンドライン: ダウンロードした
mihomo.exeをコマンドプロンプトまたはPowerShellから実行します。設定ファイル(例:config.yaml)を用意し、以下のコマンドで起動します。
bash
mihomo.exe -f config.yaml
CLIでの運用は自動化やサーバー用途には便利ですが、デスクトップ用途ではGUIクライアントが一般的です。 - GUIクライアント: mihomoコアをバックエンドに使用する様々なサードパーティ製GUIクライアントが存在します。これらはmihomoコアを内包しているか、別途ダウンロードして連携させることが多いです。代表的なクライアントをいくつか紹介します。
- mihomo for Windows (旧 Clash for Windows): 最も広く使われていたClash for Windowsの後継プロジェクトの一つ。mihomoコアを内蔵しており、直感的なGUIで設定、プロファイル管理、ログ表示、速度テストなどが行えます。Tunモードの有効化やシステムプロキシ設定も容易です。GitHubなどで配布されていますが、公式の後継プロジェクトは複数存在するため、信頼できるソースから入手することが重要です。
- nekoray: VMess, VLESS, SS, SSR, Trojan, Hysteria, TUICなど、mihomoが対応する多くのプロトコルに対応したGUIクライアント。Windows, macOS, Linuxに対応しています。mihomoコアまたはXray/v2rayコアを選択して使用できます。GUIも比較的分かりやすいです。
- その他: Clash Verge Rev, sing-box based clientsなど、様々なmihomo互換クライアントが登場しています。
mihomo for Windows (GUI) の一般的な導入手順:
- 信頼できるソースからクライアントの実行可能ファイル(インストーラーまたはポータブル版)をダウンロードします。
- ダウンロードしたファイルを実行してインストールまたは展開します。
- クライアントを起動します。初回起動時には設定ファイルのインポートを求められることが多いです。
- 「Profiles」(または類似の項目)タブから、プロキシサービスのサブスクリプションリンクを貼り付けてダウンロードするか、手動で設定ファイル(
.yaml形式)をインポートします。 - インポートしたプロファイルを選択し、「System Proxy」または「TUN Mode」をオンにして、mihomoを有効化します。
- 「Proxies」タブでプロキシグループ(特に
selectグループ)から使用するプロキシを選択します。
3.3. macOS版の導入
macOSでもWindowsと同様に、コマンドラインまたはGUIクライアントでmihomoを使用できます。
- コマンドライン: ダウンロードした
mihomoバイナリを実行します。
bash
./mihomo -f config.yaml - GUIクライアント:
- ClashX / ClashX Pro: macOS向けの著名なClashクライアントでしたが、こちらも開発状況に注意が必要です。フォークや後継版が存在します。メニューバーから操作でき、システムプロキシやTunモードに対応しています。
- nekoray: Windows版と同様にmacOS版も提供されています。mihomoコアを選択して使用できます。
- Stash: iOS/iPadOS/macOS向けの統合ネットワークプロキシツール。mihomo互換のエンジンを内蔵しており、Clash/mihomoの設定ファイルを直接利用できます。App Storeで配布されていますが有料です。
macOS GUIクライアント(例: Stash)の一般的な導入手順:
- App Storeまたは信頼できるソースからクライアントアプリをダウンロード・インストールします。
- アプリを起動します。
- 「Profiles」(または類似)から、サブスクリプションリンクを追加するか、
.yaml設定ファイルをインポートします。 - インポートしたプロファイルを選択し、有効化します。多くの場合、システムプロキシまたはTunモード(Network Extension)の設定が必要です。
- プロキシグループから使用するプロキシを選択します。
3.4. Linux版の導入
Linuxでは、主にコマンドラインでmihomoをデーモンとして実行することが一般的です。デスクトップ環境ではnekorayなどのGUIクライアントも利用可能です。
- コマンドライン:
- ダウンロードした
mihomoバイナリを解凍します。 - 適切なディレクトリ(例:
/usr/local/bin/)に配置し、実行権限を付与します。
bash
sudo mv mihomo /usr/local/bin/
sudo chmod +x /usr/local/bin/mihomo - 設定ファイル(例:
/etc/mihomo/config.yaml)を用意します。 - 以下のコマンドで実行します。
bash
mihomo -f /etc/mihomo/config.yaml
- ダウンロードした
- Systemdサービス化: バックグラウンドで自動的にmihomoを起動・管理するために、systemdサービスとして登録するのが一般的です。
- mihomoバイナリと設定ファイルを適切な場所に配置します。
-
/etc/systemd/system/mihomo.serviceのような名前でサービスファイルを作成します。内容は以下の例を参考に、パスなどを環境に合わせて修正します。
“`ini
[Unit]
Description=Mihomo Proxy Service
After=network.target[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -f /etc/mihomo/config.yaml
Restart=always[Install]
WantedBy=multi-user.target
3. systemdの設定をリロードし、サービスを有効化して起動します。bash
sudo systemctl daemon-reload
sudo systemctl enable mihomo
sudo systemctl start mihomo
``sudo systemctl status mihomo` で状態を確認できます。
4.
* GUIクライアント: nekorayなど、Linux版を提供しているGUIクライアントも利用可能です。
LinuxでTunモードを有効にするには、mihomoに特別な権限(CAP_NET_ADMINなど)を与えるか、rootで実行する必要があります。Systemdサービスとして実行する場合は、Serviceファイル内で適切な権限設定を行う必要があります。
3.5. Android版の導入
Androidでは、Clash for Android (CFA) が最も有名なクライアントでしたが、こちらも開発状況に注意が必要です。mihomoコアや ఇతర互換コアをバックエンドに利用する新しいクライアントが登場しています。
- Clash for Android (CFA): かつては広く使われていましたが、最新のAndroidバージョンでの互換性や開発状況にはばらつきがあります。
- nekoray: Android版も提供されており、mihomoコアを選択して使用できます。
- その他のmihomo互換クライアント: Google Playストアやサードパーティのアプリストアで「mihomo client」などで検索すると見つかる場合があります。信頼できる開発元からのアプリを選択してください。
Androidクライアントの一般的な導入手順:
- 信頼できるソースからアプリをダウンロード・インストールします。
- アプリを起動します。
- 「Profiles」または類似の項目から、サブスクリプションリンクを追加するか、
.yaml設定ファイルをインポートします。 - インポートしたプロファイルを選択します。
- 接続ボタン(通常は飛行機アイコンなど)をタップして有効化します。AndroidのVPNサービスとして動作するため、VPN接続の許可を求めるダイアログが表示されます。
3.6. iOS版の導入
iOS/iPadOSでは、App Storeで配布されているサードパーティ製の有料アプリがmihomo互換のエンジンを内蔵していることが多いです。
- Shadowrocket: 古くからある人気のプロキシクライアント。Clash/mihomo設定ファイルのURLインポートに対応しています。
- Quantumult X: 高機能なプロキシクライアント。こちらもClash/mihomo設定ファイルに対応しています。
- Stash: macOS版と同様に、mihomo互換エンジンを内蔵し、Clash/mihomo設定ファイルに対応しています。
これらのアプリはApp Storeで購入する必要があります。機能やUIに違いがありますが、Clash/mihomo設定ファイルを読み込んでRule-based代理を行うという基本的な使い方は共通しています。
iOSクライアント(例: Stash)の一般的な導入手順:
- App Storeからアプリを購入・インストールします。
- アプリを起動します。
- 「Profiles」または類似の項目から、サブスクリプションリンクを追加するか、ローカルの
.yaml設定ファイルをインポートします。 - インポートしたプロファイルを選択し、有効化します。iOSのVPN構成プロファイルが作成されます。
- VPN接続の許可を求めるダイアログが表示されたら許可します。
3.7. ルーターへの導入(OpenWRTなど)
OpenWRTなどのカスタムファームウェアを搭載したルーターでは、mihomo(またはClash)をインストールしてルーターレベルでRule-based代理を行うことが可能です。これにより、ルーターに接続されたすべてのデバイス(PC, スマートフォン, スマートTV, ゲーム機など)を一元的に制御できます。
導入方法はルーターの機種やOpenWRTのバージョン、インストール方法(パッケージマネージャー、手動インストール)によって異なりますが、大まかな流れは以下の通りです。
- ルーターのCPUアーキテクチャに合ったmihomoバイナリを入手します。
- SSHなどでルーターに接続し、mihomoバイナリをルーターに転送・配置します。
- 設定ファイル(
config.yaml)をルーター上に作成・配置します。設定ファイルは、ルーター環境(特にDNS設定やTransparent Proxy設定)に合わせて調整が必要です。 - mihomoを起動します。通常はTransparent Proxyとして動作させ、iptables/nftablesなどのファイアウォールルールで通信をmihomoにリダイレクトします。
- mihomoをSystemd(またはOpenWRTのinitシステム)サービスとして登録し、自動起動するように設定します。
ルーターへの導入は、通常のクライアント導入よりも専門的な知識が必要になります。
3.8. 設定ファイルの準備
mihomoを起動するには、設定ファイル(config.yaml)が必須です。設定ファイルを用意する方法はいくつかあります。
- プロキシサービスのサブスクリプションリンクを利用: 多くのプロキシサービスプロバイダは、Clash/mihomo互換のサブスクリプションリンクを提供しています。このリンクをGUIクライアントやサブスクリプション変換ツールに入力すると、自動的に
.yaml設定ファイルが生成されます。これが最も一般的な方法です。 - サブスクリプション変換ツールを利用: プロキシサービスが提供するサブスクリプションリンクがmihomo形式でない場合(例: V2RayN, Surfboard形式)、サブスクリプション変換ツール(Subconverter, Clash-Sub-Converterなど)を使用してmihomo形式に変換できます。これらのツールはウェブサービスやローカルアプリケーションとして提供されています。
- 手動で作成: YAML形式の仕様に従って、自分で設定ファイルを一から作成します。プロキシ情報やルールを細かく制御したい場合に適しています。ただし、YAMLの構文(特にインデント)に注意が必要です。
通常はサブスクリプションリンクを利用するのが最も簡単です。GUIクライアントにリンクを貼り付けるだけで、最新の設定ファイルがダウンロードされます。
4. 設定ファイル詳細:mihomoの心臓部
mihomoのすべての動作は設定ファイルによって制御されます。ここでは、主要なセクションの詳細と記述例を解説します。
4.1. 基本設定
“`yaml
port: 7890 # HTTPプロキシポート (省略可、mixed-port推奨)
socks-port: 7891 # SOCKS5プロキシポート (省略可、mixed-port推奨)
mixed-port: 7890 # HTTP/SOCKS5両対応ポート
redir-port: 7892 # Redir/TProxy ポート (Linux向け、省略可)
tproxy-port: 7893 # TProxy ポート (Linux向け、省略可)
allow-lan: true # LANからの接続を許可するか (true/false)
bind-address: “” # 待ち受けアドレス (““, “127.0.0.1”, “0.0.0.0”など)
mode: rule # グローバルモード (global), ルールモード (rule), ダイレクトモード (direct)
log-level: info # ログレベル (debug, info, warning, error, silent)
external-controller: 127.0.0.1:9090 # 外部コントローラーAPI アドレス:ポート
secret: “your_api_secret” # 外部コントローラーAPI 認証パスワード (省略可)
GUIクライアントによっては上記の多くをGUIで設定できる場合があります
``mixed-port
*を使用するのが最も一般的です。allow-lan: true
*にすると、同じLAN内の他のデバイスからこのmihomoインスタンスをプロキシとして利用できるようになります。セキュリティに注意してください。mode
*はGUIクライアントで切り替えることが多いですが、設定ファイルでデフォルトを指定できます。ruleモードがRule-based代理を有効にするモードです。log-level
*はデバッグ時にdebugにすると詳細なログが出力されます。external-controller
*とsecretはGUIクライアントやダッシュボードとの連携に必要です。secret`は推測されにくい文字列に設定してください。
4.2. proxiesセクション
使用する個々のプロキシサーバーをリストで定義します。各項目はYAMLリストの要素として-で始まります。
“`yaml
proxies:
– name: “Example SS”
type: ss
server: ss.example.com
port: 443
cipher: aes-256-gcm
password: “your_password”
udp: true # UDPプロキシを有効にするか
-
name: “Example VMess”
type: vmess
server: vmess.example.com
port: 80
uuid: “your_uuid”
alterId: 0
cipher: auto # auto, aes-128-gcm, chacha20-poly1305
tls: true # TLSを有効にするか
network: “tcp” # tcp, ws, http, quic, grpc
ws-path: “/vmess” # WebSocketパス (networkがwsの場合)
ws-headers: # WebSocketヘッダー (networkがwsの場合)
Host: vmess.example.com -
name: “Example VLESS”
type: vless
server: vless.example.com
port: 443
uuid: “your_uuid”
tls: true
flow: “xtls-rprx-vision” # VLESS flow (xvless, xtls-rprx-origin, xtls-rprx-visionなど)
network: “tcp” # tcp, ws, http, quic, grpc
ws-path: “/vless”
ws-headers:
Host: vless.example.com
xudp: true # XUDPを有効にするか (networkがtcpの場合) -
name: “Example Trojan”
type: trojan
server: trojan.example.com
port: 443
password: “your_password”
tls: true
sni: trojan.example.com # SNI (省略可、serverと同じになることが多い)
network: “tcp” # tcp, ws, grpc
ws-path: “/trojan”
ws-headers:
Host: trojan.example.com -
name: “Example Hysteria2”
type: hysteria2
server: hysteria2.example.com
port: 443
password: “your_password”
obfs:
type: “websocket” # “none”, “websocket”
path: “/hysteria2” # websocketの場合のパス -
name: “Example TUIC”
type: tuic
server: tuic.example.com
port: 443
uuid: “your_uuid”
password: “your_password”
congestion-controller: bbr # bbr, cubic -
name: “HTTP Proxy”
type: http
server: http.example.com
port: 8080
username: “user” # 認証が必要な場合
password: “pass” -
name: “SOCKS5 Proxy”
type: socks5
server: socks5.example.com
port: 1080
username: “user” # 認証が必要な場合
password: “pass”
udp: true
``name
各プロキシの設定項目はプロトコルによって異なります。はこのプロキシを識別するためのユニークな名前で、proxy-groupsやrules`で参照されます。
4.3. proxy-groupsセクション
複数のプロキシをグループ化し、動的な選択ポリシーを定義します。
“`yaml
proxy-groups:
– name: “Proxy” # ユーザーが手動で選択するグループ
type: select
proxies:
– “Auto” # 別のグループを参照することも可能
– “Global”
– “DIRECT”
– “REJECT”
-
name: “Auto” # URLテストで最速を選択
type: urltest
url: “http://www.gstatic.com/generate_204” # テストURL
interval: 300 # テスト間隔(秒)
timeout: 5000 # テストタイムアウト(ミリ秒)
tolerance: 50 # 許容誤差(ミリ秒)。この範囲内の速度なら切り替えない。
proxies:- “Example SS”
- “Example VMess”
- “Example Trojan”
# ここに複数のproxy nameを列挙
-
name: “Fallback” # 接続に失敗した場合にフォールバック
type: fallback
url: “http://www.gstatic.com/generate_204” # テストURL
interval: 300 # テスト間隔(秒)
timeout: 5000 # テストタイムアウト(ミリ秒)
proxies:- “Example Hysteria2”
- “Example TUIC”
- “DIRECT” # フォールバックの最後にDIRECTを含めることも多い
-
name: “Global” # すべてを特定のプロキシ経由にするグループ(Ruleモードでも使用可能)
type: select
proxies:- “Auto”
- “DIRECT”
# 以下はルールで使用する可能性のある特殊なグループ
– name: “DIRECT” # プロキシを使用せず直接接続
type: select # 実体はselectだが、名前で特別扱いされることが多い
proxies:
– DIRECT
- name: “REJECT” # 通信を拒否
type: select # 実体はselectだが、名前で特別扱いされることが多い
proxies:- REJECT
``DIRECTとREJECTはmihomoに組み込まれた特別なアクションですが、慣習としてproxy-groups`セクションに含められることがあります(特にGUIクライアントとの互換性のため)。これらの名前は予約されています。
- REJECT
4.4. rulesセクション
通信をどのようにルーティングするかを定義します。リスト形式で記述し、上から順番に評価されます。
“`yaml
rules:
# ドメインベースのルール
– DOMAIN-SUFFIX,google.com,Auto # .google.com で終わるドメインは “Auto” グループを使用
– DOMAIN-KEYWORD,youtube,Auto # ドメインに “youtube” が含まれる場合は “Auto” グループを使用
– DOMAIN,twitter.com,Auto # twitter.com というドメインは “Auto” グループを使用
# IPアドレスベースのルール
– IP-CIDR,192.168.1.0/24,DIRECT # ローカルネットワークのIPは直接接続
– IP-CIDR,10.0.0.0/8,DIRECT
– IP-CIDR,172.16.0.0/12,DIRECT
– IP-CIDR,127.0.0.1/8,DIRECT # localhostは直接接続
# 地域ベースのルール (GEOIPデータベースが必要)
– GEOIP,CN,DIRECT # 中国本土のIPアドレスは直接接続 (検閲回避が目的ならPROXYグループにする)
– GEOIP,JP,DIRECT # 日本のIPアドレスは直接接続
# プロセス名やプロトコルベースのルール (GUIクライアントやOSサポートによる)
# – PROCESS-NAME,Thunder.exe,DIRECT # (WindowsなどのGUIクライアントが対応)
# – PROCESS-PATH,/Applications/Safari.app/Contents/MacOS/Safari,DIRECT # (macOSなどのGUIクライアントが対応)
# – DST-PORT,80,DIRECT # 宛先ポート80は直接
# – PROTOCOL,tcp,Auto # TCP通信はAutoグループ
# Fallbackルール:上記のどのルールにも一致しなかった場合のデフォルト
– FINAL,Proxy # または FINAL,DIRECT
``DOMAIN
* ルールタイプの主なもの:
*: 完全一致DOMAIN-SUFFIX
*: 後方一致(サブドメインを含む)DOMAIN-KEYWORD
*: キーワードが含まれるIP-CIDR
*: IPアドレス帯域GEOIP
*: 国コードによる判定(別途GEOIPデータベースが必要)FINAL
*: 最後のルール。必須。,
* ルールには複数の引数があります。カンマで区切ります。RULE_TYPE,ARGUMENT,PROXY_GROUP_OR_ACTION
**DIRECTとREJECTは特別なアクションです。DIRECTはプロキシを使わず直接接続、REJECTは接続を拒否します。GEOIP
*ルールを使用するには、別途GEOIPデータベースファイル(geoip.dat`など)が必要です。mihomoコアと同じディレクトリに配置するか、設定ファイルでパスを指定します。多くのGUIクライアントはGEOIPファイルを自動的に管理してくれます。
4.5. tunセクション
Tunモードを有効にする際の設定です。
“`yaml
tun:
enable: true # Tunモードを有効にするか (true/false)
stack: system # ネットワークスタック実装 (“system”または”gvisor”)
dns-hijack:
– 0.0.0.0:53 # DNSリクエストを捕捉してmihomoのDNSにリダイレクトするアドレス:ポート
– 192.168.1.1:53 # ルーターのDNSなども捕捉対象に含める場合
# auto-route: true # (多くのGUIクライアントでデフォルトで有効) システムルーティングテーブルにルールを追加
# auto-redir: true # (多くのGUIクライアントでデフォルトで有効) TProxy/Redirを利用して通信をリダイレクト
# For Windows
# interface-name: “mihomo Tun” # Windows上のTunアダプタ名
# gvisor-tun-fd:
# strict-route: true # (Windows) トラフィックがTunインターフェースからのみルーティングされるようにする
# For macOS
# dns-client-protocol: “tcp” # (macOS) DNSクライアントがTCPまたはUDPを使用するか (tcp/udp)
# For Linux
# device: “tun0” # Linux上のTunデバイス名
# uid:
# gid:
``enable: true
*でTunモードが有効になります。stack
*はsystemが推奨されますが、一部環境で問題がある場合はgvisorを試すこともあります。dns-hijack
*は、システムやアプリケーションがmihomo以外のDNSサーバーに直接クエリを送るのを防ぎ、強制的にmihomoのDNS処理を通すための設定です。通常は0.0.0.0:53`を含めます。
* WindowsやLinuxでTunモードを有効にするには、管理者権限が必要です。
4.6. dnsセクション
DNS(Domain Name System)関連の設定です。DNS Leakを防ぎ、Rule-basedルーティングの正確性を高める上で非常に重要です。
“`yaml
dns:
enable: true # DNS機能を有効にするか
listen: 0.0.0.0:53 # クライアントからのDNSクエリを待ち受けるアドレス:ポート (通常は53)
# DNSモード
enhanced-mode: fake-ip # Fake IPモード (fake-ip), リダイレクトモード (redir-host), 透明DNS (tun)
# Fake IP 設定 (enhanced-mode: fake-ip の場合)
fake-ip-range: 198.18.0.1/16 # Fake IPとして使用するプライベートIPアドレス帯域
fake-ip-filter: # Fake IPを適用しないドメイン (多くはローカルネットワーク関連)
– +.lan
– +.local
– +.corp
– +.home
– .lan
– .local
– .corp
– .home
– localhost.localdomain
– localhost
– “.msftconnecttest.com”
– “.nssvc.com”
– time..com
– time..gov
– time..edu
– time..net
– time.*.org
– time.nist.gov
# ネームサーバー設定
nameserver: # 通常のDNSクエリに使用するネームサーバー
– 114.114.114.114 # 例:中国のPublic DNS
– 223.5.5.5 # 例:中国のPublic DNS
– dhcp://en0 # (macOS/Linux) DHCPから取得したDNSサーバーを使用
– system # システム設定のDNSサーバーを使用
fallback: # nameserverで名前解決できなかった場合や、特定の状況 (GEOIPなど) で使用するネームサーバー
– 8.8.8.8 # 例:Google Public DNS
– 1.1.1.1 # 例:Cloudflare Public DNS
– https://dns.google/dns-query # 例:Google Public DNS DoH
– tls://1.1.1.1:853 # 例:Cloudflare Public DNS DoT
fallback-filter: # fallbackネームサーバーを使用する条件
geoip: true # GEOIPルールにマッチした場合にfallbackを使用 (通常は海外IP判定)
geoip-code: CN # GEOIPが指定した国コードの場合にfallbackを使用
ipcidr: # 特定のIP帯域へのクエリでfallbackを使用
– 240.0.0.0/4
# hostsファイルの読み込み
# hosts:
# ‘host.example.com’: 1.2.3.4
# ‘*.wildcard.com’: 5.6.7.8
# DNS over TLS/HTTPS (DoT/DoH) 用のネームサーバー指定例
# nameserver:
# – https://dns.google/dns-query # Google DoH
# – tls://1.1.1.1:853 # Cloudflare DoT
# – quic://dns.adguard.com:784 # AdGuard QUIC DNS
# 可用性チェック
# listen: 0.0.0.0:53 # デフォルトDNSポート
# fake-ip: true # Fake IPモード
# enhanced-mode: fake-ip
# nameserver:
# – 114.114.114.114 # 国内DNS
# – 223.5.5.5 # 国内DNS
# fallback:
# – 8.8.8.8 # 国外DNS (Google)
# – 1.1.1.1 # 国外DNS (Cloudflare)
# fallback-filter:
# geoip: true # GEOIP判定結果で fallback を使用するか決定
# geoip-code: CN # GEOIP判定がCNの場合 nameserver を使用
``enhanced-mode: fake-ip
*が最も一般的な設定です。mihomoがドメイン解決を制御し、対応する内部的なFake IPを返します。実際の通信が行われる際に、mihomoがFake IPから元のドメイン名を取得してルールを適用します。これにより、DNSクエリの結果によらず、ドメイン名で厳密にルーティングできます。nameserver
*には、通常使用したい信頼できるDNSサーバーを指定します。国内サイトを直接接続する場合、国内のDNSを指定すると名前解決が速いことがあります。fallback
*には、nameserverで解決できなかった場合や、特定の条件(fallback-filter)に一致した場合に使用するDNSサーバーを指定します。海外のDoH/DoTサーバーを指定すると、DNS Leakを防ぎつつ、海外サイトの名前解決を確実に行えます。fallback-filter
*は重要です。例えばgeoip: trueを設定すると、mihomoがGEOIPデータベースで判定したIPアドレスが海外だった場合、fallbackのDNSサーバーを使用して再度名前解決を行います。これにより、国内・海外サイトの名前解決を効率的に振り分けられます。geoip-code: CNを追加すると、GEOIPがCNの場合はnameserverを使用し、それ以外(海外と判定された場合)にfallback`を使用、という設定になります。
4.7. mixin機能
複数のYAML設定ファイルをマージして一つの設定として使用する機能です。これにより、プロキシリスト、プロキシグループ、ルールなどを異なるファイルで管理し、組み合わせて使用できます。
“`yaml
main_config.yaml
port: 7890
mixed-port: 7890
allow-lan: true
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
secret: “your_api_secret”
tun:
enable: true
stack: system
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
– +.lan
– .local
– “.msftconnecttest.com”
mixin:
# proxies と proxy-groups は subscription_proxies.yaml から読み込む
# rules は my_rules.yaml と subscription_rules.yaml から読み込む
# dns の nameserver は my_dns.yaml から読み込む
append-proxies:
– file: subscription_proxies.yaml
# name:
append-proxy-groups:
– file: subscription_proxy_groups.yaml
append-rules:
– file: my_rules.yaml
– file: subscription_rules.yaml
append-dns:
nameserver:
– file: my_dns.yaml
subscription_proxies.yaml (このファイルには proxies セクションのみ記述)
proxies:
– name: “Sub Proxy 1”
type: ss
server: …
…
– name: “Sub Proxy 2”
type: vmess
server: …
…
my_rules.yaml (このファイルには rules セクションのみ記述)
rules:
– DOMAIN-SUFFIX,mybank.com,DIRECT
– DOMAIN-KEYWORD,internal,DIRECT
subscription_rules.yaml (このファイルには rules セクションのみ記述)
rules:
– DOMAIN-SUFFIX,google.com,Auto
– DOMAIN-KEYWORD,youtube,Auto
– FINAL,Proxy
``mixinを使用すると、プロキシサービスのサブスクリプションから取得した設定と、自分でカスタマイズした設定(例えば、特定のサイトを直接接続するルールなど)を分離して管理できます。サブスクリプションを更新しても、カスタマイズした設定が上書きされるのを防ぐことができます。append-*`を使用すると、既存の設定にリストの内容を追加します。
5. 運用編:mihomoを日常的に使う
mihomoの導入が完了し、設定ファイルが準備できたら、次は実際に運用を開始します。CLIでの操作とGUIクライアントでの操作、各種モードの切り替え、ルールの最適化、ログの確認方法などを解説します。
5.1. CLIでの操作方法
mihomoコアをコマンドラインで実行する場合、以下の基本的な操作があります。
- 起動: 指定した設定ファイルでmihomoを起動します。
bash
mihomo -f /path/to/config.yaml
Windowsではmihomo.exeです。 - 設定ファイルの確認: 設定ファイルの構文にエラーがないか確認します。
bash
mihomo check -f /path/to/config.yaml - 設定のリロード: mihomoを停止せずに設定ファイルを再読み込みします。
external-controllerが有効になっている必要があります。
bash
# 例: curlコマンドを使用してAPI経由でリロード
curl -X PUT -d '{"path": "/path/to/new_config.yaml"}' http://127.0.0.1:9090/configs?token=your_api_secret
GUIクライアントは通常、このAPIを内部的に使用して設定をリロードします。 - 停止: mihomoプロセスを終了させます。
- Ctrl+C (フォアグラウンド実行の場合)
kill <process_id>(Linux/macOS)- Systemdサービスとして実行している場合は
sudo systemctl stop mihomo
CLIでの運用は、サーバー環境やスクリプトからの自動制御に適しています。
5.2. GUIクライアントでの操作方法
多くのユーザーはGUIクライアントを利用します。基本的な操作はクライアントによって異なりますが、共通する概念があります。
- プロファイルの管理: プロキシサービスのサブスクリプションリンクを追加・更新したり、ローカルの
.yamlファイルをインポート・エクスポートしたりします。複数のプロファイルを切り替えて使用できます。 - mihomoの有効化/無効化: クライアントのメイン画面にある大きなボタンやトグルスイッチで、mihomoによる通信代理を開始/停止します。これにより、Tunモードやシステムプロキシが有効/無効になります。
- モードの切り替え: Ruleモード、Globalモード、Directモードなどを切り替えます。
- Rule: 設定ファイルで定義されたルールに基づいてルーティングします(最も一般的)。
- Global: すべての通信を設定ファイルで定義された特定のプロキシグループ(通常は
Globalという名前のSelectグループ)を経由させます。 - Direct: すべての通信を直接接続させ、プロキシを使用しません。
- プロキシの選択:
selectタイプのプロキシグループ(例えばProxyやAutoグループ)内で、使用したいプロキシサーバーを手動で選択します。 - 速度テスト:
urltestグループなどで、各プロキシの接続速度をテストし、応答時間などを確認します。手動でテストを実行できるクライアントもあります。 - ログの確認: mihomoコアが出力するログを表示します。通信がどのルールにマッチし、どのプロキシが使用されたかなどを確認でき、デバッグに役立ちます。
- 接続情報の確認: 現在の通信速度、アクティブな接続、使用されているプロキシなどの統計情報を表示します。
- システム設定: Tunモードの有効化/無効化、システムプロキシ設定などをGUIから行います。
5.3. 各種モードの使い分け
- Ruleモード: デフォルトかつ最も推奨されるモードです。設定ファイルで定義されたルールに基づいて通信をルーティングするため、国内サイトは直接、海外サイトはプロキシ経由といった使い分けが自動的に行われます。これがmihomoの真価を発揮するモードです。
- Globalモード: すべての通信を特定のプロキシ経由で行いたい場合に使用します。Ruleモードではアクセスできない特定のサイトに一時的にアクセスしたい場合などに便利です。ただし、すべての通信がプロキシを経由するため、国内サイトへのアクセス速度が低下したり、プロキシサービスの帯域幅を無駄に消費したりする可能性があります。
- Directモード: mihomoを一時的に無効化したい場合や、Rule/Globalモードで問題が発生した場合に、すべての通信を直接接続させるモードです。プロキシサービスが不要な作業を行う際に使用します。
これらのモードはGUIクライアントのインターフェースから簡単に切り替えられます。
5.4. プロキシグループの活用
プロキシグループはmihomoの柔軟性を高める重要な機能です。
selectグループ: 手動での切り替えを頻繁に行うプロキシ(例:国別プロキシ)や、モード切り替え用のDIRECT,REJECT,Globalなどをまとめるのに適しています。urltestグループ: 複数のプロキシサーバーから自動的に最速のサーバーを選択したい場合に最適です。動画ストリーミングやダウンロードなど、速度が重要な用途で利用します。設定のintervalとtimeoutは、テストの頻度と応答時間の上限を決定します。fallbackグループ: 安定性が重要な用途に適しています。一つのプロキシがダウンしても、すぐに別の利用可能なプロキシに切り替わります。ウェブサイト閲覧など、応答速度よりも安定性が優先される場合に利用します。テストに失敗した場合にリストの次のプロキシが試されます。
5.5. ルール設定の最適化
ルール設定はmihomoのパフォーマンスと使い勝手に大きく影響します。
- ルールの順番: ルールは上から順番に評価されます。よくアクセスするサイトや、確実に特定のプロキシ/アクションで処理したい通信に関するルールは、リストの上の方に配置すると処理が速くなります。
- GEOIPルールの活用: GEOIPルールはIPアドレスの地域に基づいて判断するため、広範囲のIPアドレスに適用できます。特定の国の通信をまとめて処理したい場合に便利です(例:
GEOIP,CN,DIRECTやGEOIP,OTHER,Proxy)。ただし、GEOIPデータベースの精度に依存します。 - FINALルールの設定:
FINALルールは必ず設定し、どのルールにも一致しなかった場合のデフォルトの動作を明確に定義します。一般的にはFINAL,ProxyまたはFINAL,DIRECTのどちらかになります。 - 不要なルールの削除: 使用しないルールや、他のルールと重複しているルールは削除し、シンプルに保つことでパフォーマンスが向上し、デバッグも容易になります。
- 特殊なサイトへの対応: 特定のウェブサイトやサービスがmihomo経由で正常に動作しない場合、そのサイトを
DIRECTまたは別のプロキシグループにルーティングする専用のルールを追加する必要があるかもしれません。ブラウザの開発者ツールやmihomoのログを見て、アクセス先のドメインやIPを確認し、適切なルールを作成します。
5.6. DNS設定の重要性
DNS設定は、Rule-basedルーティングの正確性とプライバシー保護のために非常に重要です。
- DNS Leak対策: TunモードとFake IP、そして信頼できるDoH/DoTネームサーバーを組み合わせることで、DNSクエリがプロキシを経由せずに漏洩する「DNS Leak」を防ぐことができます。
- Fake IPの利点: Fake IPモードでは、すべてのドメイン名解決をmihomoが一元管理し、ルール適用をドメイン名に対して行うため、IPアドレスが変わるCDNなどを使用しているサイトでも安定したルーティングが可能です。
- ネームサーバーの選択:
nameserverには高速で信頼できる公共DNSや、プライバシーを考慮したDoH/DoTサーバーを選択します。国内サイトへのアクセスが多い場合は、国内のDNSを優先的に配置すると応答速度が向上する可能性があります。 - fallbackとfallback-filter: これらを適切に設定することで、国内・海外の名前解決を効率的に振り分けたり、特定の条件下でのみ別のDNSサーバーを使用したりできます。
5.7. ログの確認とデバッグ
mihomoのログは、通信がどのように処理されたか、どのルールが適用されたか、プロキシへの接続状況などを確認するための重要な情報源です。
- ログレベル: 設定の
log-levelをinfoまたはdebugに設定すると詳細なログが出力されます。通常はinfoで十分ですが、問題発生時はdebugにすると詳細なデバッグ情報が得られます。 - ログの表示: GUIクライアントは通常、「Logs」や「Connections」といったタブでリアルタイムのログを表示します。CLI版では、実行中のターミナルに出力されます。
- ログの解析:
- 特定の通信が意図したプロキシ/アクションで処理されているか確認します。ログには通常、
[Rule]や[Proxy]といったタグと共に、適用されたルールや使用されたプロキシが表示されます。 - プロキシへの接続エラー(タイムアウト、認証失敗など)を確認します。
- DNS解決に関する問題を確認します。
- 特定の通信が意図したプロキシ/アクションで処理されているか確認します。ログには通常、
- Connection情報の活用: 多くのGUIクライアントは現在アクティブな接続の一覧を表示します。これにより、どのアプリケーションが、どの宛先に、どのプロキシ/ルールを使って通信しているかをリアルタイムに確認できます。特定の通信を右クリックして、その通信に使用されたルールやプロキシグループを表示できるクライアントもあります。
5.8. 更新方法
mihomoコアおよびGUIクライアント、設定ファイルは定期的に更新されます。
- mihomoコアの更新: GitHub Releasesから最新版のバイナリをダウンロードし、既存のバイナリと置き換えます。GUIクライアントを使用している場合は、クライアント自体にmihomoコアが含まれているため、クライアントアプリをアップデートすることでコアも更新されます。
- GUIクライアントの更新: アプリケーションストアや開発元のウェブサイトから最新版をダウンロードしてインストールします。
- 設定ファイルの更新: サブスクリプションリンクを利用している場合、GUIクライアントの「Update Profile」などの機能で簡単に最新版を取得できます。手動で管理している場合は、必要に応じてファイルを編集・更新します。設定ファイルを更新した際は、mihomoを再起動または設定リロードする必要があります。
定期的な更新は、新機能の利用、バグ修正、セキュリティパッチの適用、新しいプロトコルへの対応のために重要です。
6. 応用編:mihomoをもっと活用する
mihomoの基本機能をマスターしたら、さらに踏み込んだ活用方法を探ってみましょう。
6.1. サブスクリプション変換ツールの利用
プロキシサービスのサブスクリプション形式がmihomoと互換性がない場合や、複数のサブスクリプションを統合したい場合、特定のプロキシを除外したい場合などにサブスクリプション変換ツールが役立ちます。
- Subconverter: 広く使われているオープンソースの変換ツール。様々な入力形式(VMess share link, SSR subscribe, V2RayN, Surfboardなど)をmihomo形式(
.yaml)に変換できます。ルールやプロキシグループのフィルタリング・追加・削除なども可能です。Webサービスとして公開されているものや、Dockerコンテナとして自分でホストできるものがあります。 - Clash-Sub-Converter: 同様の機能を持つツール。
これらのツールを利用することで、プロキシサービスの提供形式に依存せず、カスタマイズされたmihomo設定ファイルを生成できます。
6.2. 自宅サーバー/VPSでの運用
mihomoを自宅サーバーやVPS上で動作させ、LAN内の他のデバイスや外出先からVPN/プロキシ経由でアクセスすることで、一元的なゲートウェイとして利用できます。
- セットアップ: Linuxサーバー上にmihomoコアをインストールし、Systemdサービスとして常時起動させます。設定ファイルはサーバーのネットワーク環境に合わせて調整が必要です。
- アクセス方法:
- LAN内:
allow-lan: trueと適切なbind-address設定により、他のデバイスからサーバーのmihomoポート(mixed-portなど)をプロキシとして指定します。 - LAN外: 自宅サーバーの場合はDDNSやポートフォワーディング設定、VPSの場合は固定IPアドレスなどが必要です。さらに、よりセキュアにアクセスするためにVPN(WireGuard, OpenVPNなど)を構築し、VPN経由でサーバーのmihomoに接続する方法が推奨されます。
- LAN内:
- 利点: 複数のデバイスで同じプロキシ設定やルールを共有できる、外出先から自宅のネットワーク環境を経由してアクセスできるなど。
- 注意点: サーバーのセキュリティ設定を怠ると、不正利用されるリスクがあります。ファイアウォールでアクセス元IPアドレスを制限したり、APIに強力なパスワードを設定したりするなどの対策が必要です。
6.3. 特定のプロトコルへの対応
mihomoは多数のプロトコルに対応していますが、特定のプロトコル(例: Hysteria2, TUIC)を利用するには、対応したバージョンのmihomoコアが必要です。また、プロキシサービス側もそのプロトコルをサポートしている必要があります。
- Hysteria2: QUICベースの高速プロトコルで、特に通信速度が不安定な環境でのスループット向上に強みがあります。
obfs設定による難読化機能も持ちます。 - TUIC: UDPベースのプロトコルで、TCP通信の遅延問題を改善し、耐検閲性を高めることを目指しています。
これらの新しいプロトコルは、従来のTCPベースのプロトコル(SS, VMess, Trojan over TLSなど)と比較して、特定のネットワーク環境でより高いパフォーマンスや安定性、あるいは耐検閲性を提供する可能性があります。設定ファイルでの記述方法は前述のproxiesセクション例を参考にしてください。
6.4. スクリプト機能(JavaScript/Lua)の活用
mihomoは、設定ファイル内でJavaScriptまたはLuaスクリプトを実行し、ルールやプロキシ選択のロジックをより複雑に制御する機能を持っています。
“`yaml
設定ファイル例
script:
enable: true
engine: js # または lua
script: |
// JavaScriptのコードをここに記述
// proxy_group_name: string (グループ名)
// rule_list: array of Rule
// 返回值必须是规则列表,否则会出错
function main(proxy_group_name, rule_list) {
// 例: 特定のグループではルールを変更
if (proxy_group_name === “MyCustomGroup”) {
// rule_list を編集
}
return rule_list;
}
“`
スクリプト機能を使用することで、例えば:
- 時間帯によって異なるプロキシグループを使用する。
- 特定のアプリケーションからの通信に対して、動的にルールを生成・変更する。
- 外部の状態(例えば、ping応答時間)に基づいてプロキシグループ内のサーバーの優先順位を動的に変更する。
など、高度なカスタマイズが可能になります。ただし、スクリプトの記述にはプログラミングの知識が必要です。
6.5. External Controller APIの活用
mihomoのExternal Controller APIを利用すると、外部アプリケーションやスクリプトからmihomoの状態監視や制御を行うことができます。
- APIエンドポイント:
external-controller設定で指定したアドレスとポートで待ち受けます。通常はHTTP APIです。 - 認証:
secret設定で指定したパスワードを、APIリクエストヘッダー(Authorization: Bearer your_api_secret)またはクエリパラメータ(?token=your_api_secret)で送信して認証を行います。 - 機能:
- 現在の設定、プロキシリスト、プロキシグループの取得。
- ルールにマッチしたコネクションリストの取得。
- プロキシグループ内のプロキシの手動切り替え。
- 設定ファイルのリロード。
- トラフィック統計情報の取得。
- 活用例:
- カスタムダッシュボードアプリケーションの作成。
- 自動テストスクリプトからのプロキシ制御。
- 他のシステムとの連携(例: ネットワーク監視システムとの連携)。
多くのGUIクライアントは、このAPIを使用してmihomoコアと通信しています。
7. トラブルシューティング:問題が発生した場合の対処法
mihomoの運用中に発生しうる一般的な問題と、その対処法を解説します。
7.1. 接続できない場合
- mihomoコアが起動しているか確認: GUIクライアントの場合、有効化ボタンがオンになっているか、ステータス表示を確認します。CLIの場合、プロセスが実行中か確認します(Linux:
ps aux | grep mihomo)。 - 設定ファイルの確認: 設定ファイルに構文エラーがないか、
mihomo check -f config.yamlなどで確認します。インデントミスが多いです。 - プロキシサーバーの設定確認:
proxiesセクションのサーバーアドレス、ポート、プロトコル、認証情報が正しいか確認します。プロキシサービス提供元の情報と照合してください。 - プロキシサーバーが稼働しているか確認: 他のツール(ping, telnetなど)や、プロキシサービス提供元のダッシュボードなどで、プロキシサーバー自体が正常に稼働しているか確認します。
- ファイアウォールの確認: OSやネットワーク機器のファイアウォールが、mihomoの通信やプロキシサーバーへの接続をブロックしていないか確認します。特にWindows FirewallやLinuxのiptables/nftables、ルーターのファイアウォール設定。
- モードの確認: GlobalモードやRuleモードになっているか確認します。Directモードではプロキシは使用されません。
- ログの確認: mihomoのログ(
log-level: info以上)を確認し、接続エラーやDNS解決エラーに関するメッセージがないか探します。 - Tunモードの確認: Tunモードが有効になっているか、OSのネットワークアダプタにTunデバイスが表示されているか(Windowsのデバイスマネージャー、Linuxの
ip aなど)確認します。管理者権限で実行されているか、Tunドライバが正しくインストールされているかも重要です。
7.2. 速度が出ない場合
- プロキシサーバーの選択:
urltestグループで速度テストを行い、最も高速なサーバーを選択しているか確認します。selectグループの場合は、手動で複数のプロキシを試してみてください。 - プロキシサーバーの負荷: 使用しているプロキシサーバーが混雑している可能性があります。他のサーバーに切り替えるか、別のプロキシサービスを検討します。
- ネットワーク環境: 自身のインターネット回線速度、プロキシサーバーまでの物理的な距離、経由するネットワーク経路などが速度に影響します。
- プロトコルの変更: 利用可能なプロトコルの中で、Hysteria2やTUICなど、より高速なプロトコルが利用できるか試します。
- DNS設定: 高速なDNSサーバー(特に国内サイトの場合、国内DNS)を使用しているか確認します。Fake IPモードが有効になっているか、
fake-ip-filterが適切かどうかも確認します。 - Rule設定: 不必要にプロキシを経由させている通信がないか確認します。国内サイトへのアクセスは
DIRECTにするなど、ルールを見直します。 - TCP BBRなどの輻輳制御: プロキシサーバー側でTCP BBRなどの輻輳制御アルゴリズムが有効になっているか確認します(サーバー側の設定によります)。
7.3. 特定のサイトにアクセスできない場合
- Rule設定の確認: そのサイトへのアクセスに関するルールが正しく設定されているか確認します。例えば、
DOMAIN-SUFFIXやDOMAIN-KEYWORDルールが他のルールと競合していないか、より特異的なルールが上にあるかなど。 - ログの確認: そのサイトへのアクセス試行がどのルールにマッチし、どのプロキシグループ/アクションで処理されているかログで確認します。意図しないプロキシが使用されていたり、
REJECTされていたりしないか確認します。 - DNS解決の確認: mihomoのDNS設定がそのサイトの名前解決に問題を引き起こしていないか確認します。Fake IPモードの場合、
fake-ip-filterにそのサイトを追加すると解決することがあります(ただし、RuleベースルーティングがIPアドレスに基づいて行われるようになるため、意図しない結果になる可能性もあります)。 - プロキシサーバーの問題: 使用しているプロキシサーバーがそのサイトへのアクセスをブロックしている可能性があります。別のプロキシサーバーに切り替えてみます。
- Globalモードで試す: 一時的にGlobalモードに切り替えて、すべての通信を特定のプロキシ経由にすることでアクセスできるか試します。これでアクセスできる場合、Rule設定に問題がある可能性が高いです。
7.4. DNS関連の問題
- DNS Leak:
dns-hijack設定が適切か、Tunモードが有効になっているか確認します。enhanced-mode: fake-ipと信頼できるfallbackネームサーバー(DoH/DoT推奨)の組み合わせが最も効果的です。 - 名前解決が遅い/失敗する:
nameserverとfallbackに設定したDNSサーバーが正常に機能しているか、応答が遅くないか確認します。複数のサーバーを設定し、信頼性を高めます。 - Fake IP関連: Fake IPを使用している環境で、特定のアプリケーションがローカルIPアドレスやプライベートIPアドレスにアクセスしようとして問題が発生する場合、そのドメインやIP帯域を
fake-ip-filterに追加します。
7.5. Tunモードが有効にならない場合
- 管理者権限: Tunモードを有効にするには、通常管理者権限が必要です。GUIクライアントを右クリックして「管理者として実行」したり、Systemdサービスをroot権限で実行したりしているか確認します。
- Tunドライバ/コンポーネント: WindowsではTap-Windowsアダプタや、mihomo/クライアント固有のTunコンポーネントが正しくインストールされているか確認します。macOSではNetwork Extension、Linuxでは
TUNモジュールがカーネルで有効になっているか確認します。 - 他のVPN/プロキシツールとの競合: 同時に複数のVPNやプロキシツール(特にシステムレベルで動作するもの)を有効にすると競合する場合があります。他のツールを無効にして試します。
- OSのバージョン/設定: 特定のOSバージョンやネットワーク設定(例: WindowsのWSL2やHyper-Vなど)がTunモードに影響を与える場合があります。クライアントのドキュメントやコミュニティ情報を参照します。
stack設定:tunセクションのstack設定をsystemからgvisorに変更すると解決する場合があります。
8. セキュリティとプライバシー:安全にmihomoを使うために
mihomoは強力なツールですが、安全に利用するためにはいくつかの注意点があります。
- 信頼できるプロキシサービスの選択: プロキシサービス提供元はあなたのインターネット通信をすべて見ることができます。信頼できる実績があり、プライバシーポリシーが明確なサービスを選択することが最も重要です。無料のプロキシサービスは通常、信頼性が低く、プライバシーリスクが高いです。
- 設定ファイルの取り扱い: サブスクリプションリンクや設定ファイルにはプロキシサーバーの認証情報が含まれています。これらの情報を安易に第三者に共有したり、安全でない場所に保存したりしないでください。
- APIパスワードの設定:
external-controllerを有効にする場合は、必ずsecretで強力なパスワードを設定し、APIへのアクセスを制限します。特にallow-lan: trueにしている場合は必須です。 - DNS Leak対策: 前述の通り、Tunモード、Fake IP、信頼できるDoH/DoTサーバーを組み合わせてDNS Leakを防ぎます。定期的にオンラインのDNS Leakテストツールで確認することをお勧めします。
- GEOIPデータベース: GEOIP機能を使用する場合、使用するデータベース(
geoip.datなど)の信頼性も考慮する必要があります。公式なものか、広く使われている信頼できるソースからのものか確認します。 - ソフトウェアの入手元: mihomoコアやGUIクライアントは、必ず公式GitHubリリースページや、信頼できる開発元のウェブサイト/ストアからダウンロードしてください。非公式な配布元からの入手は、マルウェアなどが混入しているリスクがあります。
- ログの管理: 詳細なログを有効にしている場合、ログファイルにはアクセス履歴などのプライベートな情報が含まれる可能性があります。ログファイルの保存場所やアクセス権限に注意し、不要になったログは安全に削除します。
9. 今後の展望
mihomoプロジェクトは活発に開発が続けられています。今後も新しいプロキシプロトコルへの対応、パフォーマンスの向上、機能の追加などが期待されます。Clashエコシステム全体も、様々なフォークやクライアントが並存しつつ進化していくと考えられます。ユーザーとしては、公式情報や信頼できるコミュニティ情報を定期的にチェックし、最新の状況を把握することが重要です。
10. まとめ
mihomo(旧Clashコア)は、2024年現在もRule-based代理の強力なツールとして、多くのユーザーに利用されています。多様なプロトコル対応、柔軟なルーティング設定、Tunモードによるシステムレベルの制御、詳細なDNS設定など、その機能は非常に豊富です。
この記事では、mihomoの基礎から、Windows/macOS/Linux/Android/iOS/ルーターといった各プラットフォームでの導入方法、詳細な設定ファイルの記述方法、GUI/CLIでの運用方法、トラブルシューティング、さらにはスクリプトやAPIといった応用機能まで、網羅的に解説しました。
mihomoを使いこなすには、YAML形式の設定ファイルを理解し、自身のネットワーク環境や利用目的に合わせて適切にカスタマイズすることが鍵となります。特にproxies, proxy-groups, rules, tun, dnsの各セクションはmihomoの心臓部であり、これらの設定を理解すれば、mihomoのほとんどの機能を制御できるようになります。
mihomoは強力なツールであると同時に、設定の複雑さや、プロキシサービスの選択、セキュリティへの配慮など、いくつかの注意点もあります。この記事で得た知識を元に、自身の環境に合わせてmihomoを安全かつ効果的に活用してください。インターネットの自由とプライバシーを守る上で、mihomoはその強力な味方となるでしょう。