Skip to content

About

一键在 Linux 上安装和管理 Clash/Mihomo 代理内核的 Shell 工具,支持订阅管理、Tun 模式、Web 控制台等功能。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

mihoctl

GitHub License

Linux 透明代理服务套件。以系统服务方式常驻运行 mihomo / clash 内核,TUN 接管全局流量,DNS 劫持 + fake-ip 分流从源头防止 DNS 泄漏。

特性

  • 服务化常驻:自动识别 systemd / OpenRC / runit / SysVinit 并注册开机自启;容器与非 root 环境自动降级为用户进程模式
  • TUN 透明代理:mihoctl tun on 一键接管本机全部 TCP / UDP 流量,无需为每个应用单独配置代理
  • 端口代理模式:不开 TUN 时仅监听本地端口,可只代理指定域名清单、其余全部直连,与机器上已有代理互不干扰
  • DNS 防泄漏:劫持所有发往 53 端口的查询;国内域名走国内 DNS 真实解析,其余域名返回 fake-ip、由代理服务端在远端解析——本机不向任何上游发出国外域名查询
  • 指定域名解析:通过 nameserver-policy / hosts 为任意域名指定解析上游或固定 IP(内网域名、防污染等场景)
  • 订阅管理:多订阅存储 / 切换 / 定时更新;非标准格式自动调用 subconverter 本地转换
  • 配置分层:个人定制写在 mixin 层,与订阅深度合并生成运行配置,订阅更新永不丢失自定义
  • 双内核:mihomo(推荐,完整特性)与 clash(DNS / TUN 配置自动降级兼容)
  • Web 面板:内置 zashboard 本地面板,也可一键使用公共 metacubexd

DNS 防泄漏原理

应用查询 DNS ──> TUN dns-hijack 劫持 53 端口 ──> 内核内置 DNS
                                                    │
                        ┌───────────────────────────┴──────────────┐
                        │ 命中 geosite:cn / private                │ 其余域名
                        ▼                                          ▼
                国内 DNS 真实解析                        立即返回 fake-ip
                (直连流量不绕路)                (本机不发出任何上游查询)
                                                           │
                                                           ▼
                                          代理连接携带原始域名交给服务端,
                                          真实解析在远端完成

本机全程不产生国外域名的明文 DNS 查询,泄漏面为零。开启 TUN 后可自行验证:

dig +short google.com        # 应返回 198.18.x.x(fake-ip)

再到 ipleak.net 之类的检测站确认 DNS 服务器一栏只显示代理出口。

安装

要求:Linux(amd64 / arm64 / armv7 / 386),已安装 curl 或 wget、tar、gzip、unzip。

git clone --depth 1 https://gh-proxy.org/https://github.com/Knaithe/clash4linux.git
cd clash4linux
sudo bash install.sh [订阅URL]
  • 命令中的 GitHub 加速前缀可在 .env 的 MIHOCTL_GH_PROXY 中更换或留空
  • root 安装:注册系统服务,默认开启 TUN 透明代理(.env 设 MIHOCTL_TUN=off 可关闭)
  • 非 root / 容器安装:以用户进程运行,配合环境变量代理使用(见下)
  • 内核、数据目录、组件版本等均可安装前在 .env 中调整

服务运行方式

root 安装时按检测结果注册名为 mihoctl 的开机自启服务,服务进程就是内核本体(<内核> -d resources -f resources/runtime.yaml):

服务方式 注册位置 原生管理命令
systemd /etc/systemd/system/mihoctl.service systemctl status mihoctl
OpenRC /etc/init.d/mihoctl rc-service mihoctl status
runit /etc/sv/mihoctl sv status mihoctl
SysVinit /etc/init.d/mihoctl service mihoctl status
nohup(非 root / 容器) 不注册,用户进程 mihoctl status

日常无需直接使用原生命令:mihoctl on / off / restart / status / log 会按安装时记录的服务方式自动分发(普通用户终端下自动 sudo)。systemd 下内核日志由 journald 管理(mihoctl log 内部调用 journalctl),其余方式写入 logs/kernel.log。

