在 Windows 11 中拥抱 Mihomo:新一代网络代理体验

在 Windows 11 中拥抱 Mihomo:新一代网络代理体验

在追求更自由、更安全的网络体验的道路上,选择一款合适的代理工具至关重要。今天,我想和大家聊聊我在 Windows 11 上使用的新宠——Mihomo,并分享我的使用心得和配置经验。

一、初识 Mihomo

Mihomo,正如其名,给人一种轻盈且充满力量的感觉。它并非一个全新的代理协议,而是Clash Meta 的一个分支版本,专注于提供更现代、更强大的网络代理功能。Clash Meta 作为一个高度可定制化的网络代理核心,早已在技术爱好者群体中享有盛誉。Mihomo 在其基础上进行了优化和调整,旨在提供更流畅、更稳定的使用体验。

简单来说,你可以将 Mihomo 理解为一个在你的 Windows 11 系统上运行的“网络交通管理员”。它能够根据你预设的规则,智能地将网络请求导向不同的服务器,从而实现科学上网、保护隐私等目的。

二、Mihomo vs. sing-box 及其他代理软件:优缺点对比

在众多的代理软件中,Mihomo 和 sing-box 都是备受关注的优秀代表。它们都拥有强大的功能和灵活的配置选项。那么,Mihomo 相较于 sing-box 以及其他常见的代理软件(如 V2RayN、Shadowsocks 客户端等)有哪些优缺点呢?

Mihomo 的优点:

  • 继承 Clash Meta 的强大基因: Mihomo 天然具备 Clash Meta 灵活的规则引擎、丰富的协议支持(VLESS, VMess, Trojan, Shadowsocks 等)以及强大的自定义能力。
  • 更现代化的架构: 相较于一些较老的代理软件,Mihomo 在设计上更加现代化,性能优化也更为出色,尤其在处理大量连接和复杂规则时表现更佳。
  • 活跃的社区和持续的更新: Mihomo 社区相对活跃,bug 修复和新功能迭代速度较快,能够更好地适应不断变化的网络环境。
  • 良好的用户界面支持: 虽然 Mihomo 本身是核心程序,但它支持各种第三方 UI 控制面板(如 Zashboard),提供了直观易用的图形化管理界面。

Mihomo 的缺点:

  • 学习曲线稍陡峭: 相比于一些配置简单的代理软件,Mihomo 的配置选项较为丰富,对于新手来说可能需要一定的学习成本。
  • 资源占用相对较高: 相比于一些轻量级的代理工具,功能强大的 Mihomo 在运行时可能会占用更多的系统资源。

与 sing-box 的对比:

sing-box 同样是一款非常优秀的代理核心,它在协议支持和灵活性方面与 Clash Meta 和 Mihomo 不相上下,甚至在某些方面(如多路复用)更具优势。选择 Mihomo 还是 sing-box,更多取决于个人偏好和具体需求。如果你更喜欢 Clash Meta 的配置风格和生态,那么 Mihomo 会是一个不错的选择。

与其他传统代理软件的对比:

相比于一些只支持特定协议的传统代理软件,Mihomo 的多协议支持和灵活的规则引擎使其在应对复杂的网络环境时更具优势。同时,Mihomo 社区提供的丰富资源和教程也能帮助用户更好地理解和使用。

三、在 Windows 11 下使用 Mihomo

在 Windows 11 上运行 Mihomo 核心程序本身非常简单,你只需要下载对应平台的 Mihomo 可执行文件,并准备好你的配置文件 (config.yaml) 即可。通常,通过命令行运行 Mihomo:

mihomo-windows-amd64.exe -c config.yaml

然而,直接运行 Mihomo 会弹出一个命令行窗口,这对于日常使用来说可能不太方便。那么,如何解决这个问题,让 Mihomo 在后台静默运行呢?

