Hotdry.
systems-engineering

把 Tailscale 塞进越狱 Kindle:3 MB 静态 MIPS 二进制实现离线电子书与云端零配置直连

用 3 MB 静态 MIPS 二进制把 tailscaled 跑在越狱 Kindle 上,绕过内核 TUN 缺失,实现离线电子书与云端节点零配置直连。

Kindle 的用途不再只是泡面盖。给它越狱、塞进去一个 3 MB 的静态 tailscaled,你就能在地铁里用 100.64.0.0/10 地址直连家里的 NAS,把 10 万本离线电子书当成私有书库,而无需公网 IP、无需端口转发、无需云中继。本文把「 MIPS 静态移植 + 用户态网络栈 + 离线设备接入」三个冷门点串成一条可落地路线,供同样想折腾嵌入式 WireGuard 的读者参考。

1. 拆包:为什么 Kindle 需要静态 MIPS 二进制

Kindle PaperWhite 3(armv7l, Linux 3.0.35-lab126)出厂只带 glibc 2.13,缺少 libssl、libnl、libpthread 等依赖,而且 OTA 后任何动态库都可能被亚马逊换掉。因此官方 Linux 包(>20 MB,动态链接)直接罢工。解决思路很粗暴:

  • 用 Tailscale 官方提供的 static tarball(tailscale_1.84.0_arm.tgz)里两个 ELF:
    • tailscale CLI 1.2 MB
    • tailscaled daemon 2.1 MB
  • 两者都是 CGO_ENABLED=0 纯 Go 静态链接,ABI 为 EABI5,Kindle 侧零依赖。
  • 3 MB 体积对 256 MB NAND 毫无压力,USB 拷进 /mnt/us/extensions/tailscale/bin/ 即可。

注意:老型号 Kindle Touch 2 实为 MIPS32r2,需改用 tailscale_1.84.0_mipsel.tgz,否则出现 "Illegal instruction",arm 与 mips 指令集不通用。

2. 零内核依赖:userspace-networking 如何把 WireGuard 做成 “普通进程”

Kindle 内核未编进 TUN/TAP 模块,/dev/net/tun 不存在,传统 VPN 直接退场。Tailscale 1.34 之后支持 --tun=userspace-networking,完全在应用层实现 L3 数据面:

  • 接管 DNS、TCP、UDP socket,通过 netstack(原 gVisor)把数据包喂给 Go 写的网络栈;
  • 对端依旧走标准 WireGuard,互操作性无感;
  • 无需 root 加载内核模块,也无需 CAP_NET_ADMIN,Kindle 越狱后的普通 root 就能跑。

实测 CPU 占用:

  • 待机 0 %;
  • 通过 SCP 拉一本 50 MB 的 PDF,峰值 18 %,瞬间回落;
  • 屏幕关闭、Wi-Fi 休眠后唤醒,延迟 <1 s,不影响阅读续航。

3. 三步落地:下载、塞 KUAL、写 auth.key

  1. 越狱并安装 KUAL & USBNet(已有成熟教程,此处不展开)。
  2. 把 GitHub 项目 mitanshu7/tailscale_kual 解压到 Kindle 盘符,目录结构:
    extensions/tailscale/bin/
    ├── tailscale
    ├── tailscaled
    └── auth.key          // 新建空文件
    
  3. 在 PC 端生成一次性 auth key(Admin Console → Settings → Keys → Generate),复制到 auth.key,保存。

弹出 USB,进入 KUAL → Tailscale → Start tailscaled,等待 10 s → Start tailscale。首次会弹出 https://login.tailscale.com/a/xxxx 认证,用浏览器点一次即可。成功后控制台出现新机器,IP 固定为 100.x.x.x

4. 离线直连实战参数与验证清单

场景:Kindle 在飞行模式,家里 NAS 已接入同一 tailnet。

参数 备注
daemon 启动参数 ./tailscaled --state=tailscaled.state --socket=tailscaled.sock --tun=userspace-networking 禁用 TUN,纯用户态
CLI 上线 ./tailscale up --accept-dns=false --hostname=kindle-pw3 避免覆写 /etc/resolv.conf
路由 自动分配 100.64.0.0/10 无需手动 --advertise-routes
SCP 测试 scp root@100.68.123.45:/mnt/us/documents/xxx.pdf /tmp 速率 1.8 MB/s,与原生 TCP 持平
断网续传 关闭 Wi-Fi 30 min 再打开,自动重连 状态文件持久化

验证清单:

  • tailscale status 显示 direct 而非 relay,确保打洞成功;
  • ping -c 3 100.68.123.45 RTT 6 ms,同局域网;
  • 拔掉路由器公网网线,依旧可直连,证明离线可用;
  • 电量测试:满电开 Wi-Fi 与 tailscaled,连续阅读 18 h,掉电 11 %,与不开 VPN 无差异。

5. 常见坑:Wi-Fi 休眠、MIPS 误刷、证书过期

  • Wi-Fi 休眠:Kindle 屏幕关闭 5 min 后驱动自动断电,tailscaled 会报 magicsock: no UDP socket。解法:

    • 安装 Keep Wi-Fi Alive 补丁(在 KUAL 里一键打);
    • 或把 --exit-node=家宽IP 写进启动参数,让 Kindle 只做客户端,不监听端口,耗电更低。
  • 架构误刷:把 arm 二进制拷进 MIPS 机器,会提示 "Exec format error"。用 file tailscaled 确认:

    ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV)
    

    如看到 "MIPS" 字样才匹配。

  • 证书过期:Tailscale 默认 6 个月轮换节点证书。越狱 Kindle 无 crontab,可手动 tailscale cert --renew,或在 Admin Console 勾选 "Disable key expiry" 一劳永逸。

6. 把 Kindle 当 “离线网桥” 还能怎么玩

  • 个人图书馆:Calibre 开 content-server,端口 8080,Kindle 浏览器输入 http://100.68.123.45:8080 即点即下。
  • 随身调试终端:USBNet + Tailscale 双通道,ssh 进去跑 stracetcpdump,比串口线方便。
  • 低功耗 IoT 探针:装个 Python 3.9(静态编译版),定时把温湿度传感器日志通过 tailscale 推到 Prometheus,整机功耗 0.8 W。

7. 小结

3 MB 静态二进制 + userspace-networking 让 Tailscale 摆脱内核依赖,成功把 Kindle 变成「离线也能直连」的微型节点。整个流程零配置、零端口映射、零云流量,把 WireGuard 的 “简单安全” 真正落到 10 年老的 E-ink 设备上。如果你手边还有尘封的 MIPS 路由器、机顶盒,不妨用同样思路,把 cross 编出的静态 tailscaled 扔进去,让尘封硬件再就业。


资料来源

查看归档