Cloudflare Tunnel VPS Handleiding 2026: Services Beschikbaar Maken Zonder Poorten Te Openen
TUTORIAL 12 min read fordnox

Cloudflare Tunnel VPS Handleiding 2026: Services Beschikbaar Maken Zonder Poorten Te Openen

Stel Cloudflare Tunnel in op je VPS om webapps veilig beschikbaar te maken zonder poorten te openen of je server-IP prijs te geven. Complete handleiding met Docker en DNS-configuratie.


Cloudflare Tunnel op VPS: Veilige Toegang Zonder Open Poorten

Cloudflare Tunnel laat je services op je VPS beschikbaar maken op internet zonder een enkele poort te openen. Geen publiek IP nodig, geen firewallregels, geen port forwarding — Cloudflare regelt alles via een versleutelde uitgaande verbinding.

Waarom Cloudflare Tunnel?

AanpakOpen PoortenIP ZichtbaarDDoS BeschermingSSL
Cloudflare TunnelGeenVerborgenIngebouwdAutomatisch
Reverse proxy (Nginx)80, 443JaGeenHandmatig (Let’s Encrypt)
Port forwardingElkeJaGeenHandmatig
VPN + toegangVPN-poortVerborgenGeenVia VPN

Traditionele opzet: poorten openen → firewall configureren → SSL beheren → hopen dat niemand je IP vindt.

Cloudflare Tunnel: installeer cloudflared → wijs het naar je lokale service → klaar. Je server blijft onzichtbaar.

Hoe Werkt Het?

  1. cloudflared draait op je VPS en maakt een uitgaande verbinding naar Cloudflare’s edge
  2. Verkeer bereikt je domein → Cloudflare routeert het door de tunnel → bereikt je service
  3. Je VPS accepteert nooit inkomende verbindingen — het belt alleen naar buiten
  4. Cloudflare regelt SSL, DDoS bescherming en caching automatisch

Geen open poorten. Geen IP zichtbaar. Geen aanvalsoppervlak.

Vereisten

Beste VPS voor Cloudflare Tunnel

ProviderAbonnementPrijsWaarom
HostingerKVM1$4,99/mndBeste prijs-kwaliteit, solide prestaties
HetznerCX22€3,79/mndGoedkoopste voor EU
VultrVC2$6/mndWereldwijde locaties
DigitalOceanBasic$6/mndEenvoudig dashboard

Cloudflare Tunnel gebruikt minimale resources — de VPS-specificaties zijn belangrijk voor je daadwerkelijke services, niet voor de tunnel zelf.

Snelle Installatie (10 Minuten)

Stap 1: Installeer cloudflared

# Debian/Ubuntu
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
apt update
apt install cloudflared -y
# Of download het binaire bestand direct
curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared

Controleer:

cloudflared --version

Stap 2: Authenticeren

cloudflared tunnel login

Dit opent een browser-URL. Kies het domein dat je wilt gebruiken. Een certificaat wordt opgeslagen in ~/.cloudflared/cert.pem.

Headless server? Kopieer de URL die wordt afgedrukt, open deze op je lokale machine, authenticeer en kopieer cert.pem terug naar de server.

Stap 3: Maak een Tunnel Aan

cloudflared tunnel create my-tunnel

Dit genereert een tunnel-ID en een credentials-bestand. Noteer de tunnel UUID — die heb je nodig.

# Tunnels weergeven
cloudflared tunnel list

Stap 4: Configureer de Tunnel

Maak het configuratiebestand aan:

mkdir -p ~/.cloudflared
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: YOUR_TUNNEL_UUID
credentials-file: /root/.cloudflared/YOUR_TUNNEL_UUID.json

ingress:
  - hostname: app.yourdomain.com
    service: http://localhost:3000
  - hostname: api.yourdomain.com
    service: http://localhost:8080
  - service: http_status:404
EOF

Vervang:

De laatste http_status:404 regel is verplicht — het is de vangstregel voor niet-overeenkomende verzoeken.

Stap 5: Maak DNS-records Aan