解决 Mihomo 运行窗口问题的方法:

  1. 使用第三方启动器或管理工具: 许多第三方工具(例如一些系统增强软件或专门为 Clash Meta/Mihomo 设计的启动器)可以将 Mihomo 作为后台服务运行,隐藏命令行窗口。你可以搜索并尝试一些相关的工具。

  2. 创建 VBS 启动脚本:你可以创建一个简单的 VBScript 脚本来在后台运行 Mihomo。创建一个新的文本文件,输入以下内容:

    Set ws = CreateObject("Wscript.Shell")
    ws.Run """C:\path\to\mihomo.exe"" -c ""C:\path\to\config.yaml""", 0

    "C:\path\to\mihomo.exe"替换为你的 Mihomo 可执行文件路径,将 "C:\path\to\config.yaml" 替换为你的配置文件路径。将文件保存为 .vbs 扩展名(例如 run_mihomo.vbs)。双击运行该脚本,Mihomo 就会在后台运行,不会显示命令行窗口。你可以将此脚本添加到 Windows 的启动项,实现开机自启动。

  3. 使用 PowerShell 启动脚本:类似于 VBScript,你也可以使用 PowerShell 脚本在后台运行 Mihomo。创建一个新的文本文件,输入以下内容:

    Start-Process -FilePath "C:\path\to\mihomo.exe" -ArgumentList "-c", "C:\path\to\config.yaml" -WindowStyle Hidden

    同样,替换文件路径并保存为 .ps1 扩展名。你可以通过任务计划程序或其他方式运行此脚本。

有了启动脚本当然少不了停止脚本

  1. 停止通过 VBScript 启动的 Mihomo:

由于 VBScript 的 Run 方法默认是非阻塞的,它会启动 Mihomo 并立即结束脚本。因此,VBScript 本身无法直接跟踪或停止 Mihomo 进程。你需要借助其他工具来查找并结束 Mihomo 进程。
你可以创建一个 PowerShell 脚本来查找并结束 Mihomo 进程,然后通过 VBScript 调用这个 PowerShell 脚本。

PowerShell 停止脚本 (stop_mihomo.ps1):

Get-Process -Name "mihomo-windows-amd64" | Stop-Process -Force

这个脚本会查找所有名为 “mihomo-windows-amd64” 的进程,并强制结束它们。

VBScript 调用 PowerShell 停止脚本 (stop_mihomo.vbs):

Set ws = CreateObject("Wscript.Shell")
ws.Run "powershell -NoProfile -ExecutionPolicy Bypass -File ""C:\path\to\stop_mihomo.ps1""", 0, True

"C:\path\to\stop_mihomo.ps1" 替换为你的 stop_mihomo.ps1 脚本的实际路径。

  • -NoProfile: 阻止 PowerShell 加载用户配置文件,加快脚本执行。
  • -ExecutionPolicy Bypass: 允许运行未签名的脚本。请谨慎使用,确保你信任该脚本。
  • -File: 指定要运行的 PowerShell 脚本文件。
  • 0: 设置窗口样式为隐藏。
  • True: 等待 PowerShell 脚本执行完毕后再结束 VBScript。
    使用方法: 双击运行 stop_mihomo.vbs 脚本即可停止 Mihomo 进程。
  1. 停止通过 PowerShell 启动的 Mihomo:
    如果你直接使用 PowerShell 的 Start-Process 命令启动 Mihomo,你可能没有直接保存进程对象以便后续停止。在这种情况下,你同样需要通过进程名称来查找并结束。

PowerShell 停止脚本 (stop_mihomo.ps1 - 可以与上面的脚本相同):

Get-Process -Name "mihomo-windows-amd64" | Stop-Process -Force

使用方法: 在 PowerShell 中运行 .\stop_mihomo.ps1 即可停止 Mihomo 进程。

选择哪种方法取决于你的个人偏好和对系统的熟悉程度。我个人更倾向于使用 VBScript 脚本,因为它简单易懂。

四、我个人 Mihomo 配置的分享

