本文へスキップ
aBER

環境とインストール

システム環境

Linux ディストリビューション: Ubuntu 24.04.4 LTS

Mihomo のインストール

Mihomo の公式プロジェクトは:

MetaCubeX/mihomo

それ自体は Go でコンパイルされたバイナリプログラムであり、Python や pip は必要ありません。

私のサーバーは linux amd64 で、インストールされているのは:

Mihomo Meta v1.19.30

GitHub CLI を使用してダウンロード:

Terminal window
cd /tmp
gh release download v1.19.30 -R MetaCubeX/mihomo -p 'mihomo-linux-amd64-v1-v1.19.30.gz'

ダウンロード完了後:

Terminal window
gunzip mihomo-linux-amd64-v1-v1.19.30.gz

インストール:

Terminal window
install -m 755 mihomo-linux-amd64-v1-v1.19.30 /usr/local/bin/mihomo

確認:

Terminal window
mihomo -v

私の出力:

Mihomo Meta v1.19.30 linux amd64 with go1.26.6 Sun Aug 16 10:02:19 UTC 2026
Use tags: with_gvisor

設定ディレクトリ

Mihomo のデータはすべて次の場所に配置します:

/etc/mihomo

作成:

Terminal window
mkdir -p /etc/mihomo

メイン設定:

/etc/mihomo/config.yaml

Mihomo 起動時に使用:

Terminal window
mihomo -d /etc/mihomo

Mihomo 設定

サブスクリプション管理

ノードをメイン設定に直接書き込まず、proxy-providers を介して管理します:

proxy-providers:
空港サブスクリプション:
type: http
url: "あなたのサブスクリプションアドレス"
path: ./sublinks/airport.yaml
interval: 86400
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300

これによりメイン設定はルールを、サブスクリプションはノードを担当します。サブスクリプション更新後に設定全体を再生成する必要はありません。

私は Sublink を使用してサブスクリプションを集約しているため、ここではディレクトリ名を sublinks/ としています。

ノードの自動選択

- name: 自動選択
type: url-test
use:
- 空港サブスクリプション
exclude-filter: "(?i)套餐|到期|剩余|流量|重置|官网|文档|下载|通知"
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50

海外トラフィックの地域を手動選択:

- name: 海外サイト
type: select
proxies:
- 自動選択
- 日本
- 香港
- シンガポール
- アメリカ
- すべてのノード
- DIRECT

地域別にノードを自動選別

国や地域ごとに url-test を使用してノードを選択します。

例:日本:

- name: 日本
type: url-test
use:
- 空港サブスクリプション
filter: "(?i)日本|东京|大阪|Japan|\\bJP\\b|🇯🇵"
exclude-filter: "(?i)套餐|到期|剩余|流量|重置|官网|文档|下载|香港|新加坡|台湾|美国"
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 20

他の地域も同じロジックです:

香港
日本
シンガポール
アメリカ
...

DNS と Fake-IP

DNS は Mihomo 自身で管理します:

dns:
enable: true
listen: 127.0.0.1:7874
ipv6: false
prefer-h3: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- +.lan
- +.local
- time.*.com
- ntp.*.com

国内 DNS:

nameserver:
- https://120.53.53.53/dns-query
- https://223.5.5.5/dns-query

さらに国内サイト向けに個別指定します:

nameserver-policy:
geosite:private: system
geosite:cn,steam@cn,category-games@cn,microsoft@cn,apple@cn:
- 119.29.29.29
- 223.5.5.5
- 1.12.12.12
- 114.114.114.114

サーバー上では DNS のリッスンを次のように制限します:

listen: 127.0.0.1:7874

次のようにするのではなく:

listen: :7874

これにより、意図せず DNS サービスを外部に公開することを防げます。

サービスごとの振り分け

国内と海外のトラフィック以外にも、いくつかのよく使うサービス向けに個別のプロキシグループを作成できます。

たとえば GitHub:

- name: GitHub
type: select
proxies:
- 海外ウェブサイト
- DIRECT

Google:

- name: Google
type: select
proxies:
- ブロックされたウェブサイト
- DIRECT

OpenAI:

- name: openAi
type: select
proxies:
- すべてのノード
- ブロックされたウェブサイト
- DIRECT

さらに、これらのサービスも個別に振り分けられます:

YouTube
Netflix
Twitter
TikTok
Facebook
Discord
OneDrive
Microsoft
Steam
Cloudflare
...

ルールプロバイダー

ルール自体をすべて config.yaml に書き込むのではなく、リモートの Rule Provider を通じて管理します。

例えば:

GitHub-rule:
type: http
interval: 86400
behavior: classical
format: yaml
url: https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/GitHub/GitHub.yaml
path: ./ruleset/blackmatrix7/GitHub.yaml

次に:

rules:
- RULE-SET,GitHub-rule,GitHub

広告:

- RULE-SET,広告ブロック-rule,広告ブロック

最終的なフォールバックロジック:

