環境とインストール
システム環境
Linux ディストリビューション: Ubuntu 24.04.4 LTS
Mihomo のインストール
Mihomo の公式プロジェクトは:
MetaCubeX/mihomoそれ自体は Go でコンパイルされたバイナリプログラムであり、Python や pip は必要ありません。
私のサーバーは linux amd64 で、インストールされているのは:
Mihomo Meta v1.19.30GitHub CLI を使用してダウンロード:
cd /tmp
gh release download v1.19.30 -R MetaCubeX/mihomo -p 'mihomo-linux-amd64-v1-v1.19.30.gz'ダウンロード完了後:
gunzip mihomo-linux-amd64-v1-v1.19.30.gzインストール:
install -m 755 mihomo-linux-amd64-v1-v1.19.30 /usr/local/bin/mihomo確認:
mihomo -v私の出力:
Mihomo Meta v1.19.30 linux amd64 with go1.26.6 Sun Aug 16 10:02:19 UTC 2026Use tags: with_gvisor設定ディレクトリ
Mihomo のデータはすべて次の場所に配置します:
/etc/mihomo作成:
mkdir -p /etc/mihomoメイン設定:
/etc/mihomo/config.yamlMihomo 起動時に使用:
mihomo -d /etc/mihomoMihomo 設定
サブスクリプション管理
ノードをメイン設定に直接書き込まず、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: - 海外ウェブサイト - DIRECTGoogle:
- name: Google type: select proxies: - ブロックされたウェブサイト - DIRECTOpenAI:
- name: openAi type: select proxies: - すべてのノード - ブロックされたウェブサイト - DIRECTさらに、これらのサービスも個別に振り分けられます:
YouTubeNetflixTwitterTikTokFacebookDiscordOneDriveMicrosoftSteamCloudflare...ルールプロバイダー
ルール自体をすべて 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/8172.16.0.0/12192.168.0.0/16一般的なプライベートネットワークです。
Dockerも通常は次の状態にあります:
172.16.0.0/12範囲内。
Tailscale で使用されるのは:
100.64.0.0/10したがって、これらのアドレスを除外した後:
SSHDockerローカルエリアネットワークTailscaleMihomo 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: 9870TUN がすでにあっても、テスト、Docker、または一部のプログラムでは、明示的なプロキシポートが依然として便利だからです。
例えば:
curl -x http://127.0.0.1:9870 https://github.comDocker または LAN からのアクセスが必要な場合は、次のようにします:
allow-lan: truebind-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: falsebind-address: 127.0.0.1サービス管理
systemd 常駐
作成します:
/etc/systemd/system/mihomo.service内容:
[Unit]Description=Mihomo Proxy ServiceAfter=network-online.targetWants=network-online.target
[Service]Type=simpleUser=root
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failureRestartSec=3
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICECapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
NoNewPrivileges=true
[Install]WantedBy=multi-user.target読み込み:
systemctl daemon-reload起動:
systemctl enable --now mihomoステータスの確認:
systemctl status mihomo --no-pagerリアルタイムログの確認:
journalctl -u mihomo -f再起動:
systemctl restart mihomo設定チェックと再起動
mihomo -t -d /etc/mihomo通過したら再度:
systemctl restart mihomoMetaCubeXD 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"その後:
mihomo -t -d /etc/mihomosystemctl restart mihomoAPI のテスト:
curl http://127.0.0.1:9090/version通常は次のような結果が返ります:
{ "meta": true, "version": "1.19.30"}WebUI のテスト:
curl -I http://127.0.0.1:9090/ui/次のような結果が返るはずです:
HTTP/1.1 200 OKTailscale を通じて使用したい場合は、:
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]
参考資料
- mihomo
- sublink pro
- Clash Vergeの拡張スクリプト (yaml設定はこのスクリプトを通じて変換されたもので、具体的な二次開発設定の出典は少し見つけられませんでした。)