0) What Tailscale Is (30-second refresher)
- A mesh VPN / overlay network: your devices join a private network (“tailnet”) and get stable 100.x.y.z IPs.
- Uses WireGuard for encrypted tunnels. Data tries to go direct P2P over UDP; if blocked, it falls back to encrypted DERP relays.
- Access is controlled by identity (your login) and ACL policies, not by being “on the same LAN”.
- A control plane coordinates keys, device info, and policy; it is not in the data path.
1) Tailnet Basics (org vs personal)
- Organization tailnet (you logged in with company email): you’re a member; admins control ACLs, routes, DNS, etc. You’ll see many org devices—that doesn’t grant you access unless ACLs allow it.
- Personal tailnet (you logged in with personal email): you are the admin; full control (devices, ACLs, DNS/MagicDNS, keys, routes).
Privacy lever (local):
To block all inbound connections to your device while staying online:
tailscale up --shields-up
(Works on macOS/Linux CLI; on Windows/macOS you can also toggle via the app UI.)
2) Install Tailscale (per OS)
Windows 10/11
- Run the Tailscale installer (standard MSI).
- Launch the Tailscale app (tray icon).
- Click Log in, authenticate with the account you want this device to belong to.
macOS (App + CLI)
Recommended (GUI + helper):
# If you use Homebrew:
brew install --cask tailscale-app
open -a Tailscale
- Click Log in in the app and authenticate.
- CLI becomes available as
tailscale.
If your CLI says “command not found” or GUI/CLI disagree, see “macOS fixes” in the Troubleshooting section.
Linux (systemd distros)
curl -fsSL https://tailscale.com/install.sh | sh
sudo systemctl enable --now tailscaled
sudo tailscale up
# Browser opens for SSO; approve and you're online.
Headless Linux (no browser):
- In the Admin Console (your tailnet), make an Auth Key.
sudo tailscale up --auth-key tskey-XXXXXXXXXXXXXXXX
3) Add a Second Machine (join the same tailnet)
Repeat the install on the second device and log in with the same account/identity you used on the first.
Verify both are visible to each other:
tailscale status
You should see each device listed with a 100.x.y.z address and “active”.
4) Verify Connectivity & Name Resolution
From either machine:
tailscale ip # show this device’s tailnet IPs
tailscale status # show peers and state
ping 100.x.y.z # test the other device by its Tailscale IP
MagicDNS (if enabled in your tailnet): you can use hostnames like:
ping hostname.tailnet
5) Common Access Methods (beyond SSH)
A) SSH (Linux/macOS targets)
Key-based (classic):
# on your client
ssh-keygen -t ed25519 -C "my-key"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@100.x.y.z
# test:
ssh user@100.x.y.z
Harden (optional, on server):
Disable password auth after key login works by editing sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
Then restart sshd.
Tailscale SSH (SSO-backed, no key copying):
- Admin enables Tailscale SSH in policy and on the target host:
sudo tailscale up --ssh
- Then from your client:
ssh user@hostname.tailnet
B) Windows GUI (RDP)
On the Windows host (PowerShell as Admin):
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" `
-Name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
From client:
- Windows:
mstsc /v:100.x.y.z - macOS: Microsoft Remote Desktop app → add
100.x.y.z - Linux:
xfreerdp /v:100.x.y.z
C) SMB / File Shares
- Windows host → Windows client:
\\100.x.y.z\Share - Windows host → macOS client: Finder → Go → Connect to Server →
smb://100.x.y.z/Share - Windows host → Linux client:
sudo apt install cifs-utils
sudo mount -t cifs //100.x.y.z/Share /mnt/share -o user=USERNAME
D) VNC (alternative GUI, cross-platform)
- Install a VNC server on the host (e.g., TightVNC).
- Connect from client VNC viewer to
100.x.y.z:5900.
Note: VNC itself isn’t encrypted, but the Tailscale tunnel is.
E) HTTP(S) services / Databases
- Any TCP/UDP service reachable on a port can be used over Tailscale if local firewall and ACLs allow it:
nc -vz 100.x.y.z 443 # test HTTPS
nc -vz 100.x.y.z 5432 # test PostgreSQL
6) Everyday CLI You’ll Actually Use
tailscale status # see who’s online, route type (direct/derp)
tailscale ip # show your addresses
tailscale ping hostname # quick health probe via Tailscale
tailscale logout # detach this device from the tailnet
tailscale up --shields-up # block inbound
tailscale up --advertise-exit-node # make this device an exit node
tailscale up --exit-node=100.x.y.z # route your internet via that exit node
tailscale up --advertise-routes=192.168.1.0/24 # act as subnet router
Note: Routes advertised must be approved in your tailnet before others can use them.
7) Features & Options (with where they matter)
MagicDNS
- Friendly names for peers (e.g.,
mybox.tailnet). - Configure in your tailnet’s DNS settings; then use names instead of IPs.
Exit Nodes
- Send all internet traffic through a chosen device (e.g., home desktop).
- On exit node:
tailscale up --advertise-exit-node - On client: select that node in the app, or
tailscale up --exit-node=<IP-or-name>
Subnet Routers
- Make an entire LAN behind one device reachable to the tailnet:
sudo tailscale up --advertise-routes=10.0.0.0/24,10.10.0.0/16
- Approve those routes in your tailnet.
ACLs (Access Control Lists)
- Control who can access what (users/groups → devices/ports).
- If you can see devices but can’t connect, an ACL likely blocks it.
- Ask your admin to allow your user/group to
hostname:portyou need.
Device Posture / Keys
- Devices enroll with keys tied to identity; keys rotate automatically.
- Disabling a user/device or rotating keys revokes access immediately (your earlier question about ex-employees).
8) Security Reality Checks (based on your questions)
- Seeing many org devices: normal in a company tailnet. No automatic access to them; ACLs gate everything.
- Can admins access my Mac? No, not silently. They can only allow the network path. You still need a listening service (SSH/RDP/etc.), and they need policy allowing their identity to reach your port. Use
--shields-upif you want local deny-all. - Ex-employee scenario: once removed/disabled, their keys are invalid and other devices won’t talk to them. Managed Tailscale revocation blocks later access even if they kept old configs.
9) Troubleshooting (real issues you hit + quick fixes)
A) macOS: Error: CLI credentials are not available BadResponse
Cause: GUI login stored in user context but command was run under sudo (root) or the helper wasn’t initialized.
Fix (clean):
- Quit Tailscale from menu bar.
- In Terminal:
sudo tailscale down || true
sudo launchctl unload /Library/LaunchDaemons/com.tailscale.tailscaled.plist 2>/dev/null || true
- Reinstall/repair:
brew install --cask tailscale-app
open -a Tailscale
- Run
tailscale upwithout sudo (GUI-install context). - If you must use root (headless style), use an Auth Key:
sudo tailscale up --auth-key tskey-XXXXXXXXXXXXXXXX
B) macOS: tailscaled: command not found
Cause: The helper/daemon binary isn’t in PATH or wasn’t installed.
Fix:
- Remove old/broken bits, reinstall GUI app, then open it once:
sudo rm -rf /Applications/Tailscale.app
sudo rm -f /usr/local/bin/tailscale /usr/local/bin/tailscaled
brew uninstall tailscale tailscale-app --force 2>/dev/null || true
brew install --cask tailscale-app
open -a Tailscale # initializes helper and CLI shim
tailscale version
C) “I see many devices. Can they access me?”
- Not by default. Check or toggle:
tailscale up --shields-up
- You still can connect outbound to others.
D) “Ping works but SSH/RDP doesn’t”
- Check local firewall on the target (open port 22/3389/etc.).
- Confirm service is listening (
sshd, RDP enabled). - Ask admin to allow the ACL rule for your user →
hostname:port. - Test port from client:
nc -vz 100.x.y.z 22
# Windows PowerShell:
Test-NetConnection -ComputerName 100.x.y.z -Port 3389
E) “Direct path fails, slow over DERP”
- That’s expected on blocked UDP/NAT. If possible, allow outbound UDP on both sides to improve direct connectivity.
F) “Can’t resolve names”
- Enable MagicDNS in your tailnet and ensure your client is set to accept DNS from Tailscale. Use the hostname you see in the app.
10) Guided “Two-Machine” Tutorials (by OS pair)
macOS ↔ Linux (SSH + Ping)
On both: install, log in, confirm tailscale status.
From macOS:
ping 100.a.b.c
ssh user@100.a.b.c
If passwordless wanted:
ssh-keygen -t ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@100.a.b.c
ssh user@100.a.b.c
Windows ↔ macOS (RDP + SMB)
On Windows (host):
- Enable Remote Desktop (Settings → System → Remote Desktop), or via PowerShell (see earlier).
- Share a folder if you want SMB.
From macOS (client):
- Microsoft Remote Desktop → add
100.x.y.z→ connect (RDP). - Finder → Connect to Server →
smb://100.x.y.z/Share.
Windows ↔ Linux (RDP from Linux client)
On Windows (host): enable RDP (and firewall rules).
On Linux (client):
sudo apt install freerdp2-x11 # distro equivalent
xfreerdp /v:100.x.y.z
Linux ↔ Linux (SSH + Subnet router)
On the router host:
sudo tailscale up --advertise-routes=192.168.1.0/24
Approve route in tailnet; then from the other Linux box:
ping 192.168.1.10 # device behind the router
ssh user@192.168.1.10
11) Admin-Only (for your personal tailnet or if you’re an org admin)
- Machines: rename, disable, delete devices; approve routes; set exit nodes.
- Access Controls: edit JSON ACLs (who → what:port).
- DNS: MagicDNS on/off; custom resolvers; split DNS.
- Keys: create/revoke auth keys; device expiry policies.
- Users/Groups: invite/remove users; map groups for ACLs.
- Tailscale SSH: turn on; define per-host ssh rules in ACLs.
12) Quick “Owner’s Safety” Checklist
- Keep passwordless SSH set up correctly; disable SSH password auth if you own the server.
- Use NLA for RDP and strong account passwords.
- Prefer deny-by-default ACLs; only allow required ports/hosts.
- Use
--shields-upon laptops if you don’t want inbound at all. - Offboard fast: disable users/devices; keys rotate automatically.
You’re all set 🎉
With this, you can:
- Install on Windows/macOS/Linux,
- Add devices to the same tailnet,
- Verify connectivity (ping/status),
- Access services (SSH, RDP, SMB, VNC, HTTP, DBs),
- Enable MagicDNS, exit nodes, subnet routers,
- Understand ACLs, admin capabilities, and security,
- Fix common macOS install/auth issues,
- And keep your environment locked down.