The Tailscale subnet router post covers accessing your homelab from anywhere. This post goes further: configuring a Tailscale exit node so that all internet-bound traffic from your phone, laptop, or tablet routes through your home connection.
Use cases:
- Access geo-restricted content as if you’re at home
- Browse with your home ISP’s IP address on public WiFi
- Route traffic through your home Pi-hole or AdGuard for ad blocking on the road
- Keep IoT device traffic off public networks
Exit node vs. subnet router
Both run on the same Tailscale node. The distinction is in how devices use the node:
| Feature | Subnet router | Exit node |
|---|---|---|
| What it does | Exposes a LAN subnet to Tailscale peers | Routes all internet traffic through the node |
| DNS | Optional, per-subnet | Routes all DNS too (via MagicDNS) |
| Activated by | Auto for subnet peers | User must explicitly select exit node |
| Split tunnel | N/A | Optional — exclude some traffic |
A single LXC container can be both simultaneously.
Architecture
Task 1: Create the exit node container
| Field | Value |
|---|---|
| VMID | 112 |
| Hostname | tailscale-exit |
| OS | Ubuntu 24.04 LXC (unprivileged) |
| IP | 10.0.0.80 (static) |
| Cores | 1 |
| RAM | 256 MB |
| Disk | 2 GB |
Tailscale requires access to the /dev/tun device. For an unprivileged container, add this to the container config on the Proxmox host:
echo "lxc.cgroup2.devices.allow: c 10:200 rwm" >> /etc/pve/lxc/112.conf
echo "lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file" >> /etc/pve/lxc/112.conf
Alternatively, set this in the UI: CT 112 → Options → Features → TUN device: Yes.
Then restart CT 112.
Task 2: Install Tailscale and advertise as exit node
curl -fsSL https://tailscale.com/install.sh | sh
Exit nodes must forward packets. Enable IP forwarding in the container:
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' >> /etc/sysctl.d/99-tailscale.conf
sysctl -p /etc/sysctl.d/99-tailscale.conf
tailscale up --advertise-exit-node --advertise-routes=10.0.0.0/24 --accept-routes
This command:
--advertise-exit-node— tells Tailscale this node can route all internet traffic--advertise-routes=10.0.0.0/24— also exposes your lab LAN (combines subnet router and exit node)--accept-routes— allows the node to use routes from other Tailscale nodes
Copy the auth URL that appears and open it in your browser to authenticate.
Task 3: Approve the exit node in the Tailscale admin console
In the Tailscale admin console:
- Find the
tailscale-exitmachine - Click … → Edit route settings
- Enable Use as exit node
- Enable the subnet route
10.0.0.0/24 - Click Save
Tailscale requires admin approval for exit nodes as a security measure — a rogue device can’t silently become an exit node for your tailnet.
Task 4: Use the exit node on your devices
In the Tailscale iOS app:
- Tap the Tailscale toggle to connect
- Tap the arrow next to your network name
- Tap Exit Node
- Select
tailscale-exit
All internet traffic now routes through your home connection. Verify at whatismyip.com — it should show your home ISP’s IP.
# List available exit nodes
tailscale exit-node list
# Use your homelab exit node
sudo tailscale set --exit-node=tailscale-exit
# Verify it's routing (should show your home IP)
curl https://ipinfo.io/ip
If you want most traffic to go through the exit node but want some subnets to bypass it (e.g., for performance when accessing cloud services):
sudo tailscale set --exit-node=tailscale-exit --exit-node-allow-lan-access
With --exit-node-allow-lan-access, traffic to your local LAN subnet still goes directly — only internet-bound traffic routes through the exit node. This prevents issues like smart home devices becoming unreachable when the exit node is active.
Task 5: Verify exit node is routing correctly
# Should show nat rules for forwarding
iptables -t nat -L POSTROUTING -v
# Tailscale status
tailscale status
# Should show this node as exit node
tailscale netcheck
Combining with Pi-hole for ad blocking on the road
If you run Pi-hole on your LAN (or in another LXC container), you can route DNS through it while using the exit node:
In Tailscale admin console → DNS → Add nameserver: enter your Pi-hole’s Tailscale IP.
Enable Override local DNS. Now all DNS queries from exit-node-connected devices resolve through Pi-hole — ads and trackers are blocked on mobile data and public WiFi, not just at home.
Troubleshooting
# Check if forwarding is enabled
cat /proc/sys/net/ipv4/ip_forward # should be 1
# Check Tailscale logs
journalctl -u tailscaled -f
# Verify the node is advertised as exit
tailscale status --json | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['Self']['ExitNodeOption'])"
# From a client, confirm traffic is routing through the exit node
traceroute 8.8.8.8 # first hop should be through Tailscale