超多機能プロキシツール「mihomo」とは?メリット・設定方法を徹底解説
インターネットは私たちの日常生活に欠かせないインフラとなりましたが、同時にセキュリティ、プライバシー、そして地域制限といった様々な課題も存在します。これらの課題に対処するための強力なツールとして、プロキシサーバーやプロキシツールが広く利用されています。しかし、従来のプロキシツールは機能が限定的であったり、設定が複雑であったり、最新のプロトコルに対応していなかったりといった限界がありました。
そんな中、近年注目を集めているのが、超多機能かつ高性能なプロキシコア「mihomo」です。mihomoは、人気のプロキシツール「Clash」のコア開発者が新たにGo言語で開発した、Clash Coreの後継とも言える存在です。その圧倒的な柔軟性、対応プロトコルの豊富さ、そして高いパフォーマンスにより、プロキシツールの新たなスタンダードになりつつあります。
この記事では、このmihomoについて、その正体から始まり、どのような機能があるのか、利用することでどのようなメリットが得られるのか、そして具体的な設定方法まで、約5000語のボリュームで徹底的に解説します。高度なネットワーク設定に興味がある方、従来のプロキシツールに物足りなさを感じている方、最新のプロキシ技術を使いこなしたいと考えている方にとって、必読の内容となるでしょう。
さあ、mihomoの奥深い世界へ踏み込んでいきましょう。
1. はじめに:プロキシツールの現状とmihomoの登場
インターネットを利用する上で、私たちは様々な理由からプロキシツールを使用することがあります。
- セキュリティとプライバシーの向上: 通信を暗号化したり、IPアドレスを隠蔽したりすることで、第三者による盗聴や追跡を防ぎます。
- 地域制限の回避: 特定の国や地域からしかアクセスできないサービスやコンテンツにアクセスするために利用します。
- 通信の最適化: 特定のトラフィックを特定の経路に振り分けたり、遅延の少ないサーバーを選択したりすることで、通信速度や安定性を向上させます。
- ネットワークの可視化と制御: 通信内容や経路を監視し、不要な通信をブロックしたり、特定のアプリケーションの通信を制御したりします。
しかし、従来のプロキシツールにはいくつかの課題がありました。
- 設定の複雑さ: 特に高度なルーティング設定や複数プロキシの管理は、専門知識が必要で煩雑になりがちでした。
- 対応プロトコルの限定: 新しいプロトコル(VMess, VLESS, Trojan, Hysteria, TUICなど)への対応が遅れていたり、一部のプロトコルしかサポートしていなかったりすることがありました。
- 機能の限定: 柔軟なルール設定、Policy Group(プロキシグループ)による高機能な振り分け、詳細なDNS設定などが十分ではないツールもありました。
- パフォーマンス: シングルスレッドで動作するものや、効率の悪い実装により、高速な通信に対応できないケースもありました。
これらの課題に対し、一つの革新的なツールが登場し、多くのユーザーに支持されました。それが「Clash」です。Clashは、YAML形式による柔軟な設定、ルールベースのルーティング、Proxy Group機能、豊富なプロトコル対応などを特徴とし、プロキシツールのデファクトスタンダードの一つとなりました。
しかし、Clashの開発が停滞し、将来が不透明になった時期がありました。そんな状況下で、Clash Coreの主要開発者の一人が、Clash Coreの思想を受け継ぎつつ、さらに発展させる形で新たに開発を始めたのが「mihomo」です。mihomoはClash Coreをベースとしながらも、完全にGo言語でゼロから書き直されており、より高いパフォーマンス、安定性、そして将来的な拡張性を持っています。
この記事では、このmihomoに焦点を当て、その強力な機能と設定方法を詳しく解説していきます。
2. mihomoとは? Clashとの関係性
mihomoは、高性能なネットワークプロキシコアであり、プロキシツールとしての中核部分を提供します。ユーザーが直接mihomoを利用する場合もありますが、多くの場合、mihomoを「コア」として利用する様々なGUIクライアント(アプリ)を通じて間接的に利用されます。
mihomoの概要:
- 名称: mihomo (旧称 Clash.Meta / Clash kernel)
- 開発言語: Go
- 特徴: 高性能、クロスプラットフォーム、豊富なプロトコル対応、強力なルーティング機能
- 役割: プロキシサーバーへの接続管理、ルーティング処理、DNS処理などプロキシ通信の根幹を担う
mihomoは、プロキシサーバーへの接続確立、送受信データの処理、設定ファイルに基づいてどの通信をどのプロキシサーバー経由で送るか(または直連するか、ブロックするか)を決定するルーティング処理、DNSリクエストの処理などを担当します。つまり、プロキシツールとしての「脳」の役割を果たします。
mihomoとClash/Clash Meta/Clash Premiumの関係性:
mihomoの歴史と理解には、Clashファミリーの関係性を理解することが不可欠です。
- Clash: オリジナルのClashプロジェクトです。Rust言語で開発されたコア部分があり、多くのGUIクライアントが登場しました。YAML形式の設定ファイルとルールベースのルーティングという革新的な概念を広めました。しかし、開発がアクティブでなくなった時期がありました。
- Clash Premium: Clashの開発元が提供していた、クローズドソースの高性能なClashコアです。TUNモードやTAPモードといった、OSレベルで通信を捕捉・処理する機能などを提供していました。一部の商用クライアントで利用されていました。
- Clash Meta (旧称): これは、Clashコミュニティのコントリビューターによって開発された、Clash Premiumの機能をオープンソースで実装しようとするプロジェクトでした。TUNモード、Ruleset、Scriptingなど、Clash Premiumやそれ以上の機能を追加しました。mihomoは、このClash Metaプロジェクトのコア開発者の一人が、その開発をさらに進化させるために、Clash Coreのコードベースから離れてGo言語でゼロから書き直したものです。
- mihomo: Clash Metaの事実上の後継プロジェクトであり、現在の名称です。開発言語をGoに変更したことで、ビルドの容易さ、クロスコンパットフォーム性の向上、そして潜在的なパフォーマンス向上を実現しています。Clash Metaが持っていた豊富な機能(多数のプロトコル、TUN、Ruleset、Scriptingなど)を引き継ぎつつ、さらに新しいプロトコル(例: TUIC)への対応も迅速に行っています。
つまり、mihomoは、オリジナルのClashの思想とClash Metaで培われた先進的な機能を、Go言語で再構築した、現在のClashファミリーの中で最も活発に開発されている高性能なプロキシコアと言えます。多くの新しいClash互換のGUIクライアントは、内部でこのmihomoコアを利用しています。
3. mihomoの主な機能
mihomoが「超多機能」と呼ばれる所以は、その搭載している機能の幅広さと奥深さにあります。主要な機能を以下に挙げ、それぞれ詳しく解説します。
3.1 プロトコル対応
mihomoは、現代において利用されている主要なプロキシプロトコルを幅広くサポートしています。これにより、様々なサービスプロバイダーやサーバー構成に対応できます。
- Shadowsocks: 軽量で比較的シンプルなプロキシプロトコル。古くから広く利用されています。mihomoは様々な暗号化方式(AES-256-GCM, CHACHA20-POLY1305など)に対応しています。
- VMess: V2Rayプロジェクトで開発されたプロトコル。柔軟性が高く、トランスポート層にWebSocketやHTTP/2などを利用することで、ネットワーク制限を回避しやすい特徴があります。UUIDによる認証を行います。
- VLESS: V2RayプロジェクトでVMessの後継として開発されたプロトコル。VMessよりもシンプルでパフォーマンスが良いとされています。VMessと同様にUUIDによる認証が基本です。
- Trojan: HTTPS通信を模倣することで、プロキシ通信であることを隠蔽するプロトコル。検知されにくいとされています。パスワードによる認証を行います。
- Snell: Shadowrocket(iOSアプリ)などで利用されるプロトコル。シンプルな設計が特徴です。
- Hysteria: UDPベースの高速プロトコル。特に高遅延・高パケットロス環境でのパフォーマンスが良いとされています。QUICをベースとしており、独自の輻輳制御アルゴリズムを持ちます。
- TUIC: UDPベースの新しいプロトコル。Hysteriaと同様にUDPと輻輳制御を利用し、高いパフォーマンスを目指しています。QUICベースですが、Hysteriaとは異なる設計です。
- HTTP/HTTPS: 標準的なHTTP/HTTPSプロキシとしても機能します。
- Socks5: 標準的なSocks5プロキシとしても機能します。
これらのプロトコルに対応していることで、ユーザーは多様なプロキシサービスから最適なものを選び、mihomoで一元的に管理できます。また、TLS/SSLによる暗号化やWebSocket/HTTP/2/QUICなどのトランスポート層オプションにも幅広く対応しており、通信のセキュリティや耐検閲性を高める設定が可能です。
3.2 ルーティングとポリシー(Policy Group)
mihomoの最も強力な機能の一つが、柔軟なルールベースのルーティングです。どの通信をどのプロキシやポリシーグループに送るかを、様々な条件に基づいて詳細に設定できます。
- Rules: 通信を分類するための条件と、それに合致した場合に適用するポリシー(プロキシ、ポリシーグループ、直連、ブロックなど)のリストです。上から順に評価され、最初に一致したルールが適用されます。条件としては、宛先ドメイン、IPアドレス、地理情報、プロセス名など様々なものが利用できます。
- Policy Group (Proxy Group): 複数のプロキシや他のポリシーグループをまとめて管理し、それらのプロキシから一つを選択したり、特定のアルゴリズムに基づいて利用したりするための仕組みです。これにより、プロキシの冗長化や負荷分散、自動選択などが実現できます。
Policy Groupにはいくつかのタイプがあります。
- Select: 最も一般的なタイプ。ユーザーが手動でグループ内のプロキシやポリシーグループから一つを選択します。GUIクライアントから切り替えるのが typical な使い方です。
- Auto Test: グループ内のプロキシURLに対して定期的にテストを行い、最も遅延が少ない(または到達可能な)プロキシを自動的に選択します。これにより、常に最適なプロキシを利用できます。テスト用のURLとテスト間隔を設定します。
- Fallback: グループ内のプロキシを順にテストし、最初に到達可能なプロキシを選択します。主に冗長化のために利用されます。プライマリプロキシがダウンした場合に自動的にバックアップに切り替えるといった設定が可能です。テスト用のURLとテスト間隔を設定します。
- Load Balance: グループ内の複数のプロキシにトラフィックを分散させます。設定された戦略(例: round-robin)に基づいて、複数のプロキシを同時に利用し、負荷を分散させたり帯域を合算したりします。テスト用のURLとテスト間隔を設定します。
これらのPolicy GroupをRulesと組み合わせることで、「日本のサイトは直連、アメリカのサービスはアメリカのプロキシ、ヨーロッパのサービスはヨーロッパのプロキシ、特定のゲームは低遅延のプロキシグループから自動選択」といった、非常に複雑でインテリジェントなルーティング設定が可能になります。
3.3 セキュリティ機能
セキュリティとプライバシー保護もmihomoの重要な側面です。
- TLS/SSLによる暗号化: VMess, VLESS, Trojan, Hysteria, TUICなどのプロトコルは、TLS/SSLを利用して通信内容を暗号化できます。これにより、インターネットサービスプロバイダー(ISP)や中間者による通信内容の盗聴を防ぎます。
- Obfuscation (難読化): WebSocket over TLSやHTTP/2 over TLSなどのトランスポートを利用することで、プロキシ通信であることを隠蔽し、ファイアウォールによる検知を回避しやすくします。
- DNS over HTTPS (DoH) / DNS over TLS (DoT): DNSリクエストも暗号化された安全なチャネル経由で行うことで、DNSスプーフィングやDNSベースのトラッキングを防ぎます。mihomoは複数のDoH/DoTサーバーを設定し、フォールバックや並列クエリを行うなど、高度なDNS設定が可能です。
- 広告ブロック・マルウェアサイトブロック: 特定のドメインやIPアドレスへのアクセスをブロックするRulesを設定することで、広告サイト、トラッキングサイト、マルウェア配布サイトなどへの接続を遮断できます。これは設定ファイルのRuleを活用することで実現できます。
3.4 パフォーマンス機能
mihomoはGo言語で開発された高性能コアを特徴としています。
- 高速な処理: Go言語の並行処理能力を活かし、多数の同時接続や高速なデータ転送を効率的に処理します。
- 自動プロキシテスト: Auto TestやFallbackポリシーは、定期的にプロキシサーバーの遅延や接続性をテストし、常に最適な状態を維持しようとします。これにより、手動で切り替える手間を省き、安定したパフォーマンスを享受できます。
- 帯域制御 (QoS): 設定によっては、特定のルールやPolicy Groupに対して帯域制限を設けることも可能です。(ただし、これはコアの機能というより、外部からのAPI制御や特定のRule設定による実現になることが多いです)
3.5 Web UI / API
mihomoコアは、Web UIや外部APIを通じて制御・監視することが可能です。
- External Controller: RESTful APIを提供しており、外部のGUIクライアントやスクリプトから、設定の変更、プロキシの切り替え、接続状況の監視、トラフィック統計の取得などを行うことができます。多くのClash/mihomo互換GUIクライアントは、このAPIを利用して動作しています。
- Built-in Dashboard: 簡単なWebベースの管理画面(Dashboard)を内蔵しており、ブラウザからアクセスして基本的な設定変更やトラフィック監視を行うことができます。
これらの機能により、mihomoは単なるプロキシとしての機能だけでなく、高度なネットワーク制御、セキュリティ強化、そして利用状況の可視化までをも実現する、非常に強力なツールとなっています。
4. mihomoを利用するメリット
mihomoをプロキシツールとして利用することには、多くのメリットがあります。
4.1 高いパフォーマンスと安定性
- 最新技術の採用: Go言語による効率的な実装と、Hysteria, TUICといった新しい高性能プロトコルへの対応により、従来のプロキシツールに比べて高いスループットと低い遅延を実現できます。特に、ネットワーク環境が不安定な場所でも、HysteriaやTUICは安定した通信を維持しやすい傾向があります。
- 自動最適化: Auto Testポリシーは、利用可能なプロキシの中から最も状態の良いものを自動的に選択します。これにより、手動で遅いプロキシから速いプロキシに切り替える必要がなくなり、常に安定した高速通信を維持しやすくなります。プロキシサーバー側で一時的な問題が発生した場合でも、自動的に別の利用可能なサーバーに切り替わることが期待できます(Fallbackポリシー)。
4.2 圧倒的な柔軟性とカスタマイズ性
- YAMLによる詳細設定: YAML形式の設定ファイルは、人間の可読性が高く、非常に詳細かつ複雑な設定を記述できます。プロキシリスト、Policy Groupの構成、Ruleの定義、DNS設定など、ほとんど全ての動作をファイル一つで完全に制御できます。
- Policy GroupとRulesの組み合わせ: 異なるプロキシグループを階層的に組み合わせ、それを多様な条件を持つRulesと連携させることで、特定のアプリケーション、特定のドメイン、特定の国へのアクセスなどに対して、細かく異なるプロキシ戦略を適用できます。例えば、「動画サイトは帯域の広いプロキシグループからLoad Balanceで複数のサーバーを使う」「銀行サイトは必ず特定の安全なプロキシを使うか直連する」「中国国内のサイトは直連する」といった設定が容易に実現できます。
- 高度なDNS設定: DoH/DoTによるセキュアなDNSだけでなく、特定のドメインには特定のDNSサーバーを使う、DNS汚染対策にFallback DNSを利用するなど、DNS周りの設定も非常に細かく調整できます。
4.3 最新かつ豊富なプロトコル対応
- 多様な選択肢: Shadowsocks, VMess, VLESS, Trojanといった定番プロトコルに加え、HysteriaやTUICといった新しいプロトコルにもいち早く対応します。これにより、様々な種類のプロキシサーバーを利用できるだけでなく、特定のネットワーク環境や規制に対して最も効果的なプロトコルを選択できます。
- 将来性: 新しいプロトコルや技術が登場した場合も、活発な開発コミュニティによって迅速に対応されることが期待できます。
4.4 マルチプラットフォーム対応
- 幅広いOSをサポート: mihomoコア自体は、Windows, macOS, Linux, Android, iOS(開発者向け)、そして様々なCPUアーキテクチャ(x86_64, ARM64など)向けにビルドされています。これにより、デスクトップPC、スマートフォン、サーバー、さらには一部のルーターなど、様々なデバイス上でプロキシ機能を実現できます。
- 豊富なGUIクライアント: mihomoコアはバックエンドとして機能するため、各プラットフォーム向けに多数のオープンソースおよび商用のGUIクライアントが存在します。これらのクライアントを利用することで、コマンドライン操作に不慣れなユーザーでも、mihomoの機能を直感的に利用できます。
4.5 コミュニティとエコシステム
- 活発な開発: mihomoはオープンソースプロジェクトであり、活発なコミュニティによって継続的に開発・改善されています。バグ修正や新機能の実装が比較的迅速に行われます。
- 豊富な情報: 多くのユーザーが利用しているため、インターネット上には設定方法、トラブルシューティング、応用例などの情報が豊富に存在します。また、設定ファイルを共有するコミュニティなども存在し、他のユーザーの設定を参考にすることも可能です。
- 多様なツールとの連携: External Controller APIを利用して、サードパーティ製のツール(トラフィックモニター、設定ジェネレーターなど)と連携させることができます。
これらのメリットから、mihomoは単に地域制限を回避するためだけのツールではなく、ネットワーク通信を高度に制御・最適化し、セキュリティとプライバシーを強化するための強力な基盤として利用できます。
5. mihomoの基本的な設定方法
mihomoの設定は主にYAML形式の設定ファイル(通常 config.yaml
という名前)で行います。mihomoコアを単体で利用する場合も、GUIクライアント経由で利用する場合も、この設定ファイルの理解が基本となります。
ここでは、mihomoの基本的なインストールと、config.yaml
の主要なセクションについて解説します。
5.1 インストール
mihomoコアのインストール方法はOSによって異なりますが、基本的な流れは以下のいずれかです。
- GitHubからのダウンロード: mihomoのGitHubリリースページから、お使いのOSとアーキテクチャに合った実行ファイル(例:
mihomo-windows-amd64.exe
,mihomo-linux-arm64
など)をダウンロードします。ダウンロードしたファイルを適切なディレクトリに置き、実行権限を付与します。 - パッケージマネージャー: 一部のLinuxディストリビューションやmacOS (Homebrew) では、パッケージマネージャーを通じてインストールできる場合があります。例えば、
brew install mihomo/taps/mihomo
のようにインストールコマンドが提供されていることがあります。 - Docker: Dockerイメージも提供されています。Dockerを利用することで、環境に依存せず簡単にデプロイできます。
- GUIクライアントに同梱: 多くのGUIクライアントは、内部にmihomoコアを同梱しています。この場合、ユーザーは意識することなくクライアントアプリをインストールするだけでmihomoを利用できます。
インストール後、mihomoコアは通常、設定ファイル config.yaml
を読み込んで動作します。設定ファイルの場所は、実行時の引数で指定したり、特定のデフォルトパス(例: 実行ファイルと同じディレクトリ)から読み込んだりします。
5.2 設定ファイル (config.yaml) の基本構造
config.yaml
はYAML形式で記述されます。YAMLはインデント(空白文字)で構造を示すのが特徴です。主要なセクションは以下の通りです。
“`yaml
全体設定
port: 7890 # HTTPプロキシポート
socks-port: 7891 # SOCKS5プロキシポート
mixed-port: 7892 # HTTP/SOCKS5 混合ポート (便利)
allow-lan: false # LANからの接続を許可するか (GUI利用時は通常true)
mode: rule # ルーティングモード (rule, global, direct)
log-level: info # ログレベル (debug, info, warning, error, silent)
external-controller: 127.0.0.1:9090 # 外部API/Web UI ポート
DNS設定
dns:
enable: true
listen: 0.0.0.0:53 # DNSリスニングポート (TUNモードなどで利用)
enhanced-mode: fake-ip # or redir-host
nameserver: # プライマリDNSサーバー
– 114.114.114.114 # 例: 中国電信
– 223.5.5.5 # 例: AliDNS
fallback: # フォールバックDNSサーバー (DNS汚染対策など)
– 8.8.8.8 # Google Public DNS
– 1.1.1.1 # Cloudflare DNS
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
– 240.0.0.0/4 # 保留IPアドレス帯域など
プロキシサーバーリスト
proxies:
– name: “ProxyA” # プロキシの名前
type: ss # プロトコルタイプ (ss, vmess, vless, trojan, hysteria, tuicなど)
server: example.com # サーバーアドレス
port: 443 # サーバーポート
cipher: aes-256-gcm # 暗号化方式 (Shadowsocksの場合)
password: “your_password” # パスワード
udp: true # UDPリレーを許可するか
- name: “ProxyB”
type: vmess
server: another-server.net
port: 8080
uuid: “your_uuid”
alterId: 0
cipher: auto
tls: true # TLSを有効にするか
skip-cert-verify: false # 証明書検証をスキップするか (非推奨)
network: ws # トランスポート層 (tcp, ws, http, grpc, quic)
ws-opts: # WebSocketオプション
path: /vmess
headers:
Host: another-server.net
# 他にも多くのプロトコル設定が可能 (vless, trojan, hysteria, tuicなど)
ポリシーグループリスト (Proxy Group)
proxy-groups:
– name: “Proxy” # グループ名
type: select # グループタイプ (select, auto, fallback, loadbalance)
proxies: # このグループに属するプロキシ/グループのリスト
– “ProxyA”
– “ProxyB”
– “Direct” # 直連 (built-in policy)
– “Reject” # ブロック (built-in policy)
- name: “Auto Test Proxy”
type: auto
url: http://www.gstatic.com/generate_204 # テスト用URL
interval: 300 # テスト間隔 (秒)
proxies:- “ProxyA”
- “ProxyB”
ルーティングルールリスト
rules:
# 特定のドメインは直連
– DOMAIN-SUFFIX,google.com,Proxy
– DOMAIN-KEYWORD,google,Proxy
– DOMAIN,google.com,Proxy
# 特定のドメインはブロック
– DOMAIN-SUFFIX,googlesyndication.com,Reject # 例: 広告ドメイン
# 中国国内IPアドレスは直連 (GEOIPを利用)
– GEOIP,CN,Direct
# それ以外の全ての通信はProxyグループに送る (最後のルール)
– MATCH,Proxy # MATCHルールは最も最後に置く
“`
各セクションの詳細:
- 全体設定: mihomoがリッスンするポート(HTTP, SOCKS5, 混合)、LANからのアクセス許可、ルーティングモード(
rule
: ルールに従う,global
: 全てプロキシ,direct
: 全て直連)、ログレベル、外部APIポートなどを設定します。 - DNS設定: mihomoがDNSサーバーとして機能する場合の設定です。DoH/DoTサーバーの指定、フォールバックDNS、特定のIP帯域や地域へのクエリに対する処理 (
fallback-filter
)、そしてenhanced-mode
(fake-ip
orredir-host
) の設定など、非常に詳細な設定が可能です。fake-ip
モードは、DNS応答として偽のIPアドレスを返し、実際の接続時にmihomoがその偽IPから実際の宛先ドメインを特定してルーティングを行う方式で、TUNモードなどで透過的なプロキシを実現するのに便利です。 proxies
: 利用可能な個々のプロキシサーバー接続情報を定義します。各エントリはname
,type
,server
,port
などの必須情報に加え、プロトコルに応じた詳細なパラメータ(password
,uuid
,cipher
,tls
,network
など)を設定します。proxy-groups
: 前述のPolicy Groupを定義します。name
,type
, そしてそのグループに含めるプロキシや他のグループのリスト (proxies
) を指定します。Auto TestやFallbackの場合は、テスト用のurl
とinterval
も設定します。Direct
とReject
はmihomoに組み込まれた特別なポリシーで、それぞれ「直連」と「通信ブロック」を意味します。rules
: ルーティング規則を定義します。各ルールはRULE-TYPE,TARGET,POLICY
の形式で記述されます。RULE-TYPE
はDOMAIN-SUFFIX
,IP-CIDR
,GEOIP
など、TARGET
はその条件となる値(例:google.com
,192.168.1.0/24
,CN
)、POLICY
はそのルールにマッチした場合に適用するプロキシまたはポリシーグループの名前です。ルールは上から順に評価され、最初にマッチしたルールが適用されます。リストの最後にMATCH,POLICY
ルールを置くことで、どのルールにもマッチしなかった通信のデフォルトの行き先を指定するのが一般的です。
この基本的な構造を理解すれば、シンプルなプロキシ設定は容易に行えます。
6. mihomoの応用設定
mihomoの真価は、その応用設定にあります。ここでは、より複雑で強力な設定方法について解説します。
6.1 Policy Group の詳細な活用
Policy Groupは、複数のプロキシを賢く管理するための強力なツールです。
-
Select (手動選択): 最も単純ですが、GUIクライアントと組み合わせることで、ユーザーが簡単に接続するプロキシサーバーを切り替えることができます。「国別プロキシ」「高速プロキシ」「低遅延プロキシ」といったSelectグループを作成し、必要に応じて切り替えるといった使い方が一般的です。
yaml
proxy-groups:
- name: "Manual Select"
type: select
proxies:
- "JP Proxy"
- "US Proxy"
- "SG Proxy"
- "Direct" -
Auto Test (自動遅延テスト): 遅延に敏感なアプリケーション(ゲーム、リアルタイム通信など)や、複数のプロキシサーバーがあり、常に最も高速なサーバーを利用したい場合に最適です。
yaml
proxy-groups:
- name: "Latency Optimized"
type: auto
url: http://cp.cloudflare.com/generate_204 # 遅延テスト用のURLは安定しているものを選ぶ
interval: 300 # 5分ごとにテスト
tolerance: 50 # 遅延差が50ms以内なら、よりリストの上にあるものを優先 (オプション)
proxies:
- "JP Proxy 1"
- "JP Proxy 2"
- "JP Proxy 3" -
Fallback (冗長化): プライマリプロキシがダウンした場合に、自動的にセカンダリ、ターシャリ…と切り替えることで、接続の安定性を高めます。信頼性が重要な通信(仕事用、銀行アクセスなど)に適しています。
yaml
proxy-groups:
- name: "Reliable Connection"
type: fallback
url: http://cp.cloudflare.com/generate_204
interval: 600 # 10分ごとにテスト
proxies:
- "Main Proxy" # プライマリ
- "Backup Proxy 1" # セカンダリ
- "Backup Proxy 2" # ターシャリ
- "Direct" # 最終手段として直連もフォールバックに入れることがある -
Load Balance (負荷分散): 複数のプロキシサーバーの帯域を合算したい場合や、単純に負荷を分散したい場合に利用します。ストリーミングや大容量ダウンロードなど、帯域幅が重要な場合に有効なことがあります。戦略 (
strategy
) としてround-robin
(均等分散) やconsistent-hash
(セッション維持) などが指定できます。yaml
proxy-groups:
- name: "Bandwidth Aggregation"
type: load-balance
url: http://cp.cloudflare.com/generate_204
interval: 600
strategy: round-robin
proxies:
- "Proxy Server 1"
- "Proxy Server 2"
- "Proxy Server 3" -
ネストされたPolicy Group: Policy Groupは他のPolicy Groupを参照できます。これにより、Policy Groupを組み合わせて複雑なルーティング構造を構築できます。例えば、「地域別Selectグループ」を「遅延最適化Auto Testグループ」の中に含め、特定の地域のプロキシの中から最適なものを自動選択する、といったことが可能です。
“`yaml
proxy-groups:
– name: “JP Proxies”
type: auto
url: http://cp.cloudflare.com/generate_204
interval: 300
proxies:
– “JP Proxy A”
– “JP Proxy B”-
name: “US Proxies”
type: auto
url: http://cp.cloudflare.com/generate_204
interval: 300
proxies:- “US Proxy A”
- “US Proxy B”
-
name: “Region Select”
type: select
proxies:- “JP Proxies” # グループを参照
- “US Proxies” # グループを参照
- “Direct”
rules:
– GEOIP,JP,JP Proxies # 日本国内IPはJP Proxiesグループへ
– GEOIP,US,US Proxies # 米国IPはUS Proxiesグループへ
– MATCH,Region Select # その他は手動選択可能なRegion Selectグループへ
“` -
6.2 複雑なRules設定
Rulesは通信を分類するための条件です。mihomoは非常に多くのルールタイプをサポートしており、詳細な条件設定が可能です。
主要なルールタイプと活用例:
DOMAIN-SUFFIX
: 指定したドメインまたはそのサブドメインにマッチします。例:DOMAIN-SUFFIX,google.com,Proxy
(google.com および *.google.com にマッチ)DOMAIN-KEYWORD
: 指定したキーワードがドメイン名に含まれていればマッチします。例:DOMAIN-KEYWORD,video,Proxy
(ドメイン名に “video” が含まれる通信にマッチ)DOMAIN
: 完全一致で指定したドメインにマッチします。例:DOMAIN,www.google.com,Proxy
FULL
: 完全一致で指定したドメインやIPアドレスにマッチします。非推奨、DOMAINやIP-CIDRを推奨。IP-CIDR
: 指定したIPアドレス範囲(CIDR形式)にマッチします。例:IP-CIDR,192.168.1.0/24,Direct
(ローカルネットワークへの通信は直連)IP-CIDR6
: IPv6アドレス範囲にマッチします。GEOIP
: 接続先のIPアドレスの地理情報(国コード)にマッチします。外部のGEOIPデータベースファイルが必要です。例:GEOIP,CN,Direct
(中国国内IPは直連)SRC-IP-CIDR
: 接続元(クライアント)のIPアドレス範囲にマッチします。例:SRC-IP-CIDR,192.168.1.100/32,Direct
(特定のデバイスからの通信は直連)SRC-PORT
: 接続元ポートにマッチします。DST-PORT
: 接続先ポートにマッチします。例:DST-PORT,22,Direct
(SSH通信は直連)PROCESS
: 通信を開始したアプリケーションのプロセス名にマッチします (Windows/macOS/LinuxのTUNモードで利用可能)。例:PROCESS,firefox.exe,Proxy
(Firefoxの通信はプロキシへ)RULE-SET
: 外部ファイルやURLからルールリストを読み込みます。膨大なルールを管理する場合に便利です。./rules/gfwlist.list
やhttps://example.com/adblock.txt
のように指定します。ルールセットの形式は、Clash Rule Provider形式やAdblock Plus形式など、mihomoがサポートするものを選ぶ必要があります。MATCH
: これより上のどのルールにもマッチしなかった全ての通信にマッチします。常にRulesリストの最後に置きます。例:MATCH,Proxy
(残りの全ての通信はProxyグループへ)
高度なRules設定例:
“`yaml
rules:
# ルールセットの利用 (例: 広告ブロックリスト)
– RULE-SET,https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt,Reject # 広告/トラッキングサイトなどをブロック
# プライベートネットワークへの通信は直連
– IP-CIDR,10.0.0.0/8,Direct
– IP-CIDR,172.16.0.0/12,Direct
– IP-CIDR,192.168.0.0/16,Direct
– IP-CIDR,127.0.0.0/8,Direct
– IP-CIDR6,::1/128,Direct
– IP-CIDR6,fc00::/7,Direct
– IP-CIDR6,fe80::/10,Direct
# 中国国内のサイトは直連 (またはGEOIPで処理)
# 中国国内のドメインリストをRULE-SETで読み込むのが一般的
– RULE-SET,https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt,Direct
# 特定のストリーミングサービスは特定のプロキシグループへ
– DOMAIN-SUFFIX,netflix.com,Streaming Proxy Group
– DOMAIN-SUFFIX,hulu.com,Streaming Proxy Group
– DOMAIN-SUFFIX,disneyplus.com,Streaming Proxy Group
# ゲーム関連の通信は低遅延Auto Testグループへ
– DOMAIN-KEYWORD,game,Game Proxy Group
– PROCESS,steam.exe,Game Proxy Group
– PROCESS,epicgameslauncher.exe,Game Proxy Group
# その他、海外サイトなど一般的な通信は通常のProxyグループへ
– MATCH,Proxy
“`
6.3 DNS設定の詳細
DNS設定は、単にドメイン名をIPアドレスに解決するだけでなく、セキュリティやルーティングにも大きく関わります。
- Nameserver: mihomoが最初にクエリを送信するDNSサーバーです。複数のサーバーを指定でき、並列にクエリを送信して応答が速いものを使うことも可能です。
- Fallback: Nameserverからの応答が遅い、または特定の条件(例:
fallback-filter
にマッチする場合)で利用される代替DNSサーバーです。DNS汚染によって不正なIPアドレスが返された場合に、Fallback DNS(通常は信頼できるDoH/DoTサーバー)に再度クエリを発行して正しいIPアドレスを取得する、といった使い方ができます。 - DoH/DoT:
nameserver
やfallback
にhttps://...
(DoH) やtls://...
(DoT) の形式で指定することで、暗号化されたDNS通信を利用できます。例:https://dns.google/dns-query
,tls://1.1.1.1
fallback-filter
: Fallback DNSを利用する条件を設定します。geoip: true
とgeoip-code: CN
を組み合わせると、DNS応答のIPアドレスが中国国内のものであった場合にFallback DNSを利用します。これはDNS汚染によって不正な中国国内IPに誘導されるのを防ぐのに有効です。特定のIP帯域 (ipcidr
) が返された場合にもFallbackを利用できます。enhanced-mode: fake-ip
: このモードでは、mihomoはDNSクエリに対して実際のIPアドレスではなく、内部で管理する偽のIPアドレス(例:198.18.0.0/15
の帯域)を返します。クライアントがこの偽IPに接続しようとすると、mihomoはその偽IPと対応するドメイン名を知っているため、実際の宛先への接続を確立し、その通信をルーティングルールに従って処理します。TUNモードと組み合わせて利用されることが多く、全てのアプリケーションでドメインベースのルーティングを透過的に実現するのに役立ちます。enhanced-mode: redir-host
: このモードでは、mihomoはDNSクエリに対して実際のIPアドレスを返しますが、クライアントがそのIPアドレスに接続しようとした際に、ホスト名情報も利用してルーティングを行います。Fake-IPモードよりも互換性が高い場合がありますが、一部のアプリケーションで問題が発生する可能性もあります。
yaml
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip # TUNモード利用時はこちらが便利
fake-ip-range: 198.18.0.1/16 # fake-ipモードで使用するIP帯域
nameserver:
- 223.5.5.5
- 114.114.114.114
- https://dns.alidns.com/dns-query # DoHサーバーも指定可能
fallback:
- https://dns.google/dns-query # Google Public DoH
- tls://1.1.1.1 # Cloudflare DoT
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 0.0.0.0/32 # 例: 特定のIPが返された場合
# hosts: # 特定のドメインを特定のIPに解決させることも可能
# example.com: 1.2.3.4
6.4 TUNモード
TUNモードは、OSのネットワークスタック内に仮想ネットワークインターフェース(TUNインターフェース)を作成し、OSを通過する全てのIPパケットをmihomoが捕捉・処理するモードです。
- 仕組み: アプリケーションはOSの通常のネットワーク機能を通じて通信を行います。しかし、IPパケットがTUNインターフェースにルーティングされるように設定されていると、そのパケットはmihomoに渡されます。mihomoは受け取ったパケットを解析し、設定されたRulesに基づいてプロキシ経由で送信するか、直連するか、ブロックするかを決定します。mihomoからの応答パケットもTUNインターフェースを通じてOSに戻され、最終的にアプリケーションに届けられます。
- メリット:
- 透過的プロキシ: システム上の全てのアプリケーションの通信を自動的にプロキシできます。アプリケーション側でのプロキシ設定が不要です。
- IPアドレスベースのルーティング: パケットレベルで処理するため、RuleでIPアドレスやポート番号を直接指定してルーティングできます。これはSocks/HTTPプロキシでは難しい場合(UDP通信など)もあります。
- デメリット:
- OSレベルでの設定: TUNインターフェースの作成やルーティングテーブルの設定など、OSレベルでの権限や設定が必要です。
- 互換性問題: 一部の特殊なネットワークアプリケーションやOSの機能と競合する場合があります。
- 設定の複雑さ: Fake-IPモードなどの設定と組み合わせて利用することが多く、設定ファイルがより複雑になります。
TUNモードは、GUIクライアントから有効化されることが多いですが、config.yaml
で直接設定することも可能です。
yaml
tun:
enable: true
stack: system # または gvisor (一部環境で利用)
dns-hijack: # DNSリクエストをmihomoのDNSリスナーにリダイレクト
- 0.0.0.0:53
auto-route: true # システムルーティングテーブルを自動設定
auto-redir: true # 自動リダイレクト設定
TUNモードを利用する場合、dns
セクションで enhanced-mode: fake-ip
または redir-host
を設定し、dns.listen
ポートを指定することが推奨されます。また、OS側でTUNインターフェースにパケットをルーティングするための設定が必要になりますが、多くのGUIクライアントはこれらの設定を自動で行ってくれます。
6.5 Subscription機能
手動で config.yaml
ファイルを編集するのは手間がかかります。多くのプロキシサービス提供者やコミュニティは、Clash/mihomo互換の設定ファイルをURLとして提供しています。mihomo(および対応するGUIクライアント)は、このSubscription URLから設定ファイルを自動的にダウンロード・更新する機能をサポートしています。
config.yaml
に直接Subscriptionセクションを記述することもありますが、多くのGUIクライアントはクライアント側でSubscription URLを管理し、設定ファイルを生成・更新する機能を提供しています。
この機能を利用することで、プロキシサーバー情報の変更や、Ruleリストの更新などが自動化され、メンテナンスの手間を大幅に削減できます。
6.6 Scripting (mihomo meta機能)
mihomo meta(mihomoの前身の一つ)の一部のバージョンや、それをベースにしたmihomoの特定ブランチでは、JavaScriptを利用してRules処理などをより高度にカスタマイズできるScripting機能が搭載されています。これにより、従来のRulesでは実現できないような、より動的で複雑な通信制御が可能になります。
例えば、特定の通信に対して独自のヘッダーを追加・削除したり、通信内容の一部を検査してルーティングを決定したり、時間帯によって異なるポリシーを適用したり、といったことが理論上可能になります。
“`yaml
これはmihomo metaまたは特定のmihomoバージョンで利用可能な機能です
script:
code: |
function rule(metadata) {
if (metadata.process === ‘WeChat.exe’) {
return ‘Direct’; // WeChatは直連
}
if (metadata.host.endsWith(‘.cn’)) {
return ‘Direct’; // 中国国内ドメインは直連
}
return ‘Proxy’; // その他はProxyグループへ
}
“`
このScripting機能は、標準のmihomoコアには含まれていない場合がありますが、mihomoの派生版や将来的な開発で導入される可能性もあり、そのカスタマイズ性の高さを示す例として重要です。
7. mihomoを使う上での注意点
mihomoは非常に強力で柔軟なツールですが、その利用にあたってはいくつかの注意点があります。
- 設定ファイルの複雑さ: YAML形式の設定ファイルは柔軟性が高い反面、記述ミス(特にインデント)がエラーの原因になりやすいです。また、Ruleの記述順序が重要であるなど、独特のルールを理解する必要があります。最初はシンプルな設定から始め、徐々に応用設定に挑戦していくのが良いでしょう。YAMLのLintツールなどを利用すると構文エラーを防ぐのに役立ちます。
- GUIクライアントとの連携: mihomoコア単体はGUIを持たないバックエンドプログラムです。多くのユーザーはClash/mihomo互換のGUIクライアントを利用します。クライアントの種類によってmihomoコアのバージョンやサポートする機能が異なる場合があります。また、クライアントの設定と
config.yaml
の手動編集が競合しないように注意が必要です。一般的には、GUIクライアントが提供する設定機能を利用するか、Subscription機能で取得した設定をベースにGUIで微調整するのが最も簡単です。 - 法規制と利用規約: プロキシサーバーの利用は、お住まいの国や地域、利用するサービスの利用規約によって制限されている場合があります。mihomo自体は単なるツールですが、その利用方法によっては法規制に違反したり、サービスの利用規約に抵触したりする可能性があります。利用前に、関連する法規制や利用規約を確認することが重要です。
- セキュリティリスク: 信頼できない提供元から入手したプロキシサーバー情報や、不明なSubscription URL、改変されたmihomo実行ファイルなどは、セキュリティリスクを伴います。悪意のあるプロキシサーバーを経由することで通信内容が盗聴されたり、不正なルーティングルールによって危険なサイトに誘導されたりする可能性があります。mihomoコアは公式のGitHubリポジトリから、設定ファイルは信頼できる提供元から入手するように心がけましょう。
skip-cert-verify
オプションは、サーバー証明書の検証をスキップするためセキュリティリスクを高めます。特別な理由がない限りfalse
に設定すべきです。 - パフォーマンス問題の切り分け: 通信速度が遅い、接続が不安定といった問題が発生した場合、原因がmihomoの設定ミスなのか、利用しているプロキシサーバーの性能不足なのか、または自身のネットワーク環境(自宅のルーター、ISPなど)にあるのかを切り分ける必要があります。mihomoのログレベルを上げて詳細なログを確認したり、プロキシの遅延テスト機能を利用したりすることで、原因特定のヒントが得られることがあります。
- リソース消費: TUNモードやFake-IPモード、多数のRulesやPolicy Groupを利用する場合、mihomoはそれなりのCPUやメモリといったシステムリソースを消費します。特に古いデバイスやリソースが限られた環境(例: 一部のルーター)で利用する場合、パフォーマンスに影響が出る可能性があります。
これらの注意点を理解し、適切に設定・運用することで、mihomoの強力な機能を安全かつ効果的に活用できます。
8. まとめ
この記事では、超多機能プロキシツール「mihomo」について、その正体、Clashファミリーとの関係性、豊富な機能、利用するメリット、そして基本的な設定方法から応用設定まで、詳しく解説しました。
mihomoは、従来のプロキシツールの限界を打ち破る、以下の特徴を持つ革新的なプロキシコアです。
- 高性能かつ安定した動作: Go言語による効率的な実装と新しいプロトコル対応。
- 圧倒的な柔軟性とカスタマイズ性: YAML形式の設定ファイルと強力なRule/Policy Groupシステム。
- 最新プロトコルへの迅速な対応: 多様なプロキシサーバーを利用可能。
- マルチプラットフォーム対応: 幅広いデバイスで利用可能。
- 活発なコミュニティとエコシステム: 豊富な情報とGUIクライアント。
mihomoは、単に地域制限を回避したいというライトユーザーから、ネットワーク通信を詳細に制御し、セキュリティ・プライバシーを強化したいというパワーユーザーまで、幅広いニーズに応えるポテンシャルを秘めています。特に、複数のプロキシサーバーを使い分けたい、特定のアプリケーションやサイトの通信経路を細かく制御したい、DNS設定を高度に行いたい、といったユーザーにとって、mihomoはその強力な機能セットにより最適なソリューションとなるでしょう。
もちろん、その柔軟性ゆえに設定には一定の学習コストがかかります。しかし、基本的な設定から始めて、少しずつRulesやPolicy Groupをカスタマイズしていくことで、自身のネットワーク環境や利用目的に完全に合致したプロキシ環境を構築できる喜びは、mihomoならではのものです。
より深くmihomoを学びたい場合は、公式のGitHubリポジトリやコミュニティフォーラム、そしてインターネット上の様々な技術ブログやドキュメントが役立ちます。config.yaml
の各パラメータの詳細は、mihomoのExample Configurationやソースコード内の定義を確認するのが最も確実です。
プロキシ技術は常に進化しています。mihomoのような先進的なツールが登場することで、私たちはより安全で、より自由で、より快適なインターネット環境を追求できるようになります。この記事が、あなたがmihomoの世界へ足を踏み入れるための一助となれば幸いです。