以下是我个人使用的 Mihomo 配置文件 (config.yaml),其中包含了一些我常用的设置和代理节点。请注意,你需要将以下配置中的占位符(如 YourPassword, YourServerIP, UUID 等)替换为你自己的实际信息。

allow-lan: true
bind-address: "*"
mode: rule
log-level: debug
ipv6: true
keep-alive-interval: 15
keep-alive-idle: 15
disable-keep-alive: false
find-process-mode: strict
external-controller: 127.0.0.1:20240
secret: "YourPasswrod"
external-ui: ui
external-ui-name: zashboard
external-ui-url: "https://github.com/Zephyruso/zashboard/archive/refs/heads/gh-pages.zip"
profile:
store-selected: true
store-fake-ip: false
unified-delay: true
tcp-concurrent: true
global-client-fingerprint: chrome
global-ua: clash.meta

dns:
enable: true
prefer-h3: true
use-hosts: false
use-system-hosts: false
listen: 0.0.0.0:1053
ipv6: true
enhanced-mode: redir-host
default-nameserver:
- tls://223.5.5.5
- tls://223.6.6.6

nameserver-policy:
"rule-set:apple@cn,bing@cn,category-games@cn,microsoft@cn,geosite-cn":
- https://doh.pub/dns-query#DIRECT
- https://dns.alidns.com/dns-query#DIRECT

"rule-set:geosite-google,github,geosite-twitter,geosite-telegram,tiktok,geolocation-!cn":
- https://cloudflare-dns.com/dns-query#DMIT-CN2-GIA-SINGBOX
- https://dns.google/dns-query#DMIT-CN2-GIA-SINGBOX

nameserver:
- https://doh.pub/dns-query#DIRECT
- https://dns.alidns.com/dns-query#DIRECT

sniffer:
enable: true
force-dns-mapping: true
parse-pure-ip: true
override-destination: false
sniff:
HTTP:
ports: [80, 8080-8880]
override-destination: true
TLS:
ports: [443, 8443]
QUIC:
ports: [443, 8443]
force-domain:
- +.v2ex.com
skip-domain:
- "+.push.apple.com"

mixed-port: 10801

tun:
enable: true
stack: mixed
auto-route: true
auto-redirect: false
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
device: utun0_mihomo
mtu: 9000
strict-route: true
gso: false
gso-max-size: 65536
udp-timeout: 300
endpoint-independent-nat: false

proxies:
- name: CN2-GIA-SINGBOX
type: vless
server: YourServerIP
port: ServerPort
udp: true
tfo: true
mptcp: true
uuid: UUID
flow: xtls-rprx-vision
packet-encoding: xudp
tls: true
servername: yahoo.com
alpn:
- h2
- http/1.1
client-fingerprint: chrome
skip-cert-verify: true
reality-opts:
public-key: PublicKey
short-id: ShortID
network: tcp

- name: "green-hy2"
type: hysteria2
server: YourServerIP
port: 443
ports: 20000-50000
tfo: true
mptcp: true
password: YourPassword
up: "0"
down: "0"
obfs:
obfs-password: obfs-password
sni: YourDomain
skip-cert-verify: false
alpn:
- h3
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
maxIdleTimeout: 30s
keepAlivePeriod: 10s
disablePathMTUDiscovery: false

- name: "Ubuntu_singbox"
type: ss
server: Domain
port: YourServerPort
cipher: 2022-blake3-aes-256-gcm
password: "YourPassword"
udp: true
tfo: true
mptcp: true


proxy-groups:
- name: "GOHOME"
type: url-test
proxies:
- Ubuntu_singbox
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50
lazy: true
timeout: 5000
max-failed-times: 5
disable-udp: false
hidden: false

- name: "负载均衡"
type: load-balance
proxies:
- CN2-GIA-SINGBOX
- TINY-SINGBOX
- WEE-SINGBOX
- BWG-SINGBOX
url: https://www.gstatic.com/generate_204
interval: 300
lazy: true
strategy: sticky-sessions
timeout: 5000
max-failed-times: 5
disable-udp: false
hidden: false

