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:
- Enable op router node:
--advertise-routes - Accepteer in admin console
- 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.