cloudflared tunnel route dns my-tunnel app.yourdomain.com
cloudflared tunnel route dns my-tunnel api.yourdomain.com

Dit maakt automatisch CNAME-records aan die naar je tunnel verwijzen.

Stap 6: Start de Tunnel

cloudflared tunnel run my-tunnel

Je services zijn nu live op app.yourdomain.com en api.yourdomain.com — met SSL, DDoS bescherming en nul open poorten.

Draaien als Systeemservice

Draai tunnels niet in een terminal. Stel een echte service in:

cloudflared service install
systemctl enable cloudflared
systemctl start cloudflared

Status controleren:

systemctl status cloudflared
journalctl -u cloudflared -f

De service leest uit ~/.cloudflared/config.yml (of /etc/cloudflared/config.yml op sommige systemen).

Docker Installatie

Enkele Service

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    command: tunnel --no-autoupdate run --token YOUR_TUNNEL_TOKEN
    restart: unless-stopped
    network_mode: host

Met Docker Compose Services

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    command: tunnel --no-autoupdate run --token YOUR_TUNNEL_TOKEN
    restart: unless-stopped
    depends_on:
      - webapp
      - api
    networks:
      - tunnel

  webapp:
    image: nginx:alpine
    networks:
      - tunnel

  api:
    image: your-api:latest
    networks:
      - tunnel

networks:
  tunnel:

Bij gebruik van Docker-netwerken, verwijs services naar containernamen:

ingress:
  - hostname: app.yourdomain.com
    service: http://webapp:80
  - hostname: api.yourdomain.com
    service: http://api:8080
  - service: http_status:404

Token-gebaseerde Installatie (Aanbevolen voor Docker)

Gebruik in plaats van configuratiebestanden het Cloudflare Zero Trust dashboard:

  1. Ga naar Zero Trust Dashboard → Networks → Tunnels
  2. Maak een tunnel aan → krijg het token
  3. Configureer routes in het dashboard
  4. Draai met enkel: cloudflared tunnel run --token YOUR_TOKEN

Geen configuratiebestanden nodig. Beheer alles vanuit het dashboard.

Meerdere Services op Een Tunnel

Een tunnel kan onbeperkt services bedienen. Voeg meer ingress-regels toe:

ingress:
  - hostname: grafana.yourdomain.com
    service: http://localhost:3000
  - hostname: portainer.yourdomain.com
    service: http://localhost:9000
  - hostname: code.yourdomain.com
    service: http://localhost:8443
  - hostname: files.yourdomain.com
    service: http://localhost:8080
  - hostname: yourdomain.com
    service: http://localhost:80
  - service: http_status:404

Elke hostnaam heeft een DNS-route nodig:

cloudflared tunnel route dns my-tunnel grafana.yourdomain.com
cloudflared tunnel route dns my-tunnel portainer.yourdomain.com

Toegangscontrole met Cloudflare Zero Trust

De tunnel alleen maakt services toegankelijk voor iedereen. Voeg Zero Trust-beleid toe om toegang te beperken:

E-mail-gebaseerde Authenticatie

  1. Zero Trust Dashboard → Access → Applications → Add
  2. Stel het applicatiedomein in (bijv. grafana.yourdomain.com)
  3. Voeg beleid toe: Allow → E-mails eindigend op @yourdomain.com

Gebruikers zien een Cloudflare-inlogpagina voordat ze je app bereiken.

Eenmalige PIN

  1. Voeg beleid toe: Allow → Emails → specifieke e-mailadressen
  2. Authenticatie: Eenmalige PIN
  3. Gebruikers voeren e-mail in → krijgen een code → toegang verleend

Geen wachtwoorden te beheren. Geen accounts aan te maken.

Service Tokens (voor API’s)

# Maak een service token aan in het dashboard
# Gebruik vervolgens toegang met headers:
curl -H "CF-Access-Client-Id: YOUR_CLIENT_ID" \
     -H "CF-Access-Client-Secret: YOUR_CLIENT_SECRET" \
     https://api.yourdomain.com/endpoint

Veelvoorkomende Toepassingen

Zelf-gehoste Dashboards

Maak Grafana, Portainer of Uptime Kuma beschikbaar zonder poorten te openen:

ingress:
  - hostname: monitor.yourdomain.com
    service: http://localhost:3001
    originRequest:
      noTLSVerify: true

Ontwikkelomgevingen

Deel lokale ontwikkelservers tijdelijk:

# Snelle tunnel (geen configuratie nodig)
cloudflared tunnel --url http://localhost:3000

Dit maakt een tijdelijke *.trycloudflare.com URL aan. Ideaal voor demo’s en testen.

SSH Toegang

Krijg toegang tot je VPS via SSH door Cloudflare:

Serverconfiguratie:

ingress:
  - hostname: ssh.yourdomain.com
    service: ssh://localhost:22
  - service: http_status:404

Client:

# Voeg toe aan ~/.ssh/config
Host ssh.yourdomain.com
  ProxyCommand cloudflared access ssh --hostname %h

Nu SSH zonder poort 22 bloot te stellen. Combineer met Zero Trust-beleid voor extra authenticatie.

TCP/UDP Services

Tunnel niet-HTTP services:

ingress:
  - hostname: db.yourdomain.com
    service: tcp://localhost:5432
  - service: http_status:404

Clientzijde:

cloudflared access tcp --hostname db.yourdomain.com --url localhost:5432

Prestatieoptimalisatie

Protocolselectie

tunnel: YOUR_TUNNEL_UUID
credentials-file: /root/.cloudflared/YOUR_TUNNEL_UUID.json
protocol: quic  # Snelste, standaard in nieuwere versies

ingress:
  - hostname: app.yourdomain.com
    service: http://localhost:3000
  - service: http_status:404

QUIC is sneller en gaat beter om met pakketverlies dan HTTP/2.

Verbindingsinstellingen

ingress:
  - hostname: app.yourdomain.com
    service: http://localhost:3000
    originRequest:
      connectTimeout: 30s
      keepAliveTimeout: 90s
      keepAliveConnections: 100
      httpHostHeader: app.yourdomain.com
  - service: http_status:404

Caching

Aangezien verkeer via Cloudflare loopt, krijg je hun caching automatisch. Configureer cacheregels in het Cloudflare-dashboard voor statische bestanden.

Cloudflare Tunnel vs Alternatieven

FunctieCloudflare TunnelNginx + Let’s EncryptTailscale Funnel
Open poortenGeen80, 443Geen
DDoS beschermingJaNeeNee
SSLAutomatischHandmatige verlengingAutomatisch
Eigen domeinJaJaBeperkt
ToegangscontroleZero TrustZelf doenTailscale ACLs
PrijsGratisGratisGratis (beperkt)
SnelheidSnel (edge cache)DirectGoed

Voor het beschikbaar maken van webservices is Cloudflare Tunnel moeilijk te verslaan. Voor privaat netwerken tussen apparaten, bekijk in plaats daarvan WireGuard of Tailscale.

Probleemoplossing

Tunnel Maakt Geen Verbinding

# Controleer tunnelstatus
cloudflared tunnel info my-tunnel

# Controleer logs
journalctl -u cloudflared --no-pager -n 50

# Test connectiviteit
cloudflared tunnel run --loglevel debug my-tunnel

502 Bad Gateway

Je lokale service draait niet of staat op een andere poort:

# Controleer of de service luistert
ss -tlnp | grep :3000

# Controleer of de service reageert
curl -v http://localhost:3000

DNS Wordt Niet Opgelost

# Controleer of CNAME bestaat
dig app.yourdomain.com CNAME

# Moet verwijzen naar UUID.cfargotunnel.com
# Zo niet, voer opnieuw uit:
cloudflared tunnel route dns my-tunnel app.yourdomain.com

WebSocket Problemen

Voeg WebSocket-ondersteuning toe:

ingress:
  - hostname: ws.yourdomain.com
    service: http://localhost:3000
    originRequest:
      noTLSVerify: false
  - service: http_status:404

Cloudflare Tunnel ondersteunt WebSockets standaard — zorg er alleen voor dat je Cloudflare-abonnement het toestaat (gratis abonnement werkt voor de meeste toepassingen).

