Clash Premium 旧核停止延续后,路由侧部署逐步转向仍在更新的 mihomo。与桌面客户端不同,路由器上没有图形界面替内核处理配置目录、权限、DNS 转发和进程守护;部署重点也不只是让一个代理端口开始监听,而是确保局域网流量经过明确、可回退的转发路径。
本文讨论两类常见环境:安装 OpenWrt 的主路由,以及运行 Debian、Ubuntu、ImmortalWrt 或其他 Linux 系统的旁路由。示例以 mihomo v1.19 系列配置语法为基线,使用 TUN 接管作为主线,同时说明传统防火墙转发需要额外处理的部分。实际安装前仍应根据设备架构和目标版本的发布说明复核文件名。
先选架构:主路由直装还是独立旁路由
主路由直装是把 mihomo 放在承担拨号、DHCP、NAT 和防火墙工作的同一台设备上。所有终端的默认网关本来就指向它,流量路径最短,通常不需要逐台修改网关。代价是代理配置错误可能同时影响整个家庭网络,升级内核、重启防火墙或误改 DNS 时,恢复入口也在同一台设备上。
旁路由则把代理接管交给另一台 Linux 设备。上游主路由继续完成拨号,旁路由只负责策略路由、DNS 和 mihomo。它便于停机维护,也可以只让电视、手机或测试电脑经过代理;但同网段单臂旁路由容易出现回程绕过、网关环路和 DHCP 冲突,需要把地址与转发关系规划清楚。
| 比较项 | 主路由直装 | 独立旁路由 |
|---|---|---|
| 默认网关调整 | 通常不需要,终端继续使用主路由地址 | 需要由 DHCP 或终端指定旁路由 |
| 故障影响 | 配置错误可能影响全网 | 可把终端网关切回主路由快速绕开 |
| 硬件余量 | 受路由器 CPU、闪存和内存限制 | 可使用 x86 小主机或性能更高的 ARM 设备 |
| 维护复杂度 | 流量路径直接,但需兼顾拨号和防火墙 | 多一台设备,需要处理转发、回程和 DHCP |
| 适合场景 | 网络结构简单、设备性能充足、希望全局接管 | 分批接入、频繁测试、保留快速回退路径 |
单臂旁路由地址示例
假设主路由地址是 192.168.1.1,旁路由固定为 192.168.1.2。旁路由自身的默认网关仍填写 192.168.1.1,需要接管的终端则把网关和 DNS 指向 192.168.1.2。若通过 DHCP 批量下发,应确保同一广播域只有一个 DHCP 服务器,避免两台设备同时分配不同网关。
单臂结构建议在旁路由出口执行源地址转换,使返回流量稳定经过旁路由。若保留客户端原始地址供规则匹配,则需要在主路由增加到客户端网段的静态路由,并验证回程不会直接越过旁路由。两种方案不要混用到无法判断数据包实际路径。
检查硬件、系统与二进制架构
mihomo 是单个内核程序,但规则集、连接跟踪和 Fake-IP 映射都会占用内存。小型配置在启动后常见占用约 70 MB 至 120 MB;加载较大的域名规则集、多个 provider 和数千条连接后,占用可能达到 180 MB 至 300 MB。只有 128 MB 内存的旧路由器余量很小,512 MB 可作为更现实的起点,1 GB 以上更适合长期运行和频繁更新规则。
先通过 SSH 查询系统架构和内核信息:
uname -m
uname -a
getconf LONG_BIT
cat /etc/os-release
free -m
df -h
uname -m 常见结果 |
通常选择 | 注意事项 |
|---|---|---|
x86_64 |
linux-amd64 | 较老 CPU 若不支持新指令集,应选兼容级构建 |
aarch64 |
linux-arm64 | 常见于 64 位 ARM 路由器和开发板 |
armv7l |
linux-armv7 | 确认系统浮点 ABI 与发布文件说明 |
mips 或 mipsel |
对应 MIPS 大端或小端构建 | 旧设备性能和可用内存通常更紧张 |
TUN 模式还依赖内核设备和相关模块。可执行 ls -l /dev/net/tun 检查设备节点,再用 ip rule、ip route 和 nft list ruleset 确认系统具备策略路由与 nftables 管理能力。OpenWrt 可在 LuCI 的「系统」→「软件包」中检查 kmod-tun,也可通过 SSH 安装与当前固件内核匹配的软件包。
建立配置目录并完成首次校验
通用 Linux 可把程序放在 /usr/local/bin/mihomo,配置目录放在 /etc/mihomo。OpenWrt 闪存空间紧张时,可将较大的规则文件放到挂载盘,例如 /mnt/data/mihomo,但开机服务必须等待该挂载点可用。以下命令假设压缩包已经在本机解压,文件名应替换为实际下载的架构版本:
sudo install -m 0755 mihomo-linux-amd64 /usr/local/bin/mihomo
sudo mkdir -p /etc/mihomo
sudo install -m 0600 config.yaml /etc/mihomo/config.yaml
/usr/local/bin/mihomo -v
sudo /usr/local/bin/mihomo -t -d /etc/mihomo
-t 用于测试配置,-d 指定工作目录。测试通过只代表 YAML 可以解析以及主要字段可加载,不代表订阅地址、DNS 上游和节点都可连通。正式启动后还要查看日志中的 provider 更新、监听端口、TUN 网卡和规则匹配结果。
订阅不等于可直接运行的完整配置
桌面客户端常把订阅导入、覆写和内核参数封装在图形界面里,路由器直跑则需要一份完整的 config.yaml。有些订阅返回完整 Clash 配置,有些只返回节点集合;后者需要通过 proxy-providers 引用,并自行补充策略组、DNS、规则和监听端口。
订阅地址通常带有账户令牌,应把配置权限限制为仅管理员可读。更新 provider 后先保留上一份可用缓存,避免远端返回空内容时立即覆盖正在工作的节点集合。可以在替换主配置前执行一次测试:
cp /etc/mihomo/config.yaml /etc/mihomo/config.yaml.bak
/usr/local/bin/mihomo -t -d /etc/mihomo
# 测试失败时恢复
cp /etc/mihomo/config.yaml.bak /etc/mihomo/config.yaml
透明代理配置:TUN、DNS 与监听边界
仅开启 mixed-port: 7890 时,局域网设备还要手动填写 HTTP 或 SOCKS 代理;它不能自动接管电视应用、游戏主机和不遵循系统代理设置的程序。路由器部署通常使用 TUN 或基于 nftables 的透明转发。TUN 配置更集中,但仍要处理内核模块、策略路由、DNS 劫持和防火墙兼容。
下面是用于说明关键字段的基础片段。节点、策略组和业务规则仍需由完整配置提供:
mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule
log-level: info
ipv6: false
external-controller: 127.0.0.1:9090
secret: "replace-with-a-long-random-secret"
profile:
store-selected: true
store-fake-ip: true
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
strict-route: true
dns-hijack:
- any:53
- tcp://any:53
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
auto-detect-interface 用于识别实际出口,能减少拨号接口名称变化带来的配置修改;多 WAN、VPN 叠加或容器网桥较多时,自动判断未必符合预期,需要通过日志和 ip route get 1.1.1.1 核对出口。strict-route 可减少 DNS 或连接绕过,但也更容易暴露错误的策略路由设置。
示例把 DNS 监听设在 1053,避免直接占用可能已被 dnsmasq 使用的 53 端口。OpenWrt 上可以让 dnsmasq 把上游转发到 127.0.0.1#1053,对应 LuCI 常见路径为「网络」→「DHCP/DNS」→「常规设置」→「DNS 转发」。保存前应关闭会把请求同时发送给其他上游的并行转发设置,否则可能出现解析结果与代理规则不一致。
Fake-IP 过滤需要覆盖局域网服务
Fake-IP 能让域名规则在连接建立阶段直接参与分流,但打印机、NAS、投屏和局域网发现服务可能依赖真实地址。可以把本地域名后缀、路由管理域名和必要的连通性检测域名加入 fake-ip-filter。局域网服务还应优先使用本地 DNS 返回的私有地址,避免域名先被公共 DNS 解析。
dns:
fake-ip-filter:
- "*.lan"
- "*.local"
- "router.local"
- "nas.home.arpa"
- "+.home.arpa"
OpenWrt 主路由的落地步骤
- 备份现有配置。在 LuCI 打开「系统」→「备份与升级」,生成可恢复的配置归档;同时记录 WAN 接口名称、LAN 地址和 DHCP 设置。
- 检查剩余空间。通过
df -h查看 overlay,可执行文件、Geo 数据和规则集可能合计占用数十 MB。空间不足时改用外置存储,不要把根分区填满。 - 安装 TUN 支持。进入「系统」→「软件包」安装与固件匹配的
kmod-tun,随后确认/dev/net/tun存在。 - 放置程序与配置。建议使用
/usr/bin/mihomo与/etc/mihomo/config.yaml,权限分别设为0755和0600。 - 先前台运行。执行
/usr/bin/mihomo -d /etc/mihomo,观察 TUN、DNS 和 provider 日志,再从一台测试终端验证直连与代理规则。 - 加入开机服务。确认前台运行稳定后再创建 procd 服务,最后在「系统」→「启动项」查看启用状态。
OpenWrt 使用 procd 管理服务。以下脚本展示最小结构,配置目录应与实际位置一致:
#!/bin/sh /etc/rc.common
START=95
STOP=10
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /usr/bin/mihomo -d /etc/mihomo
procd_set_param respawn 3600 5 5
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param limits nofile="1048576 1048576"
procd_close_instance
}
service_triggers() {
procd_add_reload_trigger "mihomo"
}
将其保存为 /etc/init.d/mihomo 后执行:
chmod 0755 /etc/init.d/mihomo
/etc/init.d/mihomo enable
/etc/init.d/mihomo start
logread -e mihomo
若启动时外置磁盘尚未挂载,服务会找不到配置或规则文件。可把配置留在内部闪存,只把 provider 缓存放到外置盘;也可以调整启动顺序并在脚本中检查目录。不要依赖固定等待数秒来掩盖挂载顺序问题。
通用 Linux 旁路由的 systemd 配置
Debian、Ubuntu 和其他使用 systemd 的系统,可创建 /etc/systemd/system/mihomo.service。路由透明接管需要创建 TUN、写入路由并管理相关网络能力,最直接的初始方案是以 root 运行;部署稳定后再根据实际功能缩减权限,而不是一开始移除能力导致 TUN 创建失败。
[Unit]
Description=mihomo routing core
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStartPre=/usr/local/bin/mihomo -t -d /etc/mihomo
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
sudo systemctl status mihomo
sudo journalctl -u mihomo -n 100 --no-pager
旁路由还必须启用 IPv4 转发。可创建 /etc/sysctl.d/90-router-forward.conf:
net.ipv4.ip_forward=1
随后执行 sudo sysctl --system。如果启用 IPv6,还要单独规划 IPv6 默认路由、DNS 与防火墙,不能只开启 net.ipv6.conf.all.forwarding=1 就假定全部流量已经进入 mihomo。尚未完成 IPv6 接管时,可先在测试网络中关闭 IPv6,避免终端通过未纳入规则的 IPv6 路径连接。
防火墙与 TUN 规则不要重复接管
已有 nftables、Docker、Tailscale 或其他 VPN 时,规则优先级可能发生冲突。启用 mihomo 后应分别执行 ip rule、ip route show table all 和 nft list ruleset,检查是否出现重复标记、默认路由回指 TUN、容器网段误入代理等情况。TUN 的自动路由已经接管目标流量时,不要再照搬一套旧版 REDIRECT 规则。
性能验证与故障定位
部署完成后,不要只用网页能否打开作为判断。至少验证局域网直连、代理连接、DNS、规则命中、重启恢复和高并发稳定性六项。测试时先固定同一个节点和同一台终端,避免节点波动与本地配置同时变化。
- 端口状态:使用
ss -lntup检查7890、9090和1053是否按预期监听。 - DNS 路径:运行
nslookup example.com 192.168.1.2,再查看 mihomo 日志中是否出现对应查询。 - 网关转发:在终端执行路由跟踪,确认第一跳是规划中的主路由或旁路由,而不是另一台 DHCP 服务器下发的旧网关。
- 规则命中:把日志临时改为
debug,核对目标域名最终进入预期策略组,完成后恢复info,避免长期产生大量日志。 - 重启恢复:整机重启后检查 mihomo、DNS 转发和 TUN 是否自动恢复,并确认 provider 缓存可读取。
- 回退测试:停止 mihomo 后,把测试终端网关切回主路由,确认基础网络仍可独立工作。
作为硬件量级参考,在 500 Mbps 接入线路、mihomo v1.19 系列、约 8,000 条规则的测试条件下,Intel N5105 四核小主机通过 TUN 转发常见可达到约 430 至 470 Mbps;四核 Cortex-A53、1 GB 内存设备常见约 180 至 240 Mbps。数值会受加密协议、节点距离、网卡驱动、规则规模和是否启用流量嗅探影响,不能直接视为设备标称性能。
若测速只有直连的一半,先观察单核 CPU 是否接近 100%,再检查 MTU。PPPoE、WireGuard 与 TUN 叠加时,过大的 MTU 可能造成分片或部分站点加载停顿。可从 1500 向 1492、1480 或 1400 逐步测试,每次只改变一个参数,并记录吞吐、延迟与丢包结果。
更新内核与配置的交接流程
路由器上的更新应采用“新文件验证、旧文件保留、服务切换”的顺序。不要直接覆盖正在运行的二进制后立即重启。先把新版保存为 mihomo.new,执行版本检查和配置测试,再停止服务、替换文件并启动。确认运行稳定后,旧版仍可保留一个更新周期。
sudo install -m 0755 mihomo.new /usr/local/bin/mihomo.new
sudo /usr/local/bin/mihomo.new -v
sudo /usr/local/bin/mihomo.new -t -d /etc/mihomo
sudo systemctl stop mihomo
sudo mv /usr/local/bin/mihomo /usr/local/bin/mihomo.previous
sudo mv /usr/local/bin/mihomo.new /usr/local/bin/mihomo
sudo systemctl start mihomo
sudo systemctl status mihomo
配置更新也应先写入临时文件测试,再替换主文件。涉及 DNS 模式、TUN 栈、规则集格式或 provider 行为变化时,先在一台终端上验证,不要与系统固件升级安排在同一时间。旧核谢幕之后,mihomo 接棒的不只是可执行文件,配置字段和网络接管方式也会继续变化;把验证与回退做成固定步骤,比依赖某一份长期不变的脚本更可靠。