Install Tailscale on a WD My Cloud EX2 Ultra NAS and configure it to auto-start on reboot — surviving firmware updates.
WD My Cloud EX2 Ultra
BusyBox v1.30.1 (ARM)
Local IP: 192.168.0.5
Once connected:100.75.215.101
Hostname: mycloudex2ultra
All files on the data partition:/mnt/HD/HD_a2/tailscale/
Survives firmware updates.
Cron-based startup script. Runs at boot and checks every 5 minutes. No init.d or systemd needed.
/etc/ or /usr/local/bin/ will be erased. That's why we install everything on the data partition at /mnt/HD/HD_a2/ — this persists through updates.Before starting, make sure you have:
• SSH access enabled on your WD NAS (Settings → Network → SSH in the WD dashboard at http://192.168.0.5)
• A Tailscale account — sign up free at tailscale.com
• A terminal app — PowerShell on Windows, Terminal on Mac/Linux
Open PowerShell (Windows) or Terminal (Mac/Linux) and connect:
ssh sshd@192.168.0.5
Enter your NAS password when prompted. You should see:
root@MyCloudEX2Ultra ~ #
This is where all Tailscale files will live — safe from firmware updates.
mkdir -p /mnt/HD/HD_a2/tailscale cd /mnt/HD/HD_a2/tailscale
The WD EX2 Ultra uses an ARM processor, so we need the ARM build. Download and extract it:
wget --no-check-certificate https://pkgs.tailscale.com/stable/tailscale_1.74.1_arm.tgz tar xvf tailscale_1.74.1_arm.tgz cd tailscale_1.74.1_arm chmod +x tailscale tailscaled
--no-check-certificate flag is needed because the WD NAS doesn't have up-to-date SSL certificates. This is safe since we're downloading directly from Tailscale's official server.Tailscale stores its login state in /var/lib/tailscale by default. We create a directory on the data partition and symlink it so the state survives firmware updates.
mkdir -p /mnt/HD/HD_a2/tailscale/tailscale_1.74.1_arm/tailscale_lib ln -s /mnt/HD/HD_a2/tailscale/tailscale_1.74.1_arm/tailscale_lib /var/lib/tailscale
Start the Tailscale daemon in the background, then bring it up:
./tailscaled & ./tailscale up
Tailscale will print a login URL. It looks like this:
To authenticate, visit:
https://login.tailscale.com/a/xxxxxxxxxx
Open that URL in a web browser on any device and log in to your Tailscale account. Once authenticated, the terminal will print Success.
Check that the NAS is connected and has a Tailscale IP:
./tailscale status | head -3 ./tailscale ip -4
100.75.215.101 mycloudex2ultra brentrosen@ linux - ... 100.75.215.101
Paste this entire block as one command. Wait for the root@MyCloudEX2Ultra prompt to return before continuing.
cat > /mnt/HD/HD_a2/tailscale/start_tailscale.sh << 'EOF'
#!/bin/sh
TSDIR="/mnt/HD/HD_a2/tailscale/tailscale_1.74.1_arm"
STATEDIR="/mnt/HD/HD_a2/tailscale/tailscale_1.74.1_arm/tailscale_lib"
LOGFILE="/mnt/HD/HD_a2/tailscale/tailscale.log"
if pgrep -f tailscaled > /dev/null 2>&1; then
echo "$(date): tailscaled already running" >> "$LOGFILE"
exit 0
fi
mkdir -p "$STATEDIR"
rm -f /var/lib/tailscale
ln -s "$STATEDIR" /var/lib/tailscale
echo "$(date): Starting tailscaled..." >> "$LOGFILE"
"$TSDIR/tailscaled" --state="$STATEDIR/tailscaled.state" >> "$LOGFILE" 2>&1 &
sleep 5
"$TSDIR/tailscale" up >> "$LOGFILE" 2>&1
echo "$(date): Tailscale started, IP: $($TSDIR/tailscale ip -4)" >> "$LOGFILE"
EOFroot@MyCloudEX2Ultra prompt to appear before pasting the next command. Pasting multiple commands at once will cause them to get jumbled together.chmod +x /mnt/HD/HD_a2/tailscale/start_tailscale.sh
This adds two cron entries: one that runs at reboot (with a 30-second delay to let networking come up) and one that checks every 5 minutes.
(crontab -l; echo "@reboot sleep 30 && /mnt/HD/HD_a2/tailscale/start_tailscale.sh"; echo "*/5 * * * * /mnt/HD/HD_a2/tailscale/start_tailscale.sh") | crontab -
Verify the cron entries were saved:
crontab -l | grep tailscale
@reboot sleep 30 && /mnt/HD/HD_a2/tailscale/start_tailscale.sh */5 * * * * /mnt/HD/HD_a2/tailscale/start_tailscale.sh
Kill the currently running Tailscale daemon, then start it using the script to confirm everything works:
killall tailscaled; sleep 3
Wait for the prompt. Then:
/mnt/HD/HD_a2/tailscale/start_tailscale.sh
Wait about 15 seconds. Then verify:
/mnt/HD/HD_a2/tailscale/tailscale_1.74.1_arm/tailscale status | head -3
100.75.215.101 mycloudex2ultra brentrosen@ linux - ...
Here's where everything lives on the NAS after installation:
/mnt/HD/HD_a2/tailscale/ ├── start_tailscale.sh # Auto-start script (runs via cron) ├── tailscale.log # Startup log file ├── tailscale_1.74.1_arm.tgz # Downloaded archive └── tailscale_1.74.1_arm/ ├── tailscale # CLI binary ├── tailscaled # Daemon binary └── tailscale_lib/ # State directory (login, keys) └── tailscaled.state /var/lib/tailscale → symlink to tailscale_lib/
Tailscale is installed, authenticated, and will auto-start on every reboot. The WD EX2 Ultra is reachable at 100.75.215.101 from any device on your Tailscale network.