两台斐讯 N1 跑 OpenWrt(lean & lienol R22.12.13),Tailscale 版本落后了,需要更新。
环境
- SoC: Amlogic S905D, AArch64 Cortex-A53 x4
- 固件: OpenWrt R22.12.13, Kernel 5.15.x-flippy
- Tailscale 安装方式: 静态二进制(非 opkg 包)
- 旧版本: 1.84.0 ~ 1.90.9
- 目标版本: 1.94.2
确认安装方式
先看 Tailscale 是怎么装的:
opkg list-installed | grep tailscale # 空——不是 opkg 装的ls -la /usr/bin/tailscale*-rwxr-xr-x 1 root root 24740784 /usr/bin/tailscale-rwxr-xr-x 1 root root 36262228 /usr/bin/tailscaled两个独立的静态 ELF,不是 combined binary,不是 opkg 包。更新方式就是直接替换二进制。
下载新版本
从官方下载 arm64 静态包:
curl -sL "https://pkgs.tailscale.com/stable/tailscale_1.94.2_arm64.tgz" \ -o tailscale_1.94.2_arm64.tgztar xzf tailscale_1.94.2_arm64.tgz更新流程
有 LAN 访问的情况
如果能通过 LAN IP 直接 SSH(不依赖 Tailscale 隧道),流程比较简单:
# 1. 备份ssh root@<LAN_IP> "cp /usr/bin/tailscale{,.bak} && cp /usr/bin/tailscaled{,.bak}"
# 2. 上传 tailscale(CLI 可以直接覆盖)scp tailscale_1.94.2_arm64/tailscale root@<LAN_IP>:/usr/bin/tailscale
# 3. tailscaled 正在运行,直接 scp 会报 "dest open: Failure"# 需要先停掉ssh root@<LAN_IP> "kill \$(pidof tailscaled); sleep 2"scp tailscale_1.94.2_arm64/tailscaled root@<LAN_IP>:/usr/bin/tailscaled
# 4. 通过 init 脚本启动(使用正确的 state 路径)ssh root@<LAN_IP> "/etc/init.d/tailscale start"
# 5. 验证ssh root@<LAN_IP> "tailscaled --version && tailscale status | head -3"CAUTION不要用
tailscale up --reset!--reset会清除认证状态,需要重新登录。直接用 init 脚本重启就行,它会读取原有的 state 文件。
只有 Tailscale IP 访问的情况
如果只能通过 Tailscale 网络连接,重启 tailscaled 会短暂断连。用 nohup 确保命令执行完:
ssh root@<TAILSCALE_IP> "nohup sh -c '\ killall tailscaled; sleep 2; \ rm -f /var/run/tailscale/tailscaled.sock; \ /usr/bin/tailscaled --state=/var/lib/tailscale/tailscaled.state &' \ > /tmp/ts-restart.log 2>&1 &"
# 等几秒让隧道重建sleep 5tailscale ping <TAILSCALE_IP>踩坑:Tailscale IP SSH 不通
更新完后发现 Tailscale IP 能 tailscale ping 通,但 SSH 连不上。排查结果:
tailscale ping 走的是 Tailscale 自己的 WireGuard 隧道,而 SSH 走的是操作系统的 TCP 栈。重启 tailscaled 后隧道需要时间重建,等几秒就好了。
如果是持续不通,检查:
# SSH 是否监听所有接口grep ListenAddress /etc/ssh/sshd_config
# 防火墙是否允许 tailscale zone 的 inputuci show firewall | grep -E 'zone.*(tailscale|name|input)'
# iptables 里 tailscale 相关的链iptables -L ts-input -n -viptables -L zone_tailscale_input -n -v踩坑:OpenSSH vs Dropbear
这个固件用的是 OpenSSH(不是 OpenWrt 默认的 Dropbear)。区别在于 authorized_keys 的路径:
| SSH 服务 | 密钥路径 |
|---|---|
| Dropbear | /etc/dropbear/authorized_keys |
| OpenSSH | ~/.ssh/authorized_keys |
确认方式:
ps | grep -E "sshd|dropbear"init 脚本
如果没有 init 脚本,tailscaled 不会开机自启。标准的 procd 脚本:
#!/bin/sh /etc/rc.common
START=99USE_PROCD=1
start_service() { procd_open_instance procd_set_param command /usr/bin/tailscaled --state=/var/lib/tailscale/tailscaled.state procd_set_param respawn procd_close_instance}
stop_service() { killall tailscaled}chmod +x /etc/init.d/tailscale/etc/init.d/tailscale enableTIP注意
--state路径要和你实际的 state 文件一致。常见路径有/etc/tailscale/tailscaled.state和/var/lib/tailscale/tailscaled.state,看你之前是怎么启动的。
顺手:清理不必要的服务
这类 lean/lienol 固件默认启用了大量服务。一台路由器上跑着 FTP、SNMP、NFS、蓝牙、AirPlay、多个 VPN 服务端、多套代理……大部分完全没用,还有安全风险。
列一下停掉的:
# 安全风险:监听 0.0.0.0RISKY="vsftpd snmpd netserver ocserv rpcbind nfsd"
# 资源浪费WASTE="netdata bluetoothd btagent avahi-daemon miniupnpd pptpd \ shairplay shairport-sync mjpg-streamer kms udpspeeder udp2raw"
# 冗余代理PROXY="shadowsocksr passwall_server passwall2_server ssr_mudb_server \ v2ray_server xray gost kcptun openclash softethervpn n2n"
for svc in $RISKY $WASTE $PROXY; do /etc/init.d/$svc stop 2>/dev/null /etc/init.d/$svc disable 2>/dev/nulldone清理后内存释放了约 36MB,监听端口从 ~40 个降到 ~24 个。
最终状态
=== tailscale version ===1.94.2=== tailscaled version ===1.94.2=== status ===tailscale is running, all peers connected两台 N1 都更新到 1.94.2,服务正常。