V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
Nyarime
V2EX  ›  OpenWrt

在 iKuai 爱快软路由上原生运行 OpenWrt 软件包

  •  
  •   Nyarime · Apr 19 · 5990 views

    熬了一个通宵,在爱快软路由 iKuaiOS 系统上实现了 musl 兼容层,使整个 OpenWrt 的软件包生态可以原生运行在爱快上,不需要虚拟机、Docker 装 OpenWrt ,总之也是 https://www.v2ex.com/t/1206925 闲鱼插件哥给的灵感,不过 iKuai 的国内用户量是真的很大,稳定性和多 IPv6 线路、流控能力都广受好评,那么好的系统连一个 root 都没有,生态封闭得爱快云上只有一个 Docker 插件,想装个 htop 、tcpdump 都不行。

    大概研究了下,iKuai 的 binary 用的是 uClibc ,而新的 OpenWrt 用的是 musl libc ,因此两者不兼容直接跑会报错。得益于 OpenWrt 有 20k+的软件包,我从一开始补 opkg 、chroot openwrt 到最后的 musl 支持,向各位 V 友汇报。

    不过爱快都在搞 4.0 了,3.7.x 本身就没在维护了,就当 EOL 前的狂欢吧。


    正文

    核心发现

    Linux 内核支持同时运行多种 libc的程序,每个 ELF 二进制文件在 header 里指定了自己的动态链接器( interpreter ):

    uClibc 程序: /lib/ld64-uClibc.so.0
    musl 程序:   /lib/ld-musl-x86_64.so.1
    glibc 程序:  /lib64/ld-linux-x86-64.so.2
    

    内核根据 ELF header 自动选择对应的 linker 。只要把 musl 的 linker 放到 iKuai 上,musl 程序就能跑。

    实现步骤

    1. 放置 musl 动态链接器

    # 从 OpenWrt rootfs 中获取 musl linker
    # ld-musl-x86_64.so.1 实际上就是 musl libc.so 的 symlink
    ln -sf /path/to/musl/libc.so /lib/ld-musl-x86_64.so.1
    

    2. 配置库搜索路径

    musl 的 linker 使用/etc/ld-musl-x86_64.path(类似 glibc 的ld.so.conf):

    echo "/path/to/musl/libs" > /etc/ld-musl-x86_64.path
    echo "/path/to/musl/usr/lib" >> /etc/ld-musl-x86_64.path
    echo "/usr/lib" >> /etc/ld-musl-x86_64.path
    

    3. 安装 opkg 包管理器

    opkg 是 OpenWrt 的包管理器。我们使用了一个glibc 静态编译版本( 680KB ),可以在 iKuai 上原生运行:

    opkg update    # 更新 6 个 OpenWrt 仓库
    opkg install --force-depends --force-space --force-checksum htop
    

    4. 验证

    $ /usr/bin/htop --version
    htop 3.3.0
    
    $ /usr/bin/tcpdump --version  
    tcpdump version 4.99.4
    libpcap version 1.10.4
    

    musl 程序和 uClibc 程序在同一个 iKuai 系统上和平共处!


    为什么这样做?

    不用 Docker

    Docker 在软路由上需要额外资源(内存、存储),而且官方 Docker 插件版本老旧。很多时候你只是想装个小工具,不值得开 Docker 。

    不用 chroot

    最初我们尝试了 chroot 方案(下载一个 mini OpenWrt rootfs ,chroot 进去用)。可以工作,但:

    • 需要手动管理 mount bind
    • 每次进出 chroot 很麻烦
    • 服务管理复杂

    不用刷 OpenWrt

    有些人直接刷 OpenWrt 。但 iKuai 的多 WAN 、流控、行为管理是 OpenWrt 做不到的。

    musl 兼容层是最轻量的方案:一个 symlink + 一个 path 文件 = 整个 OpenWrt 生态。


    Naixi 项目

    我们把这些工作整合成了Naixi——一个 iKuai 增强固件:

    Naixi Plugin Manager
    
    插件管理:
      naixi list                 列出所有插件
      naixi install <file|url>   安装插件(tar.gz)
      naixi enable <name>        启用插件
      naixi disable <name>       禁用插件
    
    OpenWrt 兼容层:
      naixi opkg install <包名>  安装 OpenWrt 包(原生运行)
      naixi opkg update          更新包列表
      naixi opkg list            列出可用包
      # https://dl.naixi.net/ikuai-naixi/naixi_latest.sh
    

    已安装组件展示

    === 已安装组件 ===
      ✓ docker v202102031900  [naixi]   运行中
      ✓ lucky v1.1.16         [naixi]   运行中
      ✓ opkg v1.0.0           [naixi]   运行中
      ✓ shell v202306081801   [pmd]     运行中
      · htop 3.3.0-1          [opkg]    已安装
      · tcpdump 4.99.4-1      [opkg]    已安装
    
    云平台控制: Level 2
    musl 兼容层: ✓ 已初始化 (12.6M)
    opkg 原生环境: ✓ 已初始化 (opkg version 0.7.0)
    

    四种来源的组件统一管理:

    • [naixi] — Naixi 插件( tar.gz 格式,支持 enable/disable )
    • [pmd] — 爱快官方插件( pmd 管理,WebUI 可见)
    • [opkg] — OpenWrt 包( opkg 安装,musl 原生运行)
    • [musl] — chroot 环境中的包(可选)

    重启持久化

    iKuai 的 rootfs 在内存中,重启后 opkg 装的包会丢失。Naixi 通过 boot 脚本自动恢复:

    # 安装时自动记录
    opkg list-installed > /etc/log/naixi/opkg-installed.txt
    
    # 重启时自动恢复
    opkg update && cat opkg-installed.txt | awk '{print $1}' | xargs opkg install --force-*
    

    技术细节

    iKuai 用的是 uClibc ,不是 glibc

    很多人以为 iKuai 基于标准 Linux 发行版( glibc )。实际上 iKuai 使用的是uClibc

    $ /lib/ld-musl-x86_64.so.1 --list /usr/sbin/tcpdump
      /lib/ld64-uClibc.so.0 (0x7f4b1e325000)
      libc.so.0 => /lib/ld64-uClibc.so.0
    

    这意味着:

    • 旧版 OpenWrt ( 15.05/17.01 )的 uClibc 包可以直接原生运行
    • 新版 OpenWrt ( 18.06+)的 musl 包需要 musl 兼容层
    • glibc 程序(大部分 Linux 发行版)需要额外适配

    overlay 持久化

    iKuai 自带 overlay filesystem 在/usr上:

    overlay on /usr type overlay (rw,relatime,lowerdir=/usr,upperdir=/overlay/upper,workdir=/overlay/work)
    

    opkg 安装的文件通过 overlay 写入,但/overlay/upper在 tmpfs 中。Naixi 通过记录+重装方式解决持久化。

    可用的 OpenWrt 包

    理论上 OpenWrt x86_64 仓库的所有包都能安装。已验证:

    包名 版本 状态
    htop 3.3.0
    tcpdump 4.99.4
    opkg 0.7.0
    curl - 待测试
    python3 - 待测试
    luci - 需要 ubus ,受限

    下载安装

    • 安装任意官方爱快 ISO ,由于是 rootfs 系统随便装个3.7.x 版本就行

    • Naixi v61v3 (3.7.19): 下载固件并升级

    • 启动 SSH ,前往系统设置-->登录管理-->远程访问-->远程维护:

      undefined

    用户名:sshd ,密码就是你设置的那个远程维护密码,登录后就是 root 权限。

    安装 OpenWrt 运行环境

    1. 安装 opkg 插件:naixi install https://dl.naixi.net/ikuai-plugin/opkg.tar.gz

    2. 开始使用:opkg update && opkg install htop

    3. 执行htop可见 ik_rc_client 等爱快进程

    4. 插件可通过 naixi list查询列表及运行状态


    安全声明

    仅用于探索 iKuai 系统的可扩展性,使用naixi指令前请了解:

    • 修改固件可能影响稳定性

    • 云控阻断可能影响官方功能更新

    • 建议在测试环境验证后再用于生产

    • 启动时,将会由naixi_boot进行挂载,可使用cat /tmp/naixi_boot.log查看日志

      undefined


    关于

    • 项目使用的文件: https://dl.naixi.net/ikuai-naixi
    • 分析工具:Nyarc — 固件逆向工程控制台
    • 仅用于学习用途,资源仅限个人学习、研究使用,不得用于商业运营、传播或非法用途;版权归爱快公司所有;使用者应在合理范围内使用,24 小时内删除
    Supplement 1  ·  Apr 20
    v69 更新( 2026-04-20 )

    新版本:iKuai8_x64_3.7.19_Naixi_v69.bin
    md5: 3fd0997a81149c1e4949aaa5e8431f33
    🔗 https://dl.naixi.net/ikuai-naixi/iKuai8_x64_3.7.19_Naixi_v69.bin

    🆕 OpenWrt 兼容层(全新)
    • 一键安装:naixi openwrt init
    自动装 opkg + musl chroot ,4MB 的合并包搞定
    • 直接装 OpenWrt 包:opkg install nano htop vim —— 任何 OpenWrt 的 ipk 包都能装,自动落到独立目录不污染 rootfs ,重启不丢
    • 命令直接用:nano 、htop 等装完即可执行( boot 时自动 symlink )
    Supplement 2  ·  Apr 20
    iKuai 的 pmd 一直在不断下新的 ik_rc_client ,目前 v71v11 已经彻底解决
    https://dl.naixi.net/ikuai-naixi/iKuai8_x64_3.7.19_Naixi_v71v11.bin
    # 执行阻断
    naixi ikuaiyun 2
    # 改用替身术
    for f in ik_rc_client cre dtalkd; do
    rm -f /usr/sbin/$f
    cat > /usr/sbin/$f << 'EOF'
    #!/bin/sh
    while true; do sleep 86400; done
    EOF
    chmod +x /usr/sbin/$f
    done
    pkill -9 ik_rc_client cre dtalkd 2>/dev/null
    把 binary 替换成一个什么都不干的假脚本,monitor 看到进程在跑就不会拉起真的,pmd 创建的 symlink 也会被我们覆盖,进程实际只是 sleep ,不连任何服务器
    Supplement 3  ·  Apr 21
    本帖发布后收到 iKuai 官方团队的联系,双方已就内容中涉及的安全细节进行了友好沟通。出于负责任的安全研究原则,相关可操作性较强的技术细节和下载链接已移除。

    后续相关安全发现将通过私下渠道反馈给 iKuai 团队,不再公开披露。感谢关注。
    106 replies    2026-05-05 00:18:47 +08:00
    1  2  
    yzm157
        101
    yzm157  
       Apr 23
    @Gipserr 老哥,可以提供一下 naixi-compat-x86_64.tar.gz , 供研究吗
    Crueyl
        102
    Crueyl  
       Apr 24
    @earpiece5631 大好人,我备份的 naixi-compat-x86_64.tar.gz 的包不小心发错人了,碰巧自己的还删了,如果您那有备份,本人不胜感激,如果还能发给我的话,本人愿意忍痛割爱一下,,[email protected]
    CCNemo
        103
    CCNemo  
       Apr 27
    这个牛了~分析的不错,官方不会找麻烦吧?
    earpiece5631
        104
    earpiece5631  
       7 days ago
    @Crueyl 我没有备份,而且已经想好不玩爱快了,网络环境越来越严峻了,早点抽身免喝茶吧。
    loveyouluobin
        105
    loveyouluobin  
       7 days ago
    大神,搞出一个成品出来,造福一下广大的,爱快使用者们。。
    loveyouluobin
        106
    loveyouluobin  
       5 days ago
    @lxxiil 能不能有一个集成好了直接装 OP 应用的版本放出来呢,那真的会成为一代经典了。
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2907 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 15:35 · PVG 23:35 · LAX 08:35 · JFK 11:35
    ♥ Do have faith in what you're doing.