一、 环境准备与安装
-
安装 mihomo:
使用 Homebrew 安装:
brew install mihomo -
建立符号链接:
将二进制文件链接至系统标准路径:
sudo ln -s /opt/homebrew/bin/mihomo /usr/local/bin/mihomo
二、 配置 Surge 外部代理策略
在 Surge 配置文件的 [Proxy] 段落中添加以下内容。注意将 你的用户名 替换为实际的 macOS 用户名:
[Proxy]
mihomo = external, exec="/usr/local/bin/mihomo", local-port=65535, args="-d", args="/Users/你的用户名/.config/mihomo", args="-f", args="/Users/你的用户名/.config/mihomo/config.yaml", addresses=127.0.0.1
参数说明:
-
local-port:必须与下方 mihomo 配置文件中的
mixed-port保持一致,且不能与 Surge 自身的监听端口(如 7890)冲突 。 -
args:
-d指定工作目录,用于寻找 MMDB 数据库等资源;-f指定配置文件绝对路径 。 -
addresses:ai建议在此填入代理服务器的真实 IP,可避免 Surge 增强模式对代理流量的二次拦截 。
-
极简设置:实际使用只填写
mihomo = external, exec="/usr/local/bin/mihomo", local-port=65535也可正常使用。
三、 编辑 mihomo 配置文件
配置文件路径:/Users/你的用户名/.config/mihomo/config.yaml
1. 极简配置
参考ACL4SSR Clash配置编写了一版配置,建议自行按需编辑,可以考虑提供节点和订阅信息让ai辅助编写。
mixed-port: 65535
allow-lan: true
mode: rule
auto-update: false
geodata-mode: false
external-controller: 127.0.0.1:9090
secret: "000000"
dns:
enable: true
ipv6: true
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- 119.29.29.29
- 223.5.5.5
- https://doh.pub/dns-query
- https://223.5.5.5/dns-query
- https://doh.360.cn/dns-query
- https://dns.alidns.com/dns-query
proxy-providers:
Node:
type: http
url: ""
path: ./proxy_providers/node.yaml
interval: 3600
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
payload:
- name: "Node"
type: vless
server: ""
port: 0
uuid: ""
udp: true
tls: true
flow: xtls-rprx-vision
servername: ""
client-fingerprint: chrome
reality-opts:
public-key: ""
encryption: none
network: tcp
Sub:
type: http
url: ""
path: ./proxy_providers/sub.yaml
interval: 3600
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
proxy-groups:
- name: 🚀 节点选择
type: select
use:
- Node
- Sub
proxies:
- ♻️ 自动选择
- 🔯 故障转移
- 🔮 负载均衡
- 🇭🇰 香港节点
- 🇯🇵 日本节点
- 🇺🇲 美国节点
- 🇨🇳 台湾节点
- 🇸🇬 狮城节点
- 🇰🇷 韩国节点
- DIRECT
- name: ♻️ 自动选择
type: url-test
use:
- Sub
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50
- name: 🔯 故障转移
type: fallback
use:
- Sub
url: http://www.gstatic.com/generate_204
interval: 300
- name: 🔮 负载均衡
type: load-balance
use:
- Sub
url: http://www.gstatic.com/generate_204
interval: 300
- name: 📲 电报消息
type: select
proxies:
- ♻️ 自动选择
- 🔯 故障转移
- 🔮 负载均衡
- 🇭🇰 香港节点
- 🇯🇵 日本节点
- 🇺🇲 美国节点
- 🇨🇳 台湾节点
- 🇸🇬 狮城节点
- 🇰🇷 韩国节点
- name: 📹 油管视频
type: select
proxies:
- ♻️ 自动选择
- 🔯 故障转移
- 🔮 负载均衡
- 🇭🇰 香港节点
- 🇯🇵 日本节点
- 🇺🇲 美国节点
- 🇨🇳 台湾节点
- 🇸🇬 狮城节点
- 🇰🇷 韩国节点
- name: 🎯 全球直连
type: select
proxies:
- ♻️ 自动选择
- 🔯 故障转移
- 🔮 负载均衡
- 🇭🇰 香港节点
- 🇯🇵 日本节点
- 🇺🇲 美国节点
- 🇨🇳 台湾节点
- 🇸🇬 狮城节点
- 🇰🇷 韩国节点
- DIRECT
- name: 🛑 广告拦截
type: select
proxies:
- REJECT
- DIRECT
- name: 🇭🇰 香港节点
type: url-test
use:
- Sub
filter: "(?i)港|hk|hongkong|hong kong"
url: http://www.gstatic.com/generate_204
interval: 300
- name: 🇯🇵 日本节点
type: url-test
use:
- Sub
filter: "(?i)日本|jp|japan"
url: http://www.gstatic.com/generate_204
interval: 300
- name: 🇺🇲 美国节点
type: url-test
use:
- Node
- Sub
filter: "(?i)美|us|united states|Node"
url: http://www.gstatic.com/generate_204
interval: 300
- name: 🇸🇬 狮城节点
type: url-test
use:
- Sub
filter: "(?i)新加坡|sg|singapore"
url: http://www.gstatic.com/generate_204
interval: 300
- name: 🇨🇳 台湾节点
type: url-test
use:
- Sub
filter: "(?i)台|tw|taiwan"
url: http://www.gstatic.com/generate_204
interval: 300
- name: 🇰🇷 韩国节点
type: url-test
use:
- Sub
filter: "(?i)韩|kr|korea"
url: http://www.gstatic.com/generate_204
interval: 300
- name: 🐟 漏网之鱼
type: select
proxies:
- 🚀 节点选择
- DIRECT
rule-providers:
LocalAreaNetwork:
behavior: classical
type: http
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/LocalAreaNetwork.yaml"
interval: 86400
path: ./ACL4SSR/LocalAreaNetwork.yaml
UnBan:
behavior: classical
type: http
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/UnBan.yaml"
interval: 86400
path: ./ACL4SSR/UnBan.yaml
BanAD:
behavior: classical
type: http
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/BanAD.yaml"
interval: 86400
path: ./ACL4SSR/BanAD.yaml
BanProgramAD:
behavior: classical
type: http
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/BanProgramAD.yaml"
interval: 86400
path: ./ACL4SSR/BanProgramAD.yaml
Telegram:
behavior: classical
type: http
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/Ruleset/Telegram.yaml"
interval: 86400
path: ./ACL4SSR/Telegram.yaml
ChinaDomain:
behavior: classical
type: http
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/ChinaDomain.yaml"
interval: 86400
path: ./ACL4SSR/ChinaDomain.yaml
rules:
- RULE-SET,LocalAreaNetwork,🎯 全球直连
- RULE-SET,UnBan,🎯 全球直连
- RULE-SET,BanAD,🛑 广告拦截
- RULE-SET,BanProgramAD,🛑 广告拦截
- RULE-SET,Telegram,📲 电报消息
- RULE-SET,ChinaDomain,🎯 全球直连
- GEOIP,CN,🎯 全球直连
- MATCH,🐟 漏网之鱼
2. 地理数据库 (MMDB) 配置
若需使用 GEOIP 分流,mihomo 必须在工作目录下找到数据库文件。
-
推荐方案:直接映射 Surge 现有的数据库文件:
ln -s "/Users/你的用户名/Library/Application Support/com.nssurge.surge-mac/GeoLite2-Country.mmdb" "/Users/你的用户名/.config/mihomo/Country.mmdb" -
备用方案:自行检索下载Country.mmdb文件到
/Users/你的用户名/.config/mihomo/
四、 故障排查
日志监控:
若启动失败或报错,请检查 /private/tmp 目录下的日志文件:
Surge-External-mihomo.log:记录了外部进程的所有输出 。
Surge-External-vless.log
SurgeHelper.log
SurgeSystemExtension.log
五、使用
Surge调用:
在Surge某策略组中选中mihomo策略,无需手动启动mihomo
Web 面板管理:
打开任意 mihomo web控制面板(如 MetaCubeXD),主机填入 127.0.0.1,端口 9090,密钥为你在 secret 中设置的内容。连接成功后即可实时切换节点。