Cloudflare Tunnel nedir ve neden tercih edilmeli?
Evde NAS, Raspberry Pi, mini PC ya da bir Docker sunucusu çalıştırıyorsanız, dışarıdan güvenli erişim genellikle iki seçeneğe sıkışır: port yönlendirme (NAT) veya VPN. Port yönlendirme pratik görünse de güvenlik riskleri ve dinamik IP gibi sorunlar doğurabilir. Cloudflare Tunnel (eski adıyla Argo Tunnel) ise statik IP’ye ihtiyaç duymadan, router’da port açmadan ve servislerinizi doğrudan internete maruz bırakmadan dış erişim sağlayan modern bir yöntemdir.
Tunnel mantığı basittir: Yerel ağınızdaki bir “connector” (cloudflared) Cloudflare’a doğru dışarıya bir bağlantı başlatır. Dışarıdan gelen istekler Cloudflare üzerinden bu tünel aracılığıyla içerdeki servise iletilir. Böylece ev IP’niz ifşa olmaz, saldırı yüzeyiniz küçülür ve Cloudflare’ın WAF/Rate Limiting gibi korumalarıyla entegre olursunuz.
Ön koşullar
Bu öğreticide örnek olarak yerel ağda çalışan bir web servisini (ör. http://localhost:8080) yayınlayacağız. İhtiyacınız olanlar: Cloudflare hesabı, Cloudflare’a eklenmiş bir alan adı (ör. example.com), tüneli çalıştıracağınız bir makine (Linux önerilir; Docker da olur) ve yayınlanacak servis.
Not: Cloudflare Tunnel ile yalnızca web uygulamaları değil, uygun yapılandırma ile çeşitli TCP servisleri de yönetilebilir. Ancak en temiz ve güvenli senaryo, HTTP/HTTPS tabanlı servisleri Cloudflare Access ile kimlik doğrulama ekleyerek yayınlamaktır.
1) Cloudflare’da Tunnel oluşturma
Cloudflare paneline girin ve ilgili domaini seçin. Sol menüde Zero Trust (veya “Access/Zero Trust”) bölümüne geçin. Buradan Networks > Tunnels menüsünü açıp Create a tunnel ile yeni bir tünel oluşturun. Tünele anlaşılır bir ad verin (ör. “ev-sunucu”).
Cloudflare size kurulum adımlarını gösterecek. Bu aşamada iki yol var: doğrudan binary kurmak ya da Docker ile çalıştırmak. İleri seviye kullanıcılar için Docker, otomasyon ve taşınabilirlik açısından daha rahattır.
2) Docker ile cloudflared çalıştırma
Cloudflare panelinde “Run the connector” adımında bir token üretilir. Bu token tünelin kimliğidir. Token’ı kopyalayın ve tüneli çalıştıracağınız makinede aşağıdaki komutu kullanın:
docker run -d --name cloudflared --restart unless-stopped cloudflare/cloudflared:latest tunnel --no-autoupdate run --token YOUR_TOKEN
Bu komut, cloudflared’ı arka planda başlatır ve makine yeniden başladığında otomatik ayağa kaldırır. Sorun yaşarsanız logları görmek için:
docker logs -f cloudflared
Burada “connected” benzeri bir ifade görüyorsanız tüneliniz Cloudflare’a başarıyla bağlanmıştır.
3) Public hostname tanımlama (subdomain yönlendirme)
Şimdi dış dünyadan erişilecek adresi belirleyeceğiz. Yine Zero Trust panelinde ilgili tünelin içine girin ve Public Hostnames bölümünden yeni kayıt ekleyin. Örneğin:
Subdomain: panel
Domain: example.com
Path: (boş bırakabilirsiniz)
Service: http://localhost:8080
Bu ayarla https://panel.example.com isteği Cloudflare üzerinden tünelinize gelir ve yereldeki 8080 portuna yönlenir. Router’da port açmadığınız için servisiniz “internete açık” hale gelmez; yalnızca Cloudflare tüneli üzerinden erişilebilir olur.
4) Güvenliği bir üst seviyeye taşıma: Cloudflare Access
Tünel çalışsa bile erişimi herkese açık bırakmak istemezsiniz. Cloudflare’ın en büyük artısı burada başlar: Access policy ile kimlerin gireceğini belirleyebilirsiniz. Zero Trust panelinde Access > Applications bölümüne gidip “Self-hosted” uygulama ekleyin ve aynı hostname’i (panel.example.com) seçin.
Ardından bir politika tanımlayın. Örneğin yalnızca belirli e-posta adreslerine izin verin (Google/Microsoft ile SSO da mümkün). Bu sayede URL’yi bilen herkes değil, sadece yetkili kullanıcılar giriş yapabilir. Bu yaklaşım klasik Basic Auth’tan daha esnek ve denetlenebilir bir güvenlik katmanı sunar.
5) Sık yapılan hatalar ve ipuçları
Servis “Bad Gateway” veriyor: Genellikle yereldeki servis yanlış portta çalışıyordur veya yalnızca 127.0.0.1 yerine belirli bir arayüze bağlıdır. Docker içinden başka bir konteynıra yönlendiriyorsanız ağ ayarlarınızı kontrol edin.
HTTPS/sertifika konusu: Cloudflare dışarıya HTTPS sunar. İçerideki servisiniz HTTP olabilir; bu yaygın bir kullanımdır. Ancak içeride de TLS istiyorsanız origin sertifikası gibi seçenekler mevcut.
Performans ve gecikme: Tunnel trafiği Cloudflare POP’ları üzerinden geçer. Çoğu ev senaryosunda gecikme farkı ihmal edilebilir düzeydedir; asıl sınır genellikle ev internetinizin upload hızıdır.
Log ve izleme: Zero Trust üzerinden bağlantı denemelerini ve Access loglarını inceleyin. Şüpheli denemelerde rate limiting veya ek erişim kısıtları uygulayabilirsiniz.
Sonuç
Cloudflare Tunnel, evde barındırdığınız servisleri statik IP olmadan, port açmadan ve daha kontrollü şekilde yayınlamak için güncel ve güçlü bir çözümdür. Özellikle Cloudflare Access ile birlikte kullanıldığında, “herkese açık admin paneli” gibi riskli senaryoları neredeyse tamamen ortadan kaldırır. Eğer self-hosted uygulamalarınız var ve güvenliği ciddiye alıyorsanız, bu yaklaşım modern bir varsayılan haline gelmeye başladı.