Certificaatfouten

# Opnieuw authenticeren
cloudflared tunnel login

# Controleer certificaat
ls -la ~/.cloudflared/cert.pem

Beveiligingsaanbevelingen

  1. Gebruik Zero Trust-beleid — Stel beheerdersdashboards niet beschikbaar voor het hele internet
  2. Roteer tunnel-tokens — Verwijder en maak tunnels periodiek opnieuw aan
  3. Sluit alle VPS-poorten — Als alles via tunnels loopt, sluit 80/443 volledig
# Vergrendel firewall — alleen SSH nodig
ufw default deny incoming
ufw allow ssh
ufw enable
# Geen 80/443 nodig
  1. Monitor toegangslogs — Zero Trust dashboard toont alle verzoeken
  2. Schakel meldingen in — Ontvang waarschuwingen bij veranderingen in tunnelgezondheid

Meerdere Tunnels

Draai aparte tunnels voor isolatie:

cloudflared tunnel create production
cloudflared tunnel create staging

Aparte configuratiebestanden:

cloudflared tunnel --config ~/.cloudflared/production.yml run production
cloudflared tunnel --config ~/.cloudflared/staging.yml run staging

Prijzen

FunctieGratisPro ($20/mnd)Business ($200/mnd)
TunnelsOnbeperktOnbeperktOnbeperkt
Zero Trust gebruikers505050
DDoS beschermingBasisUitgebreidGeavanceerd
WAF-regelsBeperkt20100+

Het gratis abonnement dekt de meeste selfhosting-behoeften. Je hebt alleen Pro nodig voor geavanceerde WAF-regels of prioriteitsondersteuning.

Veelgestelde Vragen

Is Cloudflare Tunnel gratis?

Ja. Tunnels zijn gratis op alle abonnementen, inclusief de gratis versie. Zero Trust is gratis voor maximaal 50 gebruikers.

Vertraagt het mijn services?

Meestal het tegenovergestelde — Cloudflare’s edge-netwerk en caching kunnen services sneller maken voor wereldwijde gebruikers.

Kan ik het gebruiken zonder domein?

Voor snel testen geeft cloudflared tunnel --url je een tijdelijk *.trycloudflare.com domein. Voor productie heb je een domein op Cloudflare nodig.

Wat gebeurt er als Cloudflare uitvalt?

Je services worden onbereikbaar. Dit is de afweging — je bent afhankelijk van Cloudflare’s uptime. Voor kritieke services, onderhoud een back-up toegangsmethode (VPN of directe SSH).

Kan ik meerdere tunnels op een VPS draaien?

Ja. Elke tunnel is een apart proces met een eigen configuratie. Geen limieten op tunnels per server.

Werkt het met Docker?

Perfect. Gebruik de officiele cloudflare/cloudflared image. Token-gebaseerde installatie is het eenvoudigst voor containers.

Aanbevolen Configuratie

ToepassingConfiguratieOpmerkingen
Enkele webappSnelle tunnelcloudflared tunnel --url
Meerdere servicesBenoemde tunnel + configuratieEen tunnel, meerdere ingress-regels
TeamtoegangTunnel + Zero TrustE-mail of SSO-authenticatie
ProductieDocker + dashboard-tokenEenvoudig beheer, automatische herstart

De combinatie van een Hostinger VPS + Cloudflare Tunnel geeft je infrastructuur van bedrijfsniveau voor minder dan $5/maand. Geen poorten om te beheren, geen SSL om te verlengen, geen DDoS om je zorgen over te maken — deploy gewoon je apps en laat Cloudflare de rest afhandelen.

~/cloudflare-tunnel-vps-guide/get-started

Ready to get started?

Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.

Get Hostinger VPS — $4.99/mo

// up to 75% off + free domain included

// related topics

cloudflare tunnel vps cloudflare tunnel setup cloudflared vps expose vps without ports cloudflare zero trust tunnel

// related guides

Andrius Putna

Andrius Putna

I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.

// last updated: March 10, 2026. Disclosure: This article may contain affiliate links.