Run zerotier in the background after booting!
No conflicts with other Android VPN service!
Use Android App to control ZeroTier
Support for Private Root Servers
-
a version is built with Android NDK Toolchain, supporting api 28 (Android 9.0) and above.
-
another version is build with GCC toolchain, linking to Linux Syscalls statically
Unofficial planet supported; SSO (zeroidc) supported in the version built with GCC for AArch64
AArch64 suppots ARMv8-A and above; Arm version supports ARMv7-A (compiling with -march=armv7-a)
- Download magisk module zip file from github release; install.
- Download controller app apk file from github release; install.
- Reboot your phone.
- Open controller app; enter your 16-character network id; join.
- Enjoy 😋
Replace /data/adb/zerotier/home/planet with your own planet file.
Does not need root privilege
| Feature | Supported? |
|---|---|
| status | ✅ |
| start/stop | ✅ |
| join/leave network | ✅ |
| join/leave planet | ❎ |
Use zerotier.sh to start/stop or inspect status.
Usage: zerotier.sh {start|stop|restart|status}
Use zerotier-cli / zerotier-idtool for ZeroTierOne command line operations.
(zerotier-one not copied to /system/bin)
/data/adb/zerotier
├── home # zerotier-one home directory
│ ├── authtoken.secret # zerotier-one http interface authtoken
│ ├── zerotier-one.pid # zerotier-one pid
│ ├── zerotier-one.port # zerotier-one port
│ └── ...
├── lib # only in NDK compiled module
│ └── libc++_shared.so # NDK dynamic library
├── run
│ ├── daemon.log # service.sh log
│ ├── pipe # named pipe to interact with service.sh
│ ├── zerotier.log # zerotier-one log
│ └── ...
├── zerotier-cli -> zerotier-one # zerotier-one command line interface
├── zerotier-idtool -> zerotier-one # zerotier-one id tool
├── zerotier-one # zerotier-one executable
└── zerotier.sh
all the scripts and binaries are placed in /data/adb/zerotier/, and all copied to /system/bin (in PATH) to be executed directly (except zerotier-one)
zerotier.sh uses named pipe to communicate with service.sh, preventing ZeroTier to start as a subprocess of Shell.
log files are placed in run, daemon.log for service.sh and zerotier.log for ZeroTierOne.
refer to .github/workflow/build-{gcc|ndk}.yml for detailed information.
After 1.14.0, ZeroTierOne has introduce multi-core concurrent packet processing, which requires pthread_setaffinity_np.
However, for NDK, pthread_setaffinity_np won't be available until API level 36, Android 16. (refer to https://android.googlesource.com/platform/bionic/+/master/libc/include/pthread.h)
So in the NDK bulid version, it is replaced by the combination of pthread_gettid_np from <pthread.h> and sched_getaffinity from <sched.h>.
See ThermalEng/zerotier-magisk. Inform me by creating issue. Future function and UI integration if many module users want it.