- RULE-SET,cncidr,DIRECT,no-resolve
- RULE-SET,direct,DIRECT
- GEOSITE,gfw,ブロックされたウェブサイト
- GEOIP,CN,国内ウェブサイト
- MATCH,ブロックされたウェブサイト

全体のロジックはおおよそ次のとおりです:

広告
↓
REJECT
国内サイト / CN IP
↓
DIRECT
海外サービス
↓
Proxy
識別できないトラフィック
↓
Proxy

最後に使用:

MATCH,ブロックされたウェブサイト

には実用上のメリットがあります。ある海外サイトが GFWList に含まれていなくても、それによって誤って直結されることがありません。

TUN 透過プロキシ

TUN 設定

Mihomo を Linux Server のシステムプロキシの中核にするのは、TUN です。

私の設定:

tun:
enable: true
stack: mixed
auto-route: true
auto-redirect: false
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
mtu: 1500
device: mihomo
strict-route: false

ここで:

stack: mixed

は、現在の Mihomo では比較的汎用的です。

auto-route を有効にすると、システムのトラフィックが自動的に Mihomo TUN に入ります。

Docker、Tailscale とイントラネットを除外

route-exclude-address:
- 10.0.0.0/8
- 100.64.0.0/10
- 169.254.0.0/16
- 172.16.0.0/12
- 192.168.0.0/16

ここで:

10.0.0.0/8
172.16.0.0/12
192.168.0.0/16

一般的なプライベートネットワークです。

Dockerも通常は次の状態にあります:

172.16.0.0/12

範囲内。

Tailscale で使用されるのは:

100.64.0.0/10

したがって、これらのアドレスを除外した後:

SSH
Docker
ローカルエリアネットワーク
Tailscale

Mihomo TUN によってルートが書き換えられることはありません。

全体の構造は次のようになります:

flowchart TD
A[Linux Server] --> B[LAN / Docker / Tailscale]
B --> C[DIRECT]

A --> D[Internet]
D --> E[Mihomo TUN]
E --> F[Rule Matching]
F --> G[DIRECT]
F --> H[Proxy]

Server 上のプロキシポート

私は Mixed Port を1つ残しています:

mixed-port: 9870

TUN がすでにあっても、テスト、Docker、または一部のプログラムでは、明示的なプロキシポートが依然として便利だからです。

例えば:

Terminal window
curl -x http://127.0.0.1:9870 https://github.com

Docker または LAN からのアクセスが必要な場合は、次のようにします:

allow-lan: true
bind-address: "*"

ただし、次のように直接設定してはいけません:

lan-allowed-ips:
- 0.0.0.0/0

そうしないと、パブリックサーバーが簡単に、うっかりオープンプロキシになってしまいます。

次のように制限できます:

lan-allowed-ips:
- 127.0.0.0/8
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16

ローカルホストだけで使用する場合は、さらに簡単です:

allow-lan: false
bind-address: 127.0.0.1

サービス管理

systemd 常駐

作成します:

/etc/systemd/system/mihomo.service

内容:

[Unit]
Description=Mihomo Proxy Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=3
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target

読み込み:

Terminal window
systemctl daemon-reload

起動:

Terminal window
systemctl enable --now mihomo

ステータスの確認:

Terminal window
systemctl status mihomo --no-pager

リアルタイムログの確認:

Terminal window
journalctl -u mihomo -f

再起動:

Terminal window
systemctl restart mihomo

設定チェックと再起動

Terminal window
mihomo -t -d /etc/mihomo

通過したら再度:

Terminal window
systemctl restart mihomo

MetaCubeXD WebUI

Mihomo 自体は Controller API を提供しますが、従来の意味での管理画面は備えていません。

ここでは MetaCubeXD を使用します。

設定:

external-controller: 0.0.0.0:9090
external-ui: /etc/mihomo/ui
secret: "自分でパスワードを設定"

Mihomo に自動ダウンロードさせることもできます:

external-ui: ui
external-ui-url: "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip"

その後:

Terminal window
mihomo -t -d /etc/mihomo
systemctl restart mihomo

API のテスト:

Terminal window
curl http://127.0.0.1:9090/version

通常は次のような結果が返ります:

{
"meta": true,
"version": "1.19.30"
}

WebUI のテスト:

Terminal window
curl -I http://127.0.0.1:9090/ui/

次のような結果が返るはずです:

HTTP/1.1 200 OK

Tailscale を通じて使用したい場合は、:

external-controller: 0.0.0.0:9090

最終ネットワーク構成

flowchart TD
A[Ubuntu Server]

A --> B[Private Network]
B --> C[Docker / LAN]
B --> D[Tailscale / SSH]
C --> E[TUNを経由しない]
D --> E

A --> F[Internet]
F --> G[Mihomo TUN]
G --> H[Rule Engine]
H --> I[DIRECT]
H --> J[Proxy]
J --> K[ノードを自動選択]

管理面については:

flowchart TD
A[Mac] -->|Tailscale| B[Ubuntu Server]
B --> C[SSH]
B --> D[9090/ui/]
D --> E[MetaCubeXD]

参考資料