配置文件位置

数据目录默认 ~/.mihoctl(sudo 安装时归属原用户;安装前可在仓库 .env 的 MIHOCTL_BASE_DIR 更改):

~/.mihoctl/
├── .env                    # 运行配置:内核、服务方式、订阅 UA、公共面板地址、自动注入开关
├── bin/                    # mihomo / clash、yq、subconverter 二进制
├── logs/
│   ├── kernel.log          # 内核日志(systemd 方式下由 journald 管理)
│   └── subscription.log    # 订阅更新记录
├── run/                    # nohup 方式的 pid 文件
└── resources/
    ├── mixin.yaml          # 自定义层 —— 手动修改的主要入口
    ├── subscription.yaml   # 当前启用订阅的原始配置
    ├── runtime.yaml        # mixin 与订阅的合并产物,内核实际加载
    ├── profiles.yaml       # 订阅元数据
    ├── profiles/           # 各订阅存档
    ├── dist/               # 本地 Web 面板
    ├── geosite.dat         # 域名分类数据(geosite:cn 等规则依赖)
    └── Country.mmdb        # GeoIP 数据

手动修改指引:

  • resources/mixin.yaml:端口、DNS、TUN、规则、自建节点等所有个性化配置都写这里。直接编辑后执行 mihoctl restart 重新合并生效;用 mihoctl mixin edit 编辑则自带校验、失败自动回滚
  • .env:MIHOCTL_SUB_UA、MIHOCTL_PUBLIC_UI 等可随时手改,下次执行 mihoctl 即生效;MIHOCTL_KERNEL、MIHOCTL_INIT 是安装器的记录值,不要手改
  • runtime.yaml / subscription.yaml:生成文件,手改会在下次合并或订阅更新时被覆盖,不要动

命令

mihoctl <子命令> [参数]
子命令 说明
on / off / restart 启动 / 停止 / 重启服务
status 内核运行状态
log [-f] 查看 / 跟随内核日志
tun [on|off] 透明代理开关(需 root)
env [off] 输出代理变量的 export / unset 行,供 eval 使用
ui 输出面板访问地址(本机 / 局域网 / 公网 / 公共面板)
sub add <url> 添加订阅(首个订阅自动启用)
sub ls / sub use <id> / sub del <id> 订阅列表 / 切换 / 删除
sub update [id] [--auto|--auto off] 更新订阅;--auto 注册每日定时更新
sub log 订阅更新记录
mixin [edit] 查看 / 编辑自定义配置(校验失败自动回滚)
secret [new|<值>] 查看 / 重新生成 / 指定面板 API 密钥
upgrade [core|ui|geo|all] 在线升级内核 / 面板 / geo 数据(mihomo)
completion 输出 bash 补全脚本(安装时已自动配置)

环境变量代理(非 TUN 场景,如非 root 安装):

eval "$(mihoctl env)"        # 当前终端启用 http_proxy 等变量
eval "$(mihoctl env off)"    # 当前终端取消
mihoctl env auto off         # 关闭新终端自动注入

指定域名解析

编辑自定义层(保存后自动合并、校验、重启生效):

mihoctl mixin edit

常用场景示例(文件内已附注释模板):

dns:
  nameserver-policy:
    'geosite:cn,private':            # 默认:国内与内网域名真实解析
      - 223.5.5.5
      - 119.29.29.29
    '+.corp.example.com': '10.0.0.53'          # 公司内网域名走内网 DNS
    '+.example.org': 'https://dns.google/dns-query'   # 指定域名强制某上游
    'geosite:category-ads-all': 'rcode://success'     # 广告域名直接拒答

hosts:                               # 固定解析,优先级最高
  'router.lan': 192.168.1.1

rules-prepend:                       # 插到订阅规则最前
  - DOMAIN-SUFFIX,internal.example.com,DIRECT

完整分流规则模板见 resources/rules-example.yaml:局域网直连 → 广告拦截 → AI 服务专属出口(OpenAI / Claude / Gemini / Grok / Perplexity 等域名清单)→ 国内直连 → 其余走代理,可整段或按需拷入 mixin。

只代理指定域名(与已有代理共存)

只想让 AI 等特定域名走代理、其余流量一概不接管,或者机器上已有别的代理在跑时,可以不开 TUN,把 mihoctl 当纯本地端口代理用——只监听自己的 7890 / 9090 端口,不动路由表、不劫持 DNS、不占 53 端口,与任何现有代理零冲突。

  1. 保持 TUN 关闭:安装前在 .env 设 MIHOCTL_TUN=off;已开启则 sudo mihoctl tun off

  2. 规则只管目标域名:mihoctl mixin edit,顶层写 rules:(整体覆盖订阅规则),目标域名走出口、末行 MATCH,DIRECT 兜底直连:

    rules:
      - DOMAIN-SUFFIX,anthropic.com,你的组名   # 出口写订阅中实际的组名或节点名
      # …… 更多域名
      - MATCH,DIRECT                           # 其余流量原样直连

    AI 域名清单不必手敲,在仓库目录一行生成后粘贴:

    grep 'DOMAIN-SUFFIX.*,AI$' resources/rules-example.yaml | sed 's/,AI$/,你的组名/'
  3. 让目标程序指向代理端口,按影响范围三选一:

    • 只配单个程序:例如 Claude Code,在 ~/.claude/settings.json 加 env 块,仅该进程走代理,shell 与其他程序不受影响:

      { "env": { "HTTPS_PROXY": "http://127.0.0.1:7890", "HTTP_PROXY": "http://127.0.0.1:7890" } }
    • 当前终端:eval "$(mihoctl env)"(大小写全套代理变量一并导出)

    • 所有新终端:安装时默认已自动注入,无需操作——规则兜底是 DIRECT,非目标域名照常直连。若机器上其它代理也依赖环境变量、会被注入顶掉,则 mihoctl env auto off 关闭自动注入,退回前两种方式

该模式下走代理的域名同样没有 DNS 泄漏:连接把域名原样交给代理服务端在远端解析,本机不产生查询。两点提醒:为 CLI 配置了自定义 API 中转地址(如 ANTHROPIC_BASE_URL)时,中转域名不在清单内,需自行补一条规则;mihoctl ui 打开面板的连接页可实时查看每条连接命中的规则,便于发现并补充清单外的域名。

订阅

mihoctl sub add https://example.com/sub    # 添加并存储;首个订阅自动启用
mihoctl sub ls                             # 列表(* 为当前启用)
mihoctl sub use 2                          # 切换到 2 号订阅并重载
mihoctl sub update                         # 更新全部订阅
mihoctl sub update --auto                  # 每日凌晨自动更新

订阅内容若不是标准 clash YAML(如 base64 节点列表),会自动启动本地 subconverter 转换后导入。

TUN 透明代理

sudo mihoctl tun on     # 接管全局流量 + DNS 劫持
sudo mihoctl tun off    # 回退为普通代理端口模式
mihoctl tun             # 查看当前状态
  • 需要 root 与内核 TUN 支持,普通容器内通常不可用
  • 默认 strict-route 严格路由防绕行,docker0 / podman0 网桥已排除,不影响容器互访
  • 环境不支持 auto-redirect 时自动降级重试,仍失败则回滚配置并保持原状态

卸载

cd clash4linux
sudo bash uninstall.sh    # 非 root 安装则无需 sudo

停止服务、注销开机自启、移除定时任务与 shell 注入、删除命令与数据目录。

致谢

声明

本项目仅供学习交流与合法用途(如科研、跨境办公、开发调试)。使用者应遵守所在地法律法规,因使用本项目产生的一切后果由使用者自行承担。

License

MIT © 2026 Knaithe

About

一键在 Linux 上安装和管理 Clash/Mihomo 代理内核的 Shell 工具,支持订阅管理、Tun 模式、Web 控制台等功能。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages