中兴U30 Air随身WIFI移植zerotier

在无法运行zerotier APP的环境下部署zerotier-one

Posted by 浅唱 on February 11, 2026

前言

zerotier实在优秀,我的大部分设备都接入了zerotier,单位采购了两台随身WIFI,安装了zerotier的安卓版本APP,VPN建立之后无法正常工作
连接建立,controller也看到在线,但是其他的设备ping不通
当然了,如果在这个随身WIFI下,由于网络会进到随身WIFI,而那个IP已经分配给随身WIFI内部了,所以可以ping通,如果不在这个网络内,通过zeortier就无法连通了
因此退而求其次的方案就是frp内网穿透+gost搭建socks5代理
但是linux下是可以直接运行zerotier-one的,因此我尝试在github上寻找arm版本的zerotier-one可执行文件,于是找到了zerotier-magisk这个项目,他是通过magisk模块去运行。
但是我没有Magisk,也不想尝试刷机,但我通过UFI的高级功能已经获取到了root权限
我已经移植好一台成功了
现在操作一下第二台,特此记录下过程

开始移植

下载对应架构模块包

:/ # uname -a
Linux localhost 5.4.254-android12-9-g7463324543ed #1 SMP PREEMPT Tue Mar 4 16:37:57 CST 2025 armv8l Toybox

armv8l是arm32位的架构,故下载zerotier-magisk-arm-gcc-xxxxxx.zip版本,下载过NDK版本,由于无法调用系统链接库报错

CANNOT LINK EXECUTABLE "/data/adb/zerotier/zerotier-one": library "libm.so" needed or dlopened by "/data/adb/zerotier/zerotier-one" is not accessible for the namespace "(default)"

由于/system是只读,也无法放入/system/bin中,故更换为GCC版本可以运行
顺便下载app控制台app-xxxxxx.zip,一起push到设备中

adb push app-f55e880.zip /sdcard
adb push zerotier-magisk-arm-gcc-e2c0c3a.zip /sdcard

安装

magisk模块安装脚本的方式是运行customize.sh,但是非magisk环境里面的很多命令没有,因此只挑出有用的命令手动在shell运行,达到安装的效果

echo "- unzip"
unzip -o /sdcard/zerotier-magisk-arm-gcc-e2c0c3a.zip -x 'META-INF/*' -d /data/local/tmp/zerotier
echo "- create work dir"
rm -rf /data/adb/zerotier/
mkdir -p /data/adb/zerotier/run /data/adb/zerotier/home
mv /data/local/tmp/zerotier/zerotier/* /data/adb/zerotier/
ln -sf /data/adb/zerotier/zerotier-one /data/adb/zerotier/zerotier-cli
ln -sf /data/adb/zerotier/zerotier-one /data/adb/zerotier/zerotier-idtool
echo "- set file permission"
chmod -R 755 /data/adb/zerotier
chmod 755 /data/adb/zerotier/zerotier.sh
chmod 755 /data/adb/zerotier/zerotier-one
chmod 755 /data/local/tmp/zerotier/*.sh

修改service.sh

由于service.sh里面的inotifyd命令不能正常工作,似乎是因为这个系统过于精简的原因

inotifyd /data/local/tmp/zerotier/handle.sh /data/adb/zerotier/run/pipe:w
inotifyd: /data/adb/zerotier/run/pipe: Invalid argument

因此需要替代几处inotifyd命令

# ----------------------------------------------
#             CLI before login
# ----------------------------------------------
#touch $PIPE_CLI
#inotifyd $MODDIR/handle.sh $PIPE_CLI:w &>/dev/null &  # toybox inotifyd bug: needs an extra character after colon
(
  while true; do
    # 等待文件有写入变化
    inotifywait -e modify $PIPE_CLI 2>/dev/null
    # 文件变化时调用 handle.sh,并传入文件名
    $MODDIR/handle.sh w $PIPE_CLI
  done
) &

# ----------------------------------------------
#             APP after login
# ----------------------------------------------

wait_until_login

if [[ -d "$APPROOT" ]]; then
  rm -rf $APPROOT/run
  mkdir -p $APPROOT/run

  cp $ZTROOT/home/authtoken.secret $APPROOT/run/authtoken
  touch $PIPE_APP
  APP_UID=$(stat -c %u $APPROOT)
  APP_GID=$(stat -c %g $APPROOT)
  chown -R $APP_UID:$APP_GID $APPROOT/run #更改所有者和所有组为应用
  chmod 666 $APPROOT/run/authtoken $PIPE_APP
  #inotifyd $MODDIR/handle.sh $PIPE_APP:w &>/dev/null &
  (
    while true; do
      inotifywait -e modify $PIPE_APP 2>/dev/null
      $MODDIR/handle.sh w $PIPE_APP
    done
  ) &

最后还有个fi别弄丢了
再push进去

adb push service.sh /sdcard

cp /sdcard/service.sh /data/local/tmp/zerotier/service.sh

替换planet

adb push "C:\ProgramData\ZeroTier\One\planet" /sdcard

cp /sdcard/planet /data/adb/zerotier/home/planet

安装APP

手动运行service.sh

先安装APP打开一次再运行脚本,脚本里面有处理APP路径的逻辑,如果还没安装运行过路径不存在处理不了,APP将不能正常使用

/data/local/tmp/zerotier/service.sh
/data/adb/zerotier/zerotier.sh status

随后用检测一下状态,运行中

关闭重启一下APP

加入网络

在APP或者在命令行中操作

/data/adb/zerotier/zerotier-cli join 5873cad879664679

新增上线,授权

到此就已经能用了 延迟真的好低 ping一下另一台试下 相当可以了

配置路由

因为两个都是192.168.0.0/24段,主要的固定远程电脑都连接在设备1上,只要将192.168.0.0路由到设备1即可,这样如果连接在设备2,会先查找在设备2的路由,找不到就找设备1的路由(我是这样想的),试验一下可不可以成功
很遗憾失败了 路由并没有回退机制,直接就路由不可达
手动桥接错乱,在控制台勾选Active bridge 桥接可能适用于 zerotier网络是个大型网络…… 好像也不是这么回事
算了 搞不定
用配置路由的方式 让.0.0/24走设备1路由 .2.0走设备2路由
很遗憾 也不行 这个随身WIFI不像Openwrt路由器 随身WIFI下面的设备没办法通过路由器走进zerotier网络 使用代理的方式应该是可以 完结