OpenWrt OpenClash 命令行安装:依赖、上传和首次启动
OpenWrt OpenClash 命令行安装分 4 步:查 CPU 架构与防火墙类型、把 dnsmasq 换成 dnsmasq-full、装依赖、上传 ipk;再下载内核、导入订阅完成首次启动,附 6 种报错的处理。
官方 OpenWrt 固件没有图形化软件商店。OpenClash 不在官方软件源里,要自己从项目仓库拿安装包、自己补依赖、自己处理 dnsmasq 的替换。这些都在 SSH 命令行里完成,整个过程十来条命令。
如果用的是 iStoreOS,可以在 iStore 的手动安装里上传插件包,不用敲命令,直接看 iStoreOS 装 OpenClash。
分清 OpenWrt 上的几种 Clash
搜「openwrt clash」会看到好几种东西,名字容易混:
- OpenClash:LuCI 图形插件,包名 luci-app-openclash,项目在 GitHub 的 vernesong/OpenClash。内核用 mihomo。
- ShellCrash:命令行脚本,不依赖 LuCI,在路由器上用菜单式交互配置。
- mihomo:真正处理代理流量的内核,前两者都可以调用它。也有其他 LuCI 插件直接封装 mihomo。
本篇讲的是 OpenClash 在 OpenWrt 上的安装,也就是「openwrt安装openclash」这件事。
选对固件版本
官方 OpenWrt 有正式版和开发快照两类。第一次装插件,用正式版:
- 开发快照默认不带 LuCI 网页界面,要先用命令行装上 LuCI 才能看到后台。
- 内核模块(名字以 kmod- 开头的包)必须和固件内核完全对应。快照版的软件源天天在变,刷机后隔一段时间再装 kmod-tun 这类模块,很可能因为版本对不上而装不进去。
- 正式版的软件源在整个版本周期内保持稳定,隔几个月再补装依赖也不会出问题。
第三方编译的固件常把 OpenClash 预装好,省事,但软件源、依赖和升级方式都跟着编译者走。这篇按官方正式版写,第三方固件遇到不一致的地方,以编译者的说明为准。
查架构、防火墙和空间
用 SSH 登录路由器(默认地址 192.168.1.1,用户 root),依次执行:
uname -m # CPU 架构,例如 x86_64、aarch64
cat /etc/openwrt_release # 固件版本和 DISTRIB_ARCH
ls -l /sbin/fw3 /sbin/fw4 # 看防火墙是哪一套
df -h /overlay # 剩余可写空间
free -m # 内存
几个判断:
fw4存在说明防火墙是 nftables(OpenWrt 22.03 起默认)。这类固件上的fw3只是指向fw4的链接,不用管它;没有fw4、只有fw3才是 iptables。两套依赖不同。- overlay 剩余空间要留出几十 MB。插件本身不大,mihomo 内核和规则数据库占的多。
- 内存 128MB 的老路由跑起来很吃力,256MB 以上更从容。
- 命令行里没有
opkg、只有apk的话,说明固件换了新的包管理器:opkg update / install / remove对应apk update / add / del,插件要下 .apk 格式的安装包,下文的 opkg 命令不能照搬,以项目 README 里 apk 那一组命令为准。
换成 dnsmasq-full
OpenClash 需要完整版的 dnsmasq-full,系统自带的精简版 dnsmasq 要先卸掉。这里有个坑:卸掉 dnsmasq 之后,路由器自己的域名解析可能跟着失效,接下来的 opkg install 会因为解析不了软件源地址而失败。做法是先把安装包下载到 /tmp,再卸旧装新,装的时候不用联网:
opkg update
cd /tmp && opkg download dnsmasq-full
opkg remove dnsmasq
opkg install dnsmasq-full --cache /tmp/
rm -f /tmp/dnsmasq-full*.ipk
已经先卸了 dnsmasq、解析不通的,执行 echo "nameserver 223.5.5.5" > /tmp/resolv.conf 临时指一个公共 DNS,装好 dnsmasq-full 后重启一次路由器,解析配置会重新生成。这一步要用网线连着操作,Wi-Fi 下改 DNS 服务容易断连。
装依赖
依赖名单分两套,以项目 README 当时列出的为准。下面按 README 的写法列出,dnsmasq-full 上一步已经装好,这里不再重复:
# nftables(fw4)固件
opkg install bash curl ca-bundle ip-full ruby ruby-yaml kmod-tun kmod-inet-diag unzip kmod-nft-tproxy luci-compat luci luci-base
# iptables(fw3)固件
opkg install bash iptables curl ca-bundle ipset ip-full iptables-mod-tproxy iptables-mod-extra ruby ruby-yaml kmod-tun kmod-inet-diag unzip luci-compat luci luci-base
某个包提示找不到,先确认软件源和固件版本匹配;第三方编译的固件,软件源可能需要换成编译者提供的地址。
上传 ipk 并安装
到 GitHub 的 vernesong/OpenClash 发布页下载 luci-app-openclash_版本号_all.ipk。这个包与架构无关,所有路由器用同一个文件。传进路由器有两种办法:
- 命令行:在电脑上执行
scp -O luci-app-openclash_*.ipk root@192.168.1.1:/tmp/。新版 OpenSSH 默认走 SFTP,OpenWrt 自带的 dropbear 不支持,所以要加-O。然后在路由器上执行opkg install /tmp/luci-app-openclash_*.ipk。 - 网页:后台「系统 → 软件包」里有上传软件包的按钮,选中 ipk 上传安装。
装完刷新后台,「服务」菜单下出现 OpenClash 就算装好了。
完成首次启动
插件装好后还缺内核和订阅:
- 插件设置里找到版本更新,确认编译版本与
uname -m的结果对应,下载 Meta 内核。路由器连不上 GitHub 时,在电脑上下载 mihomo 对应架构的文件,改名clash_meta后传进/etc/openclash/core/,并chmod +x。 - 配置订阅页添加订阅地址并更新。订阅需要是 Clash(Mihomo)格式,还没有订阅可以从 推荐号位 里挑,下单前问清链接格式和同时在线设备数。
- 运行模式先用 Fake-IP,代理模式选规则,点启动。
各选项的含义、DNS 的处理和验证方法,在 OpenClash 配置教程 里逐项写了。
定下放在主路由还是旁路由
「openclash openwrt」的部署位置有两种,装法一样,接入方式不同:
| 位置 | 接法 | 好处 | 代价 |
|---|---|---|---|
| 主路由 | OpenWrt 直接拨号或接光猫,全家设备连它 | 不用改任何设备设置 | 插件出错时全家断网 |
| 旁路由 | 挂在原主路由下面,设备把网关指向它 | 原网络不动,随时可以撤回 | 要改网关,多一跳 |
主路由方案启动后全家设备自动经过它,不需要再改网关。旁路由方案还要改设备的网关和 DNS,做法和 iStoreOS 那篇 的旁路由一节相同。
第一次配置,推荐先用旁路由方案练手。原来的主路由一直在,插件怎么改都不会让全家断网。
启动后检查四项
- 「服务 → OpenClash」的运行状态页里,内核显示在运行。
- 打开插件自带的日志页,看有没有报错(日志文件一般在
/tmp/openclash.log,也可以 SSH 里用tail查看)。 - 局域网电脑执行
nslookup www.google.com,Fake-IP 模式下返回 198.18 开头的地址。 - 浏览器能打开海外网站,国内网站速度正常。
备份与升级
- 配置文件都在
/etc/openclash/下,升级插件或重刷固件前,先把这个目录复制到电脑上。 - 升级插件:上传新版 ipk,再执行一次
opkg install,已有配置一般会保留。 - 卸载:先在插件里停止运行,让它撤掉对 dnsmasq 和防火墙的改动,再执行
opkg remove luci-app-openclash。之后上网异常就重启一次路由器。
处理六种安装报错
| 报错或现象 | 原因 | 处理 |
|---|---|---|
opkg install 提示无法解析地址 |
卸掉 dnsmasq 后路由器没有 DNS | 按上文临时写入公共 DNS |
| 提示与已安装的 dnsmasq 文件冲突 | 精简版 dnsmasq 没卸干净 | opkg remove dnsmasq 后再装 dnsmasq-full |
| 某个依赖找不到 | 软件源与固件版本不匹配 | 核对软件源地址,第三方固件找编译者的源 |
scp 报 sftp 相关错误 |
新版 OpenSSH 默认用 SFTP | 加 -O 参数 |
| 安装成功但菜单里没有 OpenClash | 浏览器缓存,或 luci-compat 没装 | 清缓存刷新;补装 luci-compat |
| 启动后内核报错退出 | 内核架构不对或没有执行权限 | 重下对应架构的内核,检查 chmod +x |
闪存实在不够、又不想换路由器,可以把内核放到家里常开的 NAS 上,用容器跑,见 mihomo Docker 部署。
问与答
OpenWrt 安装 OpenClash 时提示缺依赖怎么办?
16MB 闪存的路由器能装 OpenClash 吗?
OpenWrt 上的 Clash 只有 OpenClash 一种吗?
接着看
文中提到的机场
佣金交代:本站收录的机场与本站之间都有推广合作关系;读者由本站过桥页进入官网并完成付款后,本站会得到一笔佣金。各家价格、流量与优惠码照官网记录,谁排前谁排后的规则见「本站」页。