# How to: Tailscale

# What is Tailscale?

##### <span style="color: rgb(0, 0, 0);">**Introduction**</span>

<span style="color: rgb(0, 0, 0);">Tailscale is a modern, easy-to-use VPN (Virtual Private Network) service that allows you to securely connect your devices, no matter where they are, as if they were on the same private network ⊂( ´ ▽ ` )⊃. Unlike traditional VPNs, Tailscale is built on WireGuard, making it fast, secure, and simple to set up without complex firewall or router configurations. Instead of routing all your internet traffic through a centralized VPN server (like traditional VPNs), Tailscale creates a private peer-to-peer (P2P) network between your devices.   
(☞°ヮ°)☞ ☜(°ヮ°☜)</span>

<span style="color: rgb(0, 0, 0);">A huge feature of Tailscale is: *Advertised Routes*. This allows a device to act as a gateway, enabling access to an entire subnet or network rather than just the device itself. This is useful for connecting to on-premises resources, remote office networks, or private cloud environments without setting up a full VPN. When a device advertises a route *(e.g. 192.168.1.0/24)*, other Tailscale nodes can send traffic to that subnet securely over Tailscale’s encrypted mesh network, eliminating the need for complex firewall or VPN configurations. This makes remote access seamless while maintaining security and ease of use. Using this service with <span style="color: rgb(22, 145, 121);">[SSH](https://wiki.raspberrypiclub.org/books/how-to-ssh/page/what-is-ssh)</span> allows for maximum security and convenience. Tailscale makes your remote machine feel like it’s on the same network, and SSH lets you control it once connected. ☆\*:.｡.o(≧▽≦)o.｡.:\*☆ </span>

##### <span style="color: rgb(0, 0, 0);">**Capabilities of Tailscale**</span>

- <span style="color: rgb(0, 0, 0);">Zero-config VPN: No need to configure firewalls or open ports</span>
- <span style="color: rgb(0, 0, 0);">End-to-end encryption: All connections are fully encrypted using WireGuard</span>
- <span style="color: rgb(0, 0, 0);">Multi-device networking: Access your home computer, work server, or any connected device from anywhere</span>
- <span style="color: rgb(0, 0, 0);">Split tunneling: Choose which traffic goes through the VPN while keeping other connections direct</span>
- <span style="color: rgb(0, 0, 0);">Runs on any network: Works behind NATs and firewalls without manual configuration</span>

*Last Updated: 2/20/2025  
BY: Lilian*

# 1.0 Installation

---

##### <span style="color: rgb(0, 0, 0);">**Materials / Pre-Setup**</span>

1. <span style="color: rgb(0, 0, 0);"><span style="color: rgb(22, 145, 121);">[Download Tailscale](https://tailscale.com/download) </span>and make an account on user’s system</span>
2. <span style="color: rgb(0, 0, 0);">Create new Ubuntu Server VM on the Proxmox server *(Refer to <span style="color: rgb(22, 145, 121);">[Create a VM](https://wiki.raspberrypiclub.org/books/how-to-proxmox/page/30-create-a-vm)</span> in How to: Proxmox)*</span>

---

##### <span style="color: rgb(0, 0, 0);">**VM Customization Options**</span>

<p class="callout info"><span style="color: rgb(35, 111, 161);">**Some "conventions" are only applicable to the Proxmox server at the Raspberry Pi Club - disregard "General Settings" if you're in a home lab environment unless specifically <span style="background-color: rgb(191, 237, 210);">highlighted</span> as an important feature**</span></p>

- <span style="color: rgb(0, 0, 0);">General Settings *(Check advanced)*</span>
    - <span style="background-color: rgb(191, 237, 210); color: rgb(0, 0, 0);">Click Start at boot</span>
    - <span style="color: rgb(0, 0, 0);">Node: pve</span>
    - <span style="color: rgb(0, 0, 0);">Resource Pool: Personal </span>
    - <span style="color: rgb(0, 0, 0);">VM ID: # *(any number unless following a certain convention)*</span>
    - <span style="color: rgb(0, 0, 0);">Name: \[USER\]-tailnet *(e.g. pat-tailnet)*</span>
    - <span style="color: rgb(0, 0, 0);">Tags: tailnet, \[USER\] </span>

<span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXeteAdiukCi5OUcrm3MfsMZCwbsFmCcHfAZwMxkmux2TOqR_0ow3pM0J78kf2x9BQ-KNlBJ4L_eqfoiHHuE-U33SknG-kjG5T8T8lPsRJ3FgTvEBq0q-utfhLTaI5RGwRR5OnaNRw?key=A7w7-IIrPHtvIEAignbkTKHY)</span>

- <span style="color: rgb(0, 0, 0);">OS Settings</span>
    - - <span style="color: rgb(0, 0, 0);">ISO Image: ubuntu-24.04.1-live-server-amd64.iso</span>

<span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcJW8aHXWW16n4JpgsPi2sIfSVAWfvibZjwjaXfSG69cOjG3m1w3Sx-Gq3wqOd-vU8aLbN41QtDgpX3_Y4nrl0CXZznneZ1Xskw1yN2xnESe2r-FWFc7Gj0PpgSf-BmFoyJZsJv1A?key=A7w7-IIrPHtvIEAignbkTKHY)</span>

- <span style="color: rgb(0, 0, 0);">System Settings</span>
    
    
    - <span style="color: rgb(0, 0, 0);">Check off qemu-guest-agent</span>

<span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXdQwt5-IAbgRD2VUopn7vgfeorV9rZA5RNyx-toRyy4axgke3sJonoIxg4kdhoBNA1MZhXUYhbvTDIngeyJRNaJAyMsF9Cf1a-9WjlCYfL79I85qWl1YNxC_K8wM4uzSmVwpZ0Iow?key=A7w7-IIrPHtvIEAignbkTKHY)</span>

- <span style="color: rgb(0, 0, 0);">Disks Settings</span>
- <span style="color: rgb(0, 0, 0);">Disk Size (GiB): 16</span>  
      
    <span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXeJzz2ZvXzVi-S1gdPupJNzoDnaIthFq8nOD6n4QMcrUTul8Bj-E5O1LnB7FINLpQuydWQrn2YvkKEyOw3xiauIryANOVtUINOLXL1aAGH1LqEqpcIxxtHBTT6OwvA3UHTNro1e?key=A7w7-IIrPHtvIEAignbkTKHY)</span>


- <span style="color: rgb(0, 0, 0);">CPU Settings</span>
    
    
    - <span style="color: rgb(0, 0, 0);">Sockets: 1</span>
    - <span style="color: rgb(0, 0, 0);">Cores: 1</span>

<span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfpevvKPfS_wgOpsc0UuU-4qQEBfeCspEyIKapgwEFgITdHxhul6xyRmMlNfTaJ2O1o8577kh7ngHouKystkkER9UZsjlmhJoHOt0L0sX5o5fEZhxDm3NPOWl_A5809u6_RiwX8IQ?key=A7w7-IIrPHtvIEAignbkTKHY)</span>

- <span style="color: rgb(0, 0, 0);">Memory Settings</span>
    
    
    - <span style="color: rgb(0, 0, 0);">Memory (MiB): 1024-2048</span>

<span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfEWDDJKaXtrc4QxWdUHcraV5SkrCrq0KlSk6oeLV9XrNmn_haojxmQZE-3xebZaYDeIVo6PVO6JyPkVprR10t8E6OXa_BohBnA5ARcSoukt-q7O8YMa8xaLoW6pGalFeax4pn8cQ?key=A7w7-IIrPHtvIEAignbkTKHY)</span>

- <span style="color: rgb(0, 0, 0);">Network Settings</span>
    
    
    - <span style="color: rgb(0, 0, 0);">Bridge: vmbr0</span>

<span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXdZQF1-KGl9z5NTJl_Zr9SDZZwS0KL5en38iF38nnTy4btR9NUZwRYv9WYlPe0YxJcfjOZBzYvFDrXwut0ttWPiOB_hDV0whL17EkrgC64vxR499KsKwlMj4DomHMPAQSMhrEFt?key=A7w7-IIrPHtvIEAignbkTKHY)</span>

- <span style="color: rgb(0, 0, 0);">Confirm</span>
    - - <span style="color: rgb(0, 0, 0);">Start after created</span>
        - <span style="color: rgb(0, 0, 0);">Finish</span>
- <span style="color: rgb(0, 0, 0);">During the OS install:</span>
    - <span style="color: rgb(0, 0, 0);">Use DHCP</span>
    - <span style="color: rgb(0, 0, 0);">Install OpenSSH server and add user’s Github SSH key</span>

<span style="color: rgb(0, 0, 0);">*Last Updated: 2/22/2025  
Contributors: Lilian, Vivian* </span>

# 2.0 Creating a Tailscale Connection

---

##### <span style="color: rgb(0, 0, 0);">**Adding a Device**</span>

1. <span style="color: rgb(0, 0, 0);">Go to your<span style="color: rgb(22, 145, 121);"> [Tailscale Admin Console](https://login.tailscale.com/admin/machines)</span></span>
2. <span style="color: rgb(0, 0, 0);">Add new machine on user’s Tailscale</span>
    
    
    - <span style="color: rgb(0, 0, 0);">Add device &gt; Linux Server</span>  
          
        <span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcUAhYuPJ2l5aNV2n5f-kCU9_1QRJzlZAmxqty5KUWUJHucwONpbZuFG2ovZ8Yw-dH-QjOwNq3J1YGsFuHtv07Skf-63lYttIEjo77fvajRFEsWX9FK4F133xe5ut5B_GTg6l3MmQ?key=A7w7-IIrPHtvIEAignbkTKHY)</span>
3. <span style="color: rgb(0, 0, 0);">Generate install script</span>  
    <span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcTlpWmjTMZgaLV5pjkw_HiHbefVr40VlRqfkAL01hzvMEZbyppVGteMzpIQwPGJ6v7Tkj79hICzr7w8bKwUsBEBq0_ep-fdt0KqgU6gGmfkM0L0esAG-jauDwa1vd751tYX31U_w?key=A7w7-IIrPHtvIEAignbkTKHY)</span>
4. <span style="color: rgb(0, 0, 0);">Copy and paste install script into user's Ubuntu Server VM *(might have to manually type it out if ssh isn't configured // all one continuous line)*</span>  
    <p class="callout info"><span style="color: rgb(35, 111, 161);">**EXAMPLE:**</span>  
    <span style="color: rgb(35, 111, 161);">curl -fsSL https://tailscale.com/install.sh | sh &amp;&amp; sudo tailscale up --auth-key=tskey-auth-kEc5KrwcPv11CNTRL-rsE7QpaFhNeKRnTdUALKJgbkJ2Vg</span>  
    </p>
5. <span style="color: rgb(0, 0, 0);">Start up Tailscale in it:</span>  
    ```
    sudo tailscale up
    ```
6. <span style="color: rgb(0, 0, 0);">Open the given login link and sign into Tailscale</span>

---

##### <span style="color: rgb(0, 0, 0);">**Configure Advertised Subnet Routes**</span>

1. <span style="color: rgb(0, 0, 0);">To connect to <span style="color: rgb(22, 145, 121);">[Tailscale as a subnet router](https://tailscale.com/kb/1019/subnets)</span>, type in the following commands:</span><p class="callout info"><span style="color: rgb(52, 73, 94);">**<span style="color: rgb(35, 111, 161);">Note - Change the advertise routes according to your subnet in a home lab environment</span>  
    <span style="color: rgb(45, 194, 107);">**<span style="color: rgb(35, 111, 161);">\*Any confusion on command syntax/structure can be clarified in </span><span style="color: rgb(45, 194, 107);">[Legend](https://wiki.raspberrypiclub.org/books/how-to-refer-to-the-documentation/page/legend)</span>**</span>** </span></p>
    
    ```
    echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
    echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p /etc/sysctl.conf
    ```
2. <span style="color: rgb(0, 0, 0);">To advertise subnet routes, type into the shell:  
    </span><p class="callout info"><span style="color: rgb(35, 111, 161);">**CIDR Notation uses a slash (/) and a number to indicate the length of the network prefix *(e.g. 10.0.0.0/24)***</span></p>
    
    ```
    sudo tailscale up --advertise-routes=[IP ADDRESS CIDR]
    ```
3. <span style="color: rgb(0, 0, 0);">Enable the configured route on Tailscale</span>
    - <span style="color: rgb(0, 0, 0);">Edit route settings &gt; Check the box with the IP route &gt; Save</span>

<span style="color: rgb(0, 0, 0);">**IMAGE SHOWING WHERE TO EDIT ROUTE SETTINGS:**</span>

<span style="color: rgb(0, 0, 0);">![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXelMndY6N88PZZX-TBD2Fu5xjo-PCZJzwspFKs3wgoQ-gnZuYEVSPYYAch6c2TD5Nbn9I3J5rHnaK7oJ_yntC-rvd5cIxDNluZ-0345NsaltPIE1jlGB5OIofLYXZeULop2f_LRMQ?key=A7w7-IIrPHtvIEAignbkTKHY)</span>

<span style="color: rgb(0, 0, 0);">*Last Updated: 2/22/2025  
Contributors: Lilian, Vivian* </span>