6.8 Mihomo
Mihomo 是 Clash 系列的衍生版本,已收录于 FreeBSD Ports 树中(net/mihomo)。本节给出安装与基本配置步骤。
6.8.1 安装 Mihomo
使用 pkg 安装:
# pkg install net/mihomo或者使用 Ports 安装:
# cd /usr/ports/net/mihomo/
# make install clean6.8.2 Mihomo 文件结构
Mihomo 的文件结构如下:
/usr/
├── ports/
│ └── net/
│ └── mihomo/ # Mihomo Ports 目录
├── local/
│ ├── bin/
│ │ └── mihomo # Mihomo 可执行文件
│ └── etc/
│ └── rc.d/
│ └── mihomo # Mihomo RC 服务脚本
└── etc/
└── rc.conf # 系统服务配置文件Mihomo 也可通过 FreeBSD 的 Linux 二进制兼容层运行,其网络流量管控能力在兼容层中同样可用。
6.8.3 RC 脚本
已向 Ports 维护者提交了合并请求(Bug 291295 - net/mihomo: Add rc.conf and some Post-installation),旨在为 Mihomo 添加系统服务管理支持,截至撰稿时尚未获得回应。官方集成完成前,可使用下文提供的自定义 RC 脚本实现服务化管理。
6.8.3.1 RC 脚本
为便于管理 Mihomo 服务,可使用以下脚本。将以下脚本保存为 mihomo,存放至 /usr/local/etc/rc.d/,然后使用 root 账户赋予可执行权限:chmod +x /usr/local/etc/rc.d/mihomo。
#!/bin/sh
. /etc/rc.subr # 引入 rc.d 脚本框架,这是 FreeBSD 服务脚本的标准前置依赖
name="mihomo" # 定义服务名,用于标识和管理该服务
desc="mihomo server" # 服务描述信息
rcvar="mihomo_enable" # 服务开关变量,控制服务是否开机自启
: ${mihomo_datadir:="/var/run/mihomo"}
: ${mihomo_user:="root"} # 默认用户;如使用其他用户,请确保 /etc/mihomo 目录及 $pidfile 和 log 文件可写
: ${mihomo_extra_flags:=""} # mihomo 的额外参数,用于传递自定义启动选项
procname="/usr/local/bin/mihomo" # 与 pidfile 配合,用于检测服务进程
pidfile="${mihomo_datadir}/mihomo.pid" # 用于检测服务进程,存储主进程的进程标识符(Process ID,PID)
logfile="${mihomo_datadir}/mihomo.log"
start_cmd="mihomo_start" # 设置 start 命令调用 mihomo_start 函数,stop 等命令由 rc.d 框架默认实现
extra_commands="init reconfig regeoip" # 设置其他的自定义命令,扩展 rc.d 框架的标准命令集
reconfig_cmd="mihomo_reconfig" # 指定 reconfig 命令调用 mihomo_reconfig 函数,用于下载 config.yaml 文件
regeoip_cmd="mihomo_regeoip" # 指定 regeoip 命令调用 mihomo_regeoip 函数,用于下载 geoip.dat 文件,可通过 mihomo_extra_flags="-m" 指定使用该文件
init_cmd="mihomo_init" # 指定 init 命令调用 mihomo_init 函数。创建数据文件目录,指定属主,避免普通用户身份执行时的读写权限问题
mihomo_start()
{ # 使用 daemon 启动 mihomo,指定 -p 参数使用 pidfile,使 mihomo 成为 daemon 的子进程,由 daemon 自动管理 pidfile,从而在 mihomo 进程退出时自动清理 pidfile
daemon -u ${mihomo_user} -p "$pidfile" -o "${logfile}" $procname -d "${mihomo_datadir}" -f "${mihomo_datadir}/config.yaml" ${mihomo_extra_flags}
}
mihomo_reconfig()
{
startmsg "begin to refresh config.yaml"
startmsg "config.yaml : ${mihomo_config}"
if ( fetch -o ${mihomo_datadir}/config.yaml.new "${mihomo_config}" );then
mv ${mihomo_datadir}/config.yaml.new ${mihomo_datadir}/config.yaml # 下载成功将覆盖原有配置,下载失败保留原有配置
startmsg "rename config.yaml.new to config.yaml"
else
err "fetch config.yaml failed! check $$mihomo_config!"
fi
}
mihomo_regeoip()
{
startmsg "begin to refresh geoip.dat"
startmsg "geoip.dat : $mihomo_geoip"
if ( fetch -o ${mihomo_datadir}/geoip.new "${mihomo_geoip}" );then
mv ${mihomo_datadir}/geoip.new ${mihomo_datadir}/geoip.dat
startmsg "rename geoip.new to geoip.dat"
else
err "fetch geoip.dat failed! check $$mihomo_geoip"
fi
}
mihomo_init()
{
startmsg "begin init"
install -d -m 0700 -o ${mihomo_user} ${mihomo_datadir}
startmsg "all data is in ${mihomo_datadir}"
startmsg "remember reconfig/regeoip before start"
}
load_rc_config $name
run_rc_command "$1"6.8.3.2 可用参数及选项
RC 脚本提供了多个命令行参数和配置选项,以下列举常用参数。这些命令会直接将配置写入 /etc/rc.conf 文件,如果配置有误,可直接修改对应行。
- 启用 Mihomo 服务并设置开机自启动:
service mihomo enable- 启动 Mihomo 服务进程:
service mihomo start- 停止 Mihomo 服务进程:
service mihomo stop- 查看 Mihomo 服务运行状态:
service mihomo status- 指定订阅链接地址(示例地址仅作演示用途,需替换为有效链接):
sysrc mihomo_config="https://xxxx.yyy"- GeoIP 数据根据 IP 地址的地理归属实现流量分流或规则匹配:
sysrc mihomo_geoip="https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat" # 可选,但建议使用- 指定 Mihomo 的额外参数:
sysrc mihomo_extra_flags="-m" # 可选,但建议使用-m:启用 geodata 模式,使 Mihomo 使用 geosite.dat 和 geoip.dat 文件匹配规则,而非默认的 site.dat 和 ip.dat。指定运行 Mihomo 服务的用户身份:
sysrc mihomo_user="mihomo" # 默认用户是 root- 指定 Mihomo 的数据目录:
sysrc mihomo_datadir="/var/run/mihomo"相关文件结构:
/var/
└── run/
└── mihomo/ # Mihomo 数据目录
├── mihomo.pid # 进程标识符(Process ID,PID)文件
├── mihomo.log # 日志文件
├── config.yaml # 配置文件
└── geoip.dat # GeoIP 数据文件- 初始化 Mihomo 的数据目录,准备服务运行环境:
service mihomo init- 更新订阅配置。执行
start前先行更新,确保配置文件为最新版本:
service mihomo reconfig- 更新 GeoIP 地理位置数据库:
service mihomo regeoip # 首次启用时建议使用,但无需频繁更新,因为 IP 地理位置数据变化相对缓慢6.8.3.3 最小 RC 示例
以下为最简配置示例,可在理解其含义后按需修改并写入 /etc/rc.conf 文件:
mihomo_config="https://xxx.yyy" # 实际订阅链接地址,需替换为有效链接
mihomo_geoip="https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat" # GeoIP 数据
mihomo_enable="YES" # 开机启用/服务项6.8.3.4 未竟事宜
以下为待研究的问题:
如何实现“直连”“代理”“全局”三种模式的分流?
如何实现 TUN 虚拟网卡代理?TUN 模式可实现更底层的网络流量拦截。
如何根据订阅链接测试节点速度?
如何指定订阅链接中代理组的特定节点(例如仅使用位于美国的某个代理节点)?这涉及代理节点的精细化选择。
6.8.4 Clash for FreeBSD
6.8.4.1 环境准备
FreeBSD 的默认登录 Shell 不一定是 bash,执行以下命令前须先切换至 bash:
$ bash建议使用 root 权限账号。
# pkg update
# pkg install -y bash curl gtar gzip说明:
- 当前脚本通过
bash执行。 freebsd-rc后端依赖service与 /usr/local/etc/rc.d。
6.8.4.2 安装与初始化
$ git clone --branch master --depth 1 https://github.com/wenyinos/clash-freebsd.git
$ cd clash-freebsd
$ export KERNEL_TYPE=mihomo
# bash install.sh首次配置:
$ clashctl add <订阅链接> <名称>
$ clashctl use
$ clashctl select
$ clashon
$ clashctl status6.8.4.3 FreeBSD 服务管理(rc.d)
系统安装默认使用 freebsd-rc 后端,服务名:clash_freebsd。
# service clash_freebsd status
# service clash_freebsd start
# service clash_freebsd stop
# service clash_freebsd restart管理内核服务开机自启动:
# clashctl autostart on
# clashctl autostart status
# clashctl autostart off说明:
clashctl autostart on仅控制 rc.d 服务是否随系统启动。service与autostart命令需要 root 权限(请使用 root 或sudo)。- FreeBSD 自启动配置文件:/etc/rc.conf.d/clash_freebsd。
6.8.4.4 Tun 与路由诊断(FreeBSD)
Tun 设备通常为 /dev/tun*。
# clashctl tun on
# clashctl tun off
# clashctl tun doctor
$ route -n get default
$ netstat -rn -f inetTun 未生效时优先检查:
tun on/off需要 root 权限ls -l /dev/tun*- 当前用户权限(建议 root)
- 默认路由是否已接管到 tun 接口
6.8.4.5 常用排障命令
$ clashctl doctor
$ clashctl logs
$ clashctl logs mihomo
$ clashctl config regen6.8.4.6 卸载
# bash uninstall.sh彻底清理运行时数据:
# bash uninstall.sh --purge-runtime6.8.4.7 参考文献
- wenyinos. 一个更完整、更优雅的 FreeBSD Clash / Mihomo 运行平台[EB/OL]. [2026-04-26]. https://github.com/wenyinos/clash-freebsd. 提供了 FreeBSD 下 Clash 代理的完整部署方案,支持订阅链接管理。
6.8.4.8 未竟事宜
与 Bash 解耦,支持默认 sh,更好适配 FreeBSD 默认环境。