- name: "自动回退"
type: fallback
proxies:
- green-hy2
url: https://www.gstatic.com/generate_204
interval: 300
lazy: true
timeout: 5000
max-failed-times: 5
disable-udp: false
hidden: false

- name: 漏网之鱼
type: select
proxies:
- 负载均衡
interval: 300
lazy: true
timeout: 5000
max-failed-times: 5
disable-udp: false
hidden: false

rules:
- RULE-SET,adblock,REJECT
- IP-CIDR,192.168.31.0/24,GOHOME,no-resolve
- RULE-SET,geoip-private,DIRECT,no-resolve
- DOMAIN-SUFFIX,eyunbook.com,DIRECT
- RULE-SET,geosite-google,负载均衡
- RULE-SET,github,负载均衡
- RULE-SET,geosite-twitter,负载均衡
- RULE-SET,geosite-telegram,负载均衡
- RULE-SET,tiktok,负载均衡
- RULE-SET,apple@cn,DIRECT
- RULE-SET,bing@cn,DIRECT
- RULE-SET,category-games@cn,DIRECT
- RULE-SET,microsoft@cn,DIRECT
- RULE-SET,geosite-cn,DIRECT
- RULE-SET,geolocation-!cn,负载均衡

- RULE-SET,geoip-google,负载均衡,no-resolve
- RULE-SET,geoip-twitter,负载均衡,no-resolve
- RULE-SET,geoip-telegram,负载均衡,no-resolve
- RULE-SET,geoip-cn,DIRECT,no-resolve
- MATCH,漏网之鱼

rule-providers:
geoip-private:
type: http
path: geoip-private.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geoip/private.mrs"
interval: 86400
proxy: DIRECT
behavior: ipcidr
format: mrs

apple@cn:
type: http
path: apple@cn.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/apple@cn.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

bing@cn:
type: http
path: bing@cn.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/bing@cn.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

category-games@cn:
type: http
path: category-games@cn.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/category-games@cn.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

microsoft@cn:
type: http
path: microsoft@cn.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/microsoft@cn.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

geosite-cn:
type: http
path: geosite-cn.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/cn.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

geoip-cn:
type: http
path: geoip-cn.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geoip/cn.mrs"
interval: 86400
proxy: DIRECT
behavior: ipcidr
format: mrs

geolocation-!cn:
type: http
path: geolocation-!cn.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/geolocation-!cn.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

geosite-google:
type: http
path: geosite-google.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/google.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

geoip-google:
type: http
path: geoip-google.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geoip/google.mrs"
interval: 86400
proxy: DIRECT
behavior: ipcidr
format: mrs

github:
type: http
path: github.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/github.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

geosite-twitter:
type: http
path: geosite-twitter.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/twitter.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

geoip-twitter:
type: http
path: geoip-twitter.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geoip/twitter.mrs"
interval: 86400
proxy: DIRECT
behavior: ipcidr
format: mrs

geosite-telegram:
type: http
path: geosite-telegram.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/telegram.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

geoip-telegram:
type: http
path: geoip-telegram.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geoip/telegram.mrs"
interval: 86400
proxy: DIRECT
behavior: ipcidr
format: mrs

tiktok:
type: http
path: tiktok.mrs
url: "https://github.com/MetaCubeX/meta-rules-dat/raw/refs/heads/meta/geo/geosite/tiktok.mrs"
interval: 86400
proxy: DIRECT
behavior: domain
format: mrs

adblock:
type: file
path: adblock.mrs
behavior: domain
format: mrs

此配置为个人自用配置适用于自建节点,没有DNS泄露分流准确,Ubuntu_singbox 是我在软路由搭建的SS节点,配合路由规则 IP-CIDR,192.168.31.0/24,GOHOME,no-resolve 可以远程访问家里的设备,此配置文件稍做修改可用于不同的平台,比如 iOSAndroidOpenWrt 要使用TUN模式,必须以管理员身份运行mihomo-windows-amd64.exe