Run Tailscale on your e-reader. Tested on Kindle PW5/PW6, Kobo, and PocketBook. Should work on any KOReader device with ARMv7 or ARM64.
Pairs well with koreader-syncthing for file sync over your tailnet.
- A Tailscale account. Sign up at tailscale.com.
- A reusable auth key. Create it at the Tailscale Admin Console.
- An e-reader with file or SSH access. KOReader must be installed.
- Copy
tailscale.kopluginto the KOReader plugins directory.- Kindle:
/mnt/us/koreader/plugins/ - Kobo:
/mnt/onboard/.adds/koreader/plugins/ - PocketBook:
/mnt/ext1/koreader/plugins/
- Kindle:
- Restart KOReader.
- Open Network → Tailscale VPN and select Install/Update Tailscale. In reader mode, open the gear icon and select Settings → Network → Tailscale VPN.
Installation downloads 25 to 57 MB. Do not close KOReader during installation.
To skip the download, transfer the binaries to the plugin bin/ directory over SCP/SSH. See Manual Installation.
-
Save the auth key. Copy the reusable auth key to
bin/auth.key. Default locations:- Kindle:
/mnt/us/koreader/plugins/tailscale.koplugin/bin/auth.key - Kobo:
/mnt/onboard/.adds/koreader/plugins/tailscale.koplugin/bin/auth.key - PocketBook:
/mnt/ext1/tailscale/bin/auth.key(external storage)
scp -P 2222 auth.key user@kindle-ip:/mnt/us/koreader/plugins/tailscale.koplugin/bin/auth.key scp -P 2222 auth.key user@kobo-ip:/mnt/onboard/.adds/koreader/plugins/tailscale.koplugin/bin/auth.key scp -P 2222 auth.key user@pocketbook-ip:/mnt/ext1/tailscale/bin/auth.key
- Kindle:
-
Optional: use a self-hosted Headscale server. Create
headscale.urlin the bin directory and write the server URL to it. Default locations match the auth.key locations above. Headscale auth keys may start withhskey-auth-. The menu item "Headscale URL info" shows the configured URL and how to update it. -
Enable the connection. Open Network → Tailscale VPN and toggle On.
The plugin uses kernel TUN when /dev/net/tun is a readable and writable character device. Kernel mode gives KOReader transparent tailnet routing for OPDS, progress sync, and Home Assistant. Without a usable TUN device, the plugin uses --tun=userspace-networking.
The selected mode is written as the first line of bin/tailscaled.log.
To force userspace mode, create an empty file bin/force-userspace and restart Tailscale. Use this when the TUN driver is unstable. On certain Kobo devices, kernel TUN crashes the device with wgengine: watchdog timeout on Reconfig. The force-userspace file fixes it.
In both modes the plugin listens for SOCKS5 on 127.0.0.1:1055 and HTTP CONNECT on 127.0.0.1:1056. In userspace mode, set KOReader's HTTP proxy to http://127.0.0.1:1056 (Settings → Network → Proxy), or enable "Automatically configure HTTP proxy" in Settings / Config and the plugin does it on connect and restores it on disconnect.
Binaries, configuration, and logs live in the bin directory. The location depends on the device.
- Kindle:
/mnt/us/koreader/plugins/tailscale.koplugin/bin/ - Kobo:
/mnt/onboard/.adds/koreader/plugins/tailscale.koplugin/bin/ - PocketBook:
/mnt/ext1/tailscale/bin/(external storage)
PocketBook uses external storage because the plugin directory may be on a read-only filesystem. Logs (tailscale.log, tailscaled.log) and configuration (auth.key, headscale.url) are stored in the same directory.
Make the scripts executable on the device:
cd /mnt/us/koreader/plugins/tailscale.koplugin/bin
chmod +x start_tailscale.shThe Kobo and PocketBook locations follow the list above.
Installation needs space for the download. Check free space with df -h /mnt/us /mnt/onboard /mnt and keep at least 100 MB free. If space is short, move KOReader to another partition or use Manual Installation.
-
Read the device's Tailscale IP from the plugin status menu.
-
Install Tailscale and Syncthing on other devices.
-
Add the Tailscale address to Syncthing.
tcp://<tailscale-ip or magic dns>:22000
This gives secure remote file synchronization without a shared network.
- Tailscale VPN: toggle the connection.
- Status: show the device IP and info.
- Install/Update Tailscale: download and install the binaries.
- Uninstall Tailscale: stop and remove all Tailscale files. This removes the auth key.
- Settings / Config: auth key, Headscale URL, exit node (set a node and enable it to route all traffic through it), and automatic HTTP proxy.
- Loopback: some firmware (Kobo, PocketBook) does not configure
loat boot. The plugin brings it up before starting the daemon. The SOCKS5 and HTTP proxy listeners need loopback to bind. - FAT32: on devices with a FAT32 filesystem, state lives in
/tmp/tailscale(tmpfs). The plugin copies it in at start and syncs it back tobin/on stop. Identity survives reboots because the node re-registers withauth.key. - USB mass storage: tailscaled stops before KOReader enters USB storage mode and restarts after. If the device crashes mid-session, the node re-registers via
auth.key.
Open Network → Tailscale VPN and select Uninstall Tailscale. Reinstall with Install/Update Tailscale.
Back up the auth key before uninstalling. Move bin/auth.key to auth.key.backup and restore the name after reinstalling.
If the automatic installation fails, install the binaries by hand. The examples use the Kindle path. Replace it with your plugin path.
-
Download the binaries for the device architecture (ARMv7/ARMv8/ARM64).
wget https://pkgs.tailscale.com/stable/tailscale_1.94.2_arm.tgz # or curl -O https://pkgs.tailscale.com/stable/tailscale_1.94.2_arm.tgz -
Transfer the archive to the device.
scp -P 2222 tailscale_1.94.2_arm.tgz root@<device-ip>:/mnt/us/koreader/plugins/tailscale.koplugin/bin/
-
Extract and install on the device.
cd /mnt/us/koreader/plugins/tailscale.koplugin/bin tar xzf tailscale_1.94.2_arm.tgz mv tailscale_*/tailscale tailscale_*/tailscaled ./ rm -rf tailscale_* tailscale_1.94.2_arm.tgz chmod +x tailscale tailscaled touch auth.key
-
Write the auth key.
echo "tskey-..." > auth.key
-
Start Tailscale from the plugin menu.
If you previously kept binaries outside the plugin directory (for example /mnt/us/tailscale), move them into the plugin bin/ directory.
- No network: the plugin will not start while the device has no network. It shows an airplane mode message. Enable the network first.
- Logs: check
bin/tailscaled.logandbin/tailscale.login the plugin directory. The networking mode is the first line oftailscaled.log. - Status: use the plugin status menu to see device info.
See NOTES.md for internals.
Based on mitanshu7/tailscale_kual. MIT License.