OpenClash 安装与首次配置完整教程(OpenWrt / iStoreOS 2026)
OpenClash 安装前必须先确认路由器 CPU 架构(armv8/aarch64/mipsel/x86_64),下载对应的 ipk 包,再解决依赖缺失和 dnsmasq 端口冲突。这篇按 Luci 界面路径写出每一步,包括首次启动后的订阅导入和 DNS 劫持开关。
OpenClash 是目前 OpenWrt 上最完整的 Clash 客户端,但安装过程比桌面客户端多几层:先确认路由器架构 → 下载对应 ipk → 安装依赖 → 上传配置 → 开启 → 验证。任何一步跳过都会导致插件启动后空白或报错。
这篇假设你的路由器已经刷好了 OpenWrt 或 iStoreOS 固件,Luci 管理界面能正常打开。如果你手上有 SSH 终端和一条 Clash 订阅链接,按下面的顺序走完大约需要 15 分钟。
你的路由器 CPU 架构是 armv8、mips 还是 x86_64?
看不懂架构标识就去下 ipk 包,是 OpenClash 安装翻车第一原因。SSH 登录路由器后运行一条命令就能确认:
uname -m
输出结果对照:
| 命令输出 | 架构 | 常见设备 |
|---|---|---|
aarch64 | ARMv8(64 位) | NanoPi R4S/R5S、友善 R2S/R4S、树莓派 4、RK3399 系列 |
mips | MIPS(32 位) | 小米 R3G、Newifi D2/D3、K2P、MT7621/MT7620 平台 |
x86_64 | x86_64 | 软路由(J4125/N100/N305)、ESXi/PVE 虚拟机 |
确认架构后去 OpenClash GitHub Release 页面 找到最新版本。OpenClash 主 ipk 文件名是 luci-app-openclash_x.x.x_all.ipk,Luci 版本是 luci-app-openclash_x.x.x-beta_all.ipk(beta 版功能更多但稳定性略低)。注意 ipk 文件名中的 all 表示包本身不限定架构,但 OpenClash 的依赖包(如 clash 内核)会按架构加载,所以路由器架构仍然关键。
怎么在 Luci 界面上传并安装 ipk?
下载好 ipk 文件后,打开路由器 Luci 管理后台(默认地址 http://192.168.1.1,如果不是请用 ip addr 查看 br-lan 口 IP):
- 菜单栏点击 系统 → 软件包(iStoreOS 可能显示为「系统 → 软件包」或「高级设置 → 软件包」)
- 点击页面上的 「上传软件包…」 按钮
- 在弹出的文件选择框中选中刚才下载的 ipk 文件
- 点击 「安装」
Luci 会列出依赖包列表,如果某个依赖在软件源中不存在,安装会立即报错。常见的缺依赖提示长这样:
Collected errors:
* satisfy_dependencies_for: Cannot satisfy the following dependencies for luci-app-openclash:
* coreutils-nohup
* bash
* curl
* jsonfilter
这时候需要先更新软件源再补装缺失的包:
opkg update
opkg install coreutils-nohup bash curl jsonfilter ca-certificates ip-full ipset
装完依赖后重新上传安装 ipk。成功的话左侧菜单多出「服务 → OpenClash」入口。
安装后打开 OpenClash 页面为什么一片空白?
Luci 菜单出现了 OpenClash 但点进去加载不出来,几乎都是同一个原因:依赖没装全。SSH 进路由器重新执行一遍完整依赖安装:
opkg update && opkg install coreutils-nohup bash iptables dnsmasq-full curl jsonfilter ca-certificates ip-full ipset iptables-mod-tproxy iptables-mod-extra
如果中途提示 dnsmasq-full 和 dnsmasq 冲突:
Package dnsmasq-full wants to install file /etc/init.d/dnsmasq
But that file is already provided by package dnsmasq
先卸载默认的 dnsmasq 再装 full 版本:
opkg remove dnsmasq
opkg install dnsmasq-full
注意:opkg remove dnsmasq 执行后路由器 DHCP 功能会短暂中断,连着路由器的设备会暂时拿不到 IP。建议用网线直连路由器操作,避免 Wi-Fi 断连导致 SSH 会话中断。装完 dnsmasq-full 后 DHCP 自动恢复。
dnsmasq 和 OpenClash 抢 53 端口要怎么处理?
OpenWrt 默认的 dnsmasq 监听 53 端口做本地 DNS,而 OpenClash 启动后也想控制 53 端口做 DNS 劫持。两个进程抢同一个端口,结果就是其中一个启动失败,或者路由器 DNS 直接挂掉。
先确认当前 53 端口是谁在用:
netstat -tlnp | grep :53
如果输出中看到 dnsmasq 绑定了 0.0.0.0:53,说明端口还没释放。处理方式有三种:
- 改 dnsmasq 端口(推荐):编辑
/etc/config/dhcp,找到config dnsmasq段,加一行option port '5353'(或任意非 53 端口),保存后/etc/init.d/dnsmasq restart。 - 用 OpenClash 的 DNS 劫持开关:Luci → 服务 → OpenClash → 全局设置 → DNS 设置 → 开启「DNS 劫持」→ 保存应用。OpenClash 会通过 iptables 把 53 端口流量重定向到自己,不需要改 dnsmasq。
- 用 dnsmasq-full 的上游转发:dnsmasq-full 支持把 DNS 请求转发到 OpenClash 的监听端口(如 7874),不改端口也能共存。
第一种方案最干净,不会在不同服务之间留 iptables 规则残骸。第二种最省事,但部分固件的 iptables 模块不全,劫持可能不生效。第三种适合对 dnsmasq 有依赖的场景(比如路由器上还运行着 AdGuard Home)。
订阅粘贴进去了,节点列表还是空的?
Luci 路径:服务 → OpenClash → 全局设置 → 配置订阅。
很多人卡在这一步不是因为配置错了,而是订阅本身有问题。打开订阅链接时浏览器返回的必须是纯文本 YAML,如果不是,那 OpenClash 也解析不了。排查顺序:
- 把订阅链接复制到新标签页打开,确认返回内容是 YAML 格式(以
proxies:或proxy-providers:开头),而不是登录页、JSON 报错或空白页。 - OpenClash 配置订阅页面,订阅类型一定要选对:绝大多数 Clash Meta 内核的机场用「Clash Meta」类型,少数旧格式选「Clash」或「Clash YAML」。
- 粘贴完链接后点「更新配置」,等页面显示「更新成功」才算真正拉取到了节点。只保存不点更新,配置文件里不会有节点数据。
如果你用的订阅是从桌面客户端导出的 YAML 文件,放到路由器上要注意路径中有没有中文字符或特殊符号——OpenClash 的路径解析对非 ASCII 字符支持不佳。
OpenClash 安装与首次启动失败速查表
安装过程中看到报错别慌,先对照下表定位:
| 表现 | 更可能的原因 | 先查什么 |
|---|---|---|
| Luci 上传 ipk 报错 | 依赖缺失或 tmp 空间不足 | opkg update 后补装依赖;df -h /tmp 查可用空间 |
| 菜单有 OpenClash 但页面空白 | 核心依赖未安装 | `opkg list-installed |
| 启动按钮点击后立刻变灰 | 内核文件未下载或架构不匹配 | SSH 看 /etc/openclash/core/ 下是否有 clash/clash_tun 二进制文件,运行 file 命令确认架构 |
| 启动成功但 Wi-Fi 设备全断网 | 透明代理或 DNS 劫持规则异常 | SSH /etc/init.d/openclash stop 先恢复网络,再检查规则设置 |
| Dashboard 控制面板打不开 | 端口 9090 被占用或 iptables 未放行 | `netstat -tlnp |
| 订阅更新提示超时 | 路由器 DNS 还没走代理,订阅域名解析失败 | 先用 curl -v 订阅链接 在 SSH 里测试连通性,确认路由器本身能访问外网 |
如果路由器上一开始就装好了 配套订阅线路,格式兼容问题会少很多——订阅 URL 返回的 YAML 直接就是 Clash Meta 格式,不用再套一层转换器。
首次启动后全屋网络断了怎么急救?
新手第一次开 OpenClash 最容易触发的问题:透明代理一开,内网流量也进了代理,导致 192.168.x.x 的本地设备互相连不上。
急救三步:
# 1. 立即停掉 OpenClash
/etc/init.d/openclash stop
# 2. 确认本地网络恢复(SSH 还在说明路由器本身没问题)
ping 192.168.1.1
# 3. 检查 OpenClash 访问控制里是否勾了「仅代理常用端口」
# 进入 Luci → 服务 → OpenClash → 访问控制 → 确认 LAN IP 绕行规则已生效
恢复网络后,重新打开 OpenClash,先关闭「透明代理」和「混合模式」,只用兼容模式跑一阵。兼容模式下只有手动设置了代理的设备才会走 OpenClash,不会把全屋流量都劫持进去。确认规则没问题后再逐步开透明代理。
DNS 劫持也建议先关,改为在 dnsmasq 里配上游转发。这样即使 OpenClash 挂了,路由器 DNS 功能也不受影响,家里网络不会全断。
相关阅读
来源与时间
本文最后查看时间:2026-05-29。操作路径会随客户端版本变化,遇到按钮名称不一致时,优先按同义菜单和官方文档查看。