Tailscale is een VPN-dienst die een privénetwerk creëert tussen je apparaten, waardoor je overal veilig en eenvoudig toegang hebt tot je netwerk. Het maakt gebruik van WireGuard, een modern en veilig VPN-protocol, om directe, peer-to-peer verbindingen tussen je apparaten tot stand te brengen. Dit betekent dat je niet afhankelijk bent van een centrale server en dat je verkeer zo efficiënt mogelijk wordt gerouteerd.
Overzicht
Het volgende plaatje laat overzichtelijk zien hoe dit werkt.
Als eerste moet je inloggen op de website van Tailscale. Ik maak zelf gebruik van mijn Github account. Hierna voeg je al je verschillende clients (machines) die je met elkaar wilt kunnen laten praten via een veilige (VPN) verbinding toe aan je account. Je kunt deze dan vanaf elke client bereiken op het de Machine naam of IP-adres die je hier in je overzicht ziet:
Meer informatie
Zie ook de volgende sites met meer informatie. Ik heb deze gebruikt om dit blog artikel te schrijven en om alles bij mezelf in te stellen:
Ook op YouTube is er veel informatie te vinden over Tailscale en ik vond de volgende video wel duidelijk:
Docker
Om bestaande Docker containers toe te voegen als client moet je een paar extra acties nemen:
- Eenmalig aanpassen Access Controls. Voeg op je Tailscale Account bij de /Access controls\ tab de volgende regel toe:
"tagOwners": { "tag:container": ["autogroup:admin"], },
- Voor elke Docker client voeg je op je Tailscale Account een OAuth Client toe. Ga hiervoor naar de /Settings\ tab, kies ‘OAuth Clients’
- Druk de knop [Generate OAuth client…].
- Vul een description in en selecteer bij ‘Auth Keys’ de Write setting (Read wordt dan impliciet ook geselecteerd).
- Voeg de tag ‘container’ toe die je bij Access Controls hiervoor hebt aangemaakt.
- Druk de [Generate Client] button
- Copieer de ‘Client secret’ waarde. Deze hebben we later nodig in de ‘docker-compose.yml’ file van je client
- Pas je bestaande ‘docker-compose.yml’ van je client aan. We gaan hier nl. een extra Tailscale service toevoegen met de AUTHKEY die je hebt gegeneerd. Je oorspronkelijk service wordt gekoppeld met deze Tailscale service. Een voorbeeld maakt het allemaal veel duidelijker. Hieronder zie je de oorspronkelijke ‘docker-compose.yml’ file en hoe deze is aangepast voor Tailscale.
Oorspronkelijk docker-compose.yml file
--- services: smokeping: image: lscr.io/linuxserver/smokeping:latest container_name: smokeping environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - CACHE_DIR=/tmp #optional - TZ=Europe/Amsterdam volumes: - /home/henri/docker/smokeping/config:/config - /home/henri/docker/smokeping/data:/data ports: - 8460:80 restart: unless-stopped
Aangepaste ‘docker-compose.yml’ file:
--- services: smokeping-ts: image: Tailscale/Tailscale:latest container_name: smokeping-ts hostname: smokeping-ts environment: - TS_AUTHKEY=tskey-client-generated_by_you_with_new_oauth_client - TS_STATE_DIR=/var/lib/Tailscale - TS_EXTRA_ARGS=--advertise-tags=tag:container --reset - TS_SERVE_CONFIG=smokeping.json - TS_USERSPACE=false volumes: - /home/henri/docker/smokeping/state:/var/lib/Tailscale - /home/henri/docker/smokeping/config:/config devices: - /dev/net/tun:/dev/net/tun cap_add: - net_admin restart: unless-stopped smokeping: image: lscr.io/linuxserver/smokeping:latest container_name: smokeping network_mode: service:smokeping-ts depends_on: - smokeping-ts environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - CACHE_DIR=/tmp #optional - TZ=Europe/Amsterdam volumes: - /home/henri/docker/smokeping/config:/config - /home/henri/docker/smokeping/data:/data restart: unless-stopped
Merk op de ‘ports’ van de oorspronkelijke ‘docker-compose.yml’ file is verdwenen. Deze definieer je nu met de nieuwe file ‘smokeping.json’ waarin je het poort-nummer zet dat je oorspronkelijk gebruikte.
{ "TCP": { "443": { "HTTPS": true } }, "Web": { "${TS_CERT_DOMAIN}:443": { "Handlers": { "/": { "Proxy": "http://127.0.0.1:8640" } } } }, "AllowFunnel": { "${TS_CERT_DOMAIN}:443": false } }
Start vervolgens je container op met het commando ‘docker compose up -d’. Je zult zien dat je docker container nu zal verschijnen in je /Machines\ tab.
Conclusie
Tailscale is erg handig om netwerk verkeer tussen aangesloten client voor elkaar te krijgen en je hebt geen moeilijke reverse-proxy settings meer nodig. Het is veilig, snel en betrouwbaar.