Je homelab cluster draait thuis. Je bent niet altijd thuis. Je hebt toegang nodig.

De traditionele aanpak: forward poorten, stel dynamic DNS in, configureer firewall regels, bid dat niemand je blootgestelde services vindt.

De betere aanpak: Tailscale. Nul blootgestelde poorten. Veilige WireGuard encryptie. Je apparaten vinden elkaar, waar ze ook zijn.

Wat Is Tailscale?

Tailscale is een mesh VPN gebouwd op WireGuard. Elk apparaat krijgt een stabiel IP. Elk apparaat kan elk ander apparaat bereiken. Geen centrale server die je verkeer routeert.

flowchart TD
    subgraph ts["Tailscale Netwerk (100.x.y.z)"]
        Laptop["Laptop<br/>100.64.0.1"]
        Phone["Telefoon<br/>100.64.0.2"]
        Homelab["Homelab<br/>100.64.0.3"]
        VPS["VPS<br/>100.64.0.4"]
    end

    Laptop <--> Phone
    Laptop <--> Homelab
    Laptop <--> VPS
    Phone <--> Homelab
    Phone <--> VPS
    Homelab <--> VPS

Directe verbindingen wanneer mogelijk. Relay via Tailscale’s DERP servers wanneer NAT niet meewerkt. Hoe dan ook, end-to-end versleuteld.

Waarom Tailscale voor Homelab?

Geen Port Forwarding

Je router blijft dicht. Niets blootgesteld aan het internet. Geen “ik hoop dat mijn SSH config veilig is” angst.

Werkt Achter Elke NAT

CGNAT, double NAT, hotel WiFi — Tailscale prikt erdoorheen. Je homelab is bereikbaar van overal.

Stabiele IPs

Elk apparaat krijgt een 100.x.y.z adres dat nooit verandert. Geen dynamic DNS hoofdpijn.

Magic DNS

Toegang tot apparaten op naam: homelab.tail-abc123.ts.net. Geen IPs onthouden.

ACLs

Controleer wie wat kan benaderen. De laptop van de stagiair heeft geen cluster-admin nodig.

Basis Setup

Installeer op Homelab Node

# Ubuntu/Debian
curl -fsSL https://tailscale.com/install.sh | sh

# Start Tailscale
sudo tailscale up

# Check status
tailscale status

Volg de authenticatie link. Je node is nu op je tailnet.

Installeer op Je Apparaten

Installeer de Tailscale app op:

  • Je laptop
  • Je telefoon
  • Elk apparaat dat toegang nodig heeft

Alle apparaten authenticeren naar hetzelfde Tailscale account. Ze kunnen elkaar nu bereiken.

Verifieer Connectiviteit

# Vanaf laptop
ping homelab.tail-abc123.ts.net

# SSH naar homelab
ssh user@homelab.tail-abc123.ts.net

# Toegang tot services
curl http://homelab.tail-abc123.ts.net:3000  # Grafana

Geen port forwarding. Geen firewall regels. Het werkt gewoon.

Subnet Router: Toegang tot Hele Netwerk

Wil je alle apparaten op je thuisnetwerk bereiken, niet alleen Tailscale-enabled?

Configureer een subnet router:

# Op homelab node
sudo tailscale up --advertise-routes=192.168.1.0/24

# Accepteer de route in Tailscale admin console
# Of gebruik --accept-routes op clients

Nu kan je laptop 192.168.1.50 bereiken (je NAS, printer, wat dan ook) via de homelab node.

flowchart LR
    subgraph remote["Remote (Koffiebar)"]
        Laptop["Laptop<br/>100.64.0.1"]
    end

    subgraph home["Thuisnetwerk"]
        Homelab["Homelab<br/>100.64.0.3<br/>192.168.1.10"]
        NAS["NAS<br/>192.168.1.50"]
        Printer["Printer<br/>192.168.1.60"]
    end

    Laptop -->|Tailscale| Homelab
    Homelab -->|Lokaal| NAS
    Homelab -->|Lokaal| Printer

Exit Node: Routeer Al Je Verkeer

Werken vanaf onvertrouwd WiFi? Routeer al je verkeer door je homelab:

# Op homelab node
sudo tailscale up --advertise-exit-node

# Accepteer in admin console

# Op laptop (wanneer nodig)
sudo tailscale up --exit-node=homelab

Al je verkeer gaat nu via je thuis IP naar buiten. Nuttig voor:

  • Toegang tot geo-restricted services
  • Vermijden van onvertrouwd netwerk surveillance
  • Je thuis Pi-hole gebruiken van overal

Kubernetes Integratie

Tailscale Operator

De Tailscale Kubernetes Operator stelt services direct bloot op je tailnet.

# Installeer operator
helm repo add tailscale https://pkgs.tailscale.com/helmcharts
helm repo update

helm install tailscale-operator tailscale/tailscale-operator \
  --namespace tailscale \
  --create-namespace \
  --set oauth.clientId="<client-id>" \
  --set oauth.clientSecret="<client-secret>"

Maak eerst OAuth credentials in Tailscale admin console.

Stel Services Bloot

Annoteer services om ze bloot te stellen op je tailnet:

apiVersion: v1
kind: Service
metadata:
  name: grafana
  annotations:
    tailscale.com/expose: "true"
spec:
  selector:
    app: grafana
  ports:
    - port: 3000

Nu toegang tot Grafana op grafana.tail-abc123.ts.net:3000 vanaf elk apparaat op je tailnet.

Ingress met Tailscale

Gebruik Tailscale als ingress controller:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana
spec:
  ingressClassName: tailscale
  rules:
    - host: grafana
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: grafana
                port:
                  number: 3000

Toegang op grafana.tail-abc123.ts.net. HTTPS automatisch afgehandeld.

Access Control Lists

Controleer wie wat kan benaderen:

{
  "acls": [
    // Admin kan alles benaderen
    {
      "action": "accept",
      "src": ["group:admin"],
      "dst": ["*:*"]
    },
    // Developers kunnen cluster services benaderen
    {
      "action": "accept",
      "src": ["group:dev"],
      "dst": ["tag:k8s:80,443,6443"]
    },
    // Iedereen kan monitoring benaderen
    {
      "action": "accept",
      "src": ["*"],
      "dst": ["tag:monitoring:3000,9090"]
    }
  ],
  "groups": {
    "group:admin": ["user@example.com"],
    "group:dev": ["dev1@example.com", "dev2@example.com"]
  },
  "tagOwners": {
    "tag:k8s": ["group:admin"],
    "tag:monitoring": ["group:admin"]
  }
}

Pas tags toe op apparaten in de admin console. ACLs controleren toegang.

MagicDNS en HTTPS

Automatische DNS

Elk apparaat krijgt een DNS naam:

  • device-name.tail-abc123.ts.net

Configureer in admin console:

  • Enable MagicDNS
  • Stel een tailnet naam in (vervang willekeurige string met iets onthoudbaars)

HTTPS Certificaten

Tailscale biedt automatische HTTPS:

tailscale cert grafana.tail-abc123.ts.net

Genereert geldige certificaten voor je tailnet domeinen. Geen Let’s Encrypt, geen cert-manager voor interne services.

Custom Domeinen

Wijs je eigen domein naar Tailscale:

# In je DNS
grafana.internal.example.com CNAME grafana.tail-abc123.ts.net

Configureer dan Tailscale om het custom domein te accepteren.

Funnel: Publieke Toegang

Moet je iets publiek blootstellen? Tailscale Funnel maakt een publieke URL zonder port forwarding:

# Stel lokale poort 3000 publiek bloot
tailscale funnel 3000

Krijg een URL zoals https://homelab.tail-abc123.ts.net/. Nuttig voor:

  • Webhooks
  • Tijdelijk delen
  • Demo doeleinden

Onthoud: Funnel omzeilt ACLs. Alles wat je funnelt is publiek.

Headscale: Self-Hosted Control Plane

Wil je Tailscale’s control servers niet gebruiken? Draai Headscale:

# headscale deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: headscale
spec:
  replicas: 1
  selector:
    matchLabels:
      app: headscale
  template:
    spec:
      containers:
        - name: headscale
          image: headscale/headscale:latest
          args:
            - serve
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: config
              mountPath: /etc/headscale
            - name: data
              mountPath: /var/lib/headscale

Volledige soevereiniteit over je mesh netwerk. Zelfde WireGuard protocol, self-hosted coördinatie.

Integratie met Services

SSH via Tailscale

Tailscale kan SSH authenticatie afhandelen:

# Enable Tailscale SSH op server
tailscale up --ssh

# Verbind (geen keys nodig!)
ssh user@homelab.tail-abc123.ts.net

Tailscale authenticeert je. Geen SSH key management.

Kubectl Toegang

Toegang tot je cluster remote:

# ~/.kube/config
apiVersion: v1
clusters:
  - cluster:
      server: https://k3s.tail-abc123.ts.net:6443
    name: homelab
contexts:
  - context:
      cluster: homelab
      user: admin
    name: homelab
current-context: homelab

Werkt vanuit koffiebars, hotels, overal.

VS Code Remote

Bewerk code direct op homelab:

// .ssh/config
Host homelab
    HostName homelab.tail-abc123.ts.net
    User youruser

VS Code Remote SSH verbindt naadloos.

Mijn Setup

Mijn homelab Tailscale configuratie:

flowchart TD
    subgraph tailnet["Mijn Tailnet"]
        subgraph home["Thuis"]
            K3s["K3s Cluster<br/>Subnet Router<br/>Exit Node"]
            NAS["Synology NAS"]
        end

        subgraph devices["Apparaten"]
            Laptop["Laptop"]
            Phone["Telefoon"]
            Tablet["Tablet"]
        end
    end

    Laptop --> K3s
    Phone --> K3s
    Tablet --> K3s
    K3s --> NAS

Configuratie:

  • K3s node draait Tailscale als subnet router (stelt 192.168.1.0/24 bloot)
  • K3s node is exit node (voor onvertrouwd WiFi)
  • Tailscale Operator stelt bloot: Grafana, ArgoCD, GitLab
  • ACLs: alleen mijn apparaten hebben toegang

Voordelen:

  • Toegang tot monitoring van overal
  • Deploy met ArgoCD vanaf mijn telefoon
  • Nooit een poort blootgesteld aan het internet

Veelvoorkomende Problemen

“Tailscale is geblokkeerd”

Sommige bedrijfsnetwerken blokkeren Tailscale. Opties:

  • Gebruik een andere poort (configureer DERP)
  • Gebruik Tailscale over TCP/443

“Verbinding is traag”

Directe verbinding mislukt, gebruikt DERP relay. Check:

  • Firewall blokkeert UDP
  • NAT type (sommige vereisen relay)

“Kan subnet niet bereiken”

Subnet routes hebben acceptatie nodig:

  1. Enable op router node: --advertise-routes
  2. Accepteer in admin console
  3. Enable op clients: --accept-routes

Waarom Dit Ertoe Doet

Port forwarding is een security risico. Elke open poort is een attack surface. Elke blootgestelde service heeft hardening nodig.

Tailscale keert het model om:

  • Niets blootgesteld by default
  • Toegang vereist authenticatie
  • Encryptie is automatisch
  • Beheer is gecentraliseerd

Je homelab blijft privé. Je hebt toegang alsof je thuis bent. Van overal.


De meest veilige poort is degene die niet open is.