跳到主要内容
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
...

Rule Provider

规则本身不全部写进 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:

mixed-port: 9870

因为即使已经有 TUN,显式代理端口在测试、Docker 或某些程序中仍然很方便。

例如:

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

如果需要让 Docker 或局域网访问,则:

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]

参考资料