Cloudflare Tunnel
Şirket içi sunucunu, güvenlik duvarında tek bir gelen port açmadan ve sabit IP gerektirmeden internete yayınlar.
- DurumGenel kullanımda
- FiyatÜcretsiz — tünel, bağlantı veya bant genişliği başına ücret yok
- Ücretsiz katmanvar
- Doğrulama

Cloudflare Tunnel nedir?
Şirket içindeki bir servisi internete açmanın klasik yolu şudur: sunucuya genel bir IP verirsin, güvenlik duvarında 80 ve 443 portlarını dışarı açarsın, DNS kaydını o IP’ye yöneltirsin. Bu yöntemin üç bilinen bedeli vardır:
- Sunucunun IP’si herkes tarafından bilinir. Cloudflare’i önüne koysan bile, IP’yi öğrenen saldırgan Cloudflare’i atlayıp doğrudan sunucuna vurabilir.
- Gelen port açmak gerekir. Kurumsal ağlarda bu, güvenlik ekibiyle yapılacak bir görüşme ve bir değişiklik kaydı demektir.
- Sabit ve dışarıdan erişilebilir bir IP gerekir. Dinamik IP’li veya CGNAT arkasındaki hatlarda bu yöntem hiç çalışmaz.
Cloudflare Tunnel bu üçünü birden ortadan kaldırır. Sunucuna cloudflared adında küçük bir daemon kurarsın. Bu daemon Cloudflare’e dışarı doğru kalıcı bir bağlantı açar. Kullanıcıdan gelen istek Cloudflare kenarına ulaşır, oradan bu hazır bağlantı üzerinden ters yönde sunucuna iner.
Sonuç: sunucunun internete açık hiçbir kapısı yoktur, ama servisi dünyanın her yerinden erişilebilir.
Nasıl çalışır?
cloudflared başladığında Cloudflare ağına birden fazla ayrı bağlantı kurar (varsayılan dört). Bunlar farklı Cloudflare veri merkezlerine gider; biri koparsa trafik diğerlerinden akmaya devam eder.
Bağlantı TCP ve UDP 7844 portları üzerinden, dışarı doğru açılır. Varsayılan taşıma protokolü QUIC’tir; UDP engelliyse otomatik olarak HTTP/2’ye düşer.
Bir isteğin yolculuğu:
- Kullanıcı
wiki.sirket.comadresini ister. - DNS, bu adı
<TÜNEL-UUID>.cfargotunnel.comadresine çözer — gerçek IP’n hiçbir adımda görünmez. - İstek Cloudflare kenarına ulaşır. Burada WAF, Access, hız sınırlama gibi katmanlar uygulanır.
- Kenar, o tünele ait açık bağlantılardan birini seçer ve isteği içeri gönderir.
cloudflaredisteğiingresskurallarına bakarak yerel servise iletir (http://localhost:8080gibi).- Yanıt aynı yoldan geri döner.
İki yönetim biçimi
| Uzaktan yönetilen | Yerel yönetilen | |
|---|---|---|
| Yapılandırma nerede | Cloudflare panelinde | Sunucudaki config.yml dosyasında |
| Kurulum | Panelden token kopyala-yapıştır | cloudflared komutlarıyla |
| Değişiklik | Panelden anında | Dosyayı düzenle, servisi yeniden başlat |
| Sürüm kontrolü | Yok | Var — dosya Git’e girer |
| Uygun olduğu yer | Hızlı başlangıç, tek servis | Üretim, çok servisli kurulum, tekrar üretilebilirlik |
Bu portaldaki demolarda yerel yönetilen biçimi kullanıyoruz: yapılandırma bir dosyada durduğu için adım adım gösterilebilir ve birebir kopyalanabilir.
Ne zaman kullanılır, ne zaman kullanılmaz
Uygun olduğu işler
- Şirket içi web uygulamalarını (wiki, Jenkins, Grafana, ERP) dışarı açmak
- Origin IP’sini tamamen gizleyip Cloudflare atlatma saldırılarını imkânsız kılmak
- CGNAT veya dinamik IP arkasındaki sunucuları yayınlamak
- VPN’i kaldırıp yerine uygulama bazlı erişim koymak (Access ile birlikte)
- Kubernetes cluster’ındaki servisleri LoadBalancer maliyeti olmadan yayınlamak
- SSH ve RDP erişimini internete port açmadan sağlamak
Uygun olmadığı işler
- Çok yüksek bant genişliği gerektiren aktarımlar. Tünel bir daemon üzerinden geçer; 10 Gbps’lik ham veri aktarımı için Network Interconnect veya Magic Transit daha uygundur.
- Cloudflare’in desteklemediği protokoller. Tünel HTTP, TCP ve UDP taşır ama örneğin çok gecikmeye duyarlı gerçek zamanlı protokollerde ek gecikme fark edilebilir.
- Yetkilendirme beklentisi. Tunnel kimlik doğrulaması yapmaz. Tek başına kullanıldığında yayınladığın servis herkese açıktır — Access ile birlikte kullanılmalıdır.
Somut örnekler
1. İç wiki’yi çalışanlara açmak
Şirket içinde 10.0.5.20:3000 adresinde çalışan bir wiki var. Çalışanlar evden erişmek istiyor, ama VPN yavaş.
# ~/.cloudflared/config.yml
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
- hostname: wiki.sirket.com
service: http://10.0.5.20:3000
- service: http_status:404
Ardından Access politikası: yalnızca @sirket.com uzantılı e-postalar. VPN gerekmez, istemci kurulumu gerekmez.
2. Tek tünelden birden çok servis
ingress kuralları yukarıdan aşağıya değerlendirilir; ilk eşleşen kazanır. Son kural mutlaka her şeyi yakalayan bir kural olmalıdır.
ingress:
# Yol bazlı: /api altındaki istekler farklı sunucuya
- hostname: uygulama.sirket.com
path: ^/api/.*
service: http://10.0.5.31:8080
- hostname: uygulama.sirket.com
service: http://10.0.5.30:3000
- hostname: grafana.sirket.com
service: http://localhost:3000
# Kendinden imzalı sertifikası olan iç servis
- hostname: eski-sistem.sirket.com
service: https://10.0.5.40:8443
originRequest:
noTLSVerify: true
# Zorunlu son kural
- service: http_status:404
Kuralları yayına almadan doğrula:
cloudflared tunnel ingress validate
cloudflared tunnel ingress rule https://uygulama.sirket.com/api/kullanicilar
İkinci komut, o URL’nin hangi kurala düşeceğini söyler — çok kurallı yapılandırmalarda zaman kazandırır.
3. SSH erişimini port açmadan sağlamak
ingress:
- hostname: ssh.sirket.com
service: ssh://localhost:22
- service: http_status:404
Kullanıcı tarafında ~/.ssh/config:
Host ssh.sirket.com
ProxyCommand cloudflared access ssh --hostname %h
Sunucunun 22 portu internete kapalı kalır; erişim Access politikasına bağlanır ve her oturum loglanır.
4. Yüksek erişilebilirlik
Aynı tüneli iki ayrı sunucuda çalıştır. Cloudflare gelen trafiği açık bağlantılar arasında dağıtır; birinde bakım yaparken servis kesintiye uğramaz.
# Her iki sunucuda da aynı tünel kimliğiyle
cloudflared tunnel run sirket-ic-servisler
Demo 1: iç servisi port açmadan yayınlamak
Kuracağımız mimari:
Kullanıcı → Cloudflare Edge → (giden bağlantı, TCP/UDP 7844)
↓
cloudflared (on-prem sunucu)
↓
iç servis :8080
Güvenlik duvarında hiçbir gelen kural değiştirmiyoruz.
Adım 1 — cloudflared kurulumu
sudo mkdir -p --mode=0755 /usr/share/keyrings
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 any main' \
| sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt-get update && sudo apt-get install cloudflaredcurl -fsSl https://pkg.cloudflare.com/cloudflared.repo | sudo tee /etc/yum.repos.d/cloudflared.repo
sudo yum update
sudo yum install cloudflareddocker run -d --name cloudflared --restart unless-stopped \
cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <TOKEN>brew install cloudflaredSürümü doğrula:
cloudflared --version

Adım 2 — Cloudflare hesabına bağlan
cloudflared tunnel login
Tarayıcı açılır, alan adını seçersin. Sonuçta ~/.cloudflared/cert.pem oluşur. Sunucuda tarayıcı yoksa komutun verdiği URL’yi kendi makinende aç.

Adım 3 — Tüneli oluştur
cloudflared tunnel create sirket-ic-servisler
Çıktıda tünelin UUID’si ve kimlik dosyasının yolu yazar. Bu dosya tünelin özel anahtarıdır — Git’e koyma, paylaşma.
cloudflared tunnel list

Adım 4 — Yapılandırma dosyası
# ~/.cloudflared/config.yml
tunnel: <TÜNEL-UUID>
credentials-file: /root/.cloudflared/<TÜNEL-UUID>.json
ingress:
- hostname: icservis.alanadin.com
service: http://localhost:8080
- service: http_status:404
cloudflared tunnel ingress validate
Adım 5 — DNS kaydını oluştur
cloudflared tunnel route dns sirket-ic-servisler icservis.alanadin.com
Bu komut, Cloudflare DNS’inde icservis.alanadin.com için <UUID>.cfargotunnel.com adresine giden proxy’li bir CNAME kaydı açar.

Adım 6 — Çalıştır ve doğrula
Önce ön planda, çıktıyı görerek:
cloudflared tunnel run sirket-ic-servisler
Başka bir terminalden:
curl -sI https://icservis.alanadin.com | head -5
curl -s https://icservis.alanadin.com/cdn-cgi/trace | grep -E '^(colo|loc)='

Adım 7 — Sistem servisi yap
sudo cloudflared service install
sudo systemctl enable --now cloudflared
sudo systemctl status cloudflared
journalctl -u cloudflared -f
Adım 8 — Erişimi kilitle
Bu adım isteğe bağlı değildir. Tünel kurulduğunda icservis.alanadin.com herkese açıktır.
Cloudflare paneli → Zero Trust → Access → Applications → Add an application → Self-hosted:
- Application domain:
icservis.alanadin.com - Policy: Allow · Emails ending in
@sirket.com


Ölçüm: öncesi ve sonrası
Yukarıdaki adımlar Ubuntu 24.04 üzerinde cloudflared 2026.8.3 ile gerçekten uygulandı. Sonuç:
| Ölçüt | Klasik yayın | Tünel ile |
|---|---|---|
| Güvenlik duvarında açılan gelen port | 80 ve 443 | hiçbiri |
| Gereken giden port | — | TCP/UDP 7844 |
| Sabit genel IP gereksinimi | var | yok |
| DNS kaydının işaret ettiği yer | sunucunun A kaydı | <UUID>.cfargotunnel.com |
| Origin IP’si dışarıdan görünür mü | evet | hayır |
| Kimlik doğrulama | uygulamanın kendi girişi | Access — SAML veya e-posta ile tek kullanımlık kod |
| Uygulama kodunda değişiklik | — | yok |
En dikkat çekici satır sonuncusu: uygulamaya tek satır kod yazmadan, önüne kurumsal kimlik doğrulaması kondu.
Yan bulgu: Türkiye trafiği nereye düşüyor
Doğrulama sırasında cdn-cgi/trace çıktısı şunu verdi:
colo=FRA
loc=TR
Yani istek Türkiye’den çıktı ama İstanbul (IST) yerine Frankfurt’ta karşılandı. Aynı ölçümü bu portalın kendi sunucusunda tekrarladığımızda Milano (MXP) çıktı. İki farklı ölçüm, iki farklı şehir, hiçbirinde IST yok.
Bu, Cloudflare’in İstanbul’da noktası olmadığı anlamına gelmez — vardır. Ama Türkiye’den gelen trafiğin oraya düşeceğinin garantisi yoktur; operatörün peering yapılandırması belirleyicidir. Gecikme hesabı yaparken varsayım yerine ölçüm kullan:
curl -s https://alanadin.com/cdn-cgi/trace | grep -E '^(colo|loc)='
Demo 2: tek tünelden üç servis — ingress sırasını boz, TLS’i patlat, kesintisiz düzelt
Demo 1 tek bir servisi yayınladı. Gerçek kurulumlar tek tünelden birden çok servis geçirir ve hatalar tam da orada çıkar. Bu demo üç belgelenmiş hatayı sırayla üretip düzeltiyor.
Ön koşullar: Demo 1’in sonu — çalışan bir tünel, cloudflared 2026.8.3, Ubuntu 24.04.
Adım 1 — Üç yerel servisi ayağa kaldır
# 1) Duz HTTP servis
python3 -m http.server 8080 --directory /var/www/wiki &
# 2) Statik dosya servisi
python3 -m http.server 8081 --directory /var/www/statik &
# 3) SELF-SIGNED TLS ile calisan servis — ucuncu hatanin kaynagi bu olacak
openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
-keyout /etc/ssl/private/ic.key -out /etc/ssl/certs/ic.crt \
-subj "/CN=panel.ic"
sudo python3 - <<'TLSSRV'
import http.server, ssl
c = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
c.load_cert_chain('/etc/ssl/certs/ic.crt', '/etc/ssl/private/ic.key')
s = http.server.HTTPServer(('127.0.0.1', 8443), http.server.SimpleHTTPRequestHandler)
s.socket = c.wrap_socket(s.socket, server_side=True)
s.serve_forever()
TLSSRV
Adım 2 — Kasıtlı hata: catch-all kuralını listenin başına koy
~/.cloudflared/config.yml:
tunnel: <TUNNEL_UUID>
credentials-file: /root/.cloudflared/<TUNNEL_UUID>.json
ingress:
# HATA: hostname'siz kural TUM hostname'leri esler.
# Bu satir en ustte oldugu icin altindaki her kural olu.
- service: http_status:404
- hostname: wiki.alanadin.com
service: http://localhost:8080
- hostname: statik.alanadin.com
service: http://localhost:8081
- hostname: panel.alanadin.com
service: https://localhost:8443
Dokümanın kuralı birebir: “If a rule does not specify a hostname, all hostnames will be matched.” ve “it evaluates each ingress rule from top to bottom.”
Trafiğe hiç dokunmadan teşhis et:
cloudflared tunnel ingress validate
cloudflared tunnel ingress rule https://wiki.alanadin.com
ingress rule komutu “checks a URL against every rule, from first to last, and shows the
first rule that matches” — çıktı Matched rule #1 diyor ve eşleşen servis
http_status:404. Hata gözle görülüyor.
Adım 3 — Düzelt: catch-all en sona
ingress:
- hostname: wiki.alanadin.com
service: http://localhost:8080
- hostname: statik.alanadin.com
path: \.(jpg|png|css|js)$
service: http://localhost:8081
- hostname: panel.alanadin.com
service: https://localhost:8443
# Zorunlu: son kural her zaman catch-all olmali
- service: http_status:404
Doküman bunu zorunlu kılıyor: “The last ingress rule must be a catch-all rule that matches all traffic.”
cloudflared tunnel ingress validate
cloudflared tunnel ingress rule https://statik.alanadin.com/logo.png
sudo systemctl restart cloudflared
Adım 4 — İkinci kasıtlı hata: self-signed origin’e TLS doğrulamasıyla gitmek
panel.alanadin.com hâlâ çalışmıyor — çünkü https://localhost:8443 self-signed sertifika
sunuyor ve cloudflared’in varsayılanı doğrulama yapmak: “When false, TLS verification is
performed on the certificate presented by your origin.”
curl -I https://panel.alanadin.com
sudo journalctl -u cloudflared -n 40 --no-pager | grep -i "tls\|certificate\|x509"
Adım 5 — Düzelt: önce doğru yolla, sonra kestirme yolla
Doğru yol — kendi CA’nı tanıt:
- hostname: panel.alanadin.com
service: https://localhost:8443
originRequest:
caPool: /etc/ssl/certs/ic.crt
originServerName: panel.ic
caPool için dokümanın koşulu: “You should only configure this setting if your certificate is
not signed by Cloudflare.” originServerName ise “Hostname that cloudflared should expect
from your origin server certificate.”
Kestirme yol — yalnızca teşhis için:
originRequest:
noTLSVerify: true
“When true, TLS verification is disabled. This will allow any certificate from the origin to be accepted.”
Adım 6 — Üçüncü kasıtlı hata: yapılandırmayı yerinde yeniden başlatmak
sudo systemctl restart cloudflared
Yeniden başlatma sırasında tünel kısa süre kopuyor. Kesintiyi ölç:
while true; do
curl -s -o /dev/null -w "%{http_code} " https://wiki.alanadin.com
sleep 1
done
Adım 7 — Düzelt: replika ile kesintisiz güncelleme
Dokümanın dört adımlı yöntemi — ikinci bir cloudflared aynı tünelde yeni yapılandırmayla
başlatılıyor, hazır olunca eskisi durduruluyor:
# Yeni yapilandirmayla ikinci ornegi baslat (ayni tunel UUID'si)
cloudflared --config /etc/cloudflared/config-yeni.yml tunnel run <TUNNEL_UUID> &
# Baglantilarin kurulmasini bekle
sleep 15
cloudflared tunnel info <TUNNEL_UUID>
# Eskisini durdur
sudo systemctl stop cloudflared
Her replika dört bağlantı açıyor: “Each replica establishes four new connections to Cloudflare, providing additional points of ingress to your origin.”
Adım 8 — Origin’in gerçekten kapalı olduğunu kanıtla
Dokümanın kendi önerdiği kontrol:
netcat -zv <SUNUCU_GENEL_IP> 80
netcat -zv <SUNUCU_GENEL_IP> 443
netcat -zv <SUNUCU_GENEL_IP> 8443
Üçü de bağlantı kuramamalı. Kurabiliyorsa güvenlik duvarında hâlâ açık bir gelen kural var.
Ölçüm tablosu
| Ölçüt | Değer |
|---|---|
Catch-all üstteyken ingress rule çıktısı | |
| Catch-all üstteyken üç hostname’in HTTP kodu | |
| Catch-all sona alındıktan sonraki eşleşme numarası | |
| Self-signed origin’de dönen HTTP kodu | |
journalctl’deki sertifika hatası metni | |
caPool sonrası HTTP kodu | |
systemctl restart ile kesinti süresi | |
| Replika yöntemiyle kesinti süresi | |
tunnel info çıktısındaki bağlantı sayısı | |
| Üç portun dışarıdan tarama sonucu |
Fiyatlandırma
Cloudflare Tunnel’ın kendisi ücretsizdir. Bu, Cloudflare’in 15 Nisan 2021’de yayımladığı “Free Tunnels for Everyone” duyurusuyla resmîleşti: “Any organization can use the secure, outbound-only connection feature of the product at no cost.” Ürün o tarihe kadar Argo Tunnel adını taşıyordu; ücretli olan Argo Smart Routing ayrı bir eklenti olarak kaldı.
Tünel sayısı, eşzamanlı bağlantı sayısı veya aktarılan bant genişliği için ücret alınmaz. Ücretli hale gelen şey, tünelin üzerine koyduğun katmanlardır:
| Katman | Ücretlendirme |
|---|---|
Tunnel (cloudflared) | Ücretsiz |
| DNS kaydı ve proxy | Ücretsiz |
| Argo Smart Routing | Ayrı ücretli eklenti |
| Access politikaları | Cloudflare One planına tabi: 50 kullanıcıya kadar ücretsiz, sonrası kullanıcı başına 7 USD/ay |
| Gateway, Browser Isolation, DLP | Aynı Cloudflare One planı içinde |
| WAF gelişmiş kuralları | Alan adı planına tabi (Pro ve üzeri) |
Lisanslama ve hukuki çerçeve
cloudflared açık kaynaktır. Daemon Apache 2.0 lisansıyla GitHub’da yayımlanır. Kodu inceleyebilir, derleyebilir, kurumsal imaj deposuna alabilirsin — güvenlik incelemesinden geçirmesi gereken kurumlar için önemli bir noktadır.
Hizmet tarafı tescillidir. Tünelin diğer ucundaki Cloudflare ağı ve kontrol düzlemi açık kaynak değildir; kullanım Cloudflare Hizmet Şartlarına tabidir.
Veri akışı. Trafik Cloudflare ağı üzerinden geçer ve kenarda TLS sonlandırılır. Bu, Cloudflare’in isteği açık biçimde işlediği anlamına gelir — WAF ve önbellekleme zaten bunu gerektirir. Bunun istenmediği durumlarda uçtan uca şifreli taşıma için Spectrum veya Keyless SSL değerlendirilir.
KVKK açısından. Tünelden geçen kişisel veri yurt dışındaki Cloudflare sunucularında işlenmiş olur. Kurumsal kullanımda Veri İşleme Ek Sözleşmesi ve alt işleyici listesi incelenmelidir. İşlemenin belirli coğrafyalarla sınırlanması için Data Localization Suite adlı ayrı ücretlendirilen eklenti bulunur.
Sık yapılan hatalar
Access politikasını atlamak. Tünel kurulur kurulmaz servis internete açılır. En sık ve en pahalı hata budur.
Son ingress kuralını unutmak. ingress listesi mutlaka hostname’i olmayan bir yakalayıcı kuralla bitmelidir (service: http_status:404). Yoksa cloudflared başlamaz.
Servis kurulumunda yapılandırmayı taşımamak. cloudflared service install /etc/cloudflared/config.yml okur, ~/.cloudflared/config.yml değil. Elle çalışırken sorunsuz olan kurulum, servise alınınca bozulur.
Kimlik dosyasını depoya koymak. <UUID>.json tünelin özel anahtarıdır. Sızarsa başkası senin tünelini taklit edebilir. .gitignore’a ekle, sunucuda chmod 600 yap.
Eski A kaydını silmemek. Tünele geçtikten sonra sunucunun gerçek IP’sine işaret eden eski DNS kayıtları durursa, origin IP’si hâlâ keşfedilebilir ve tünelin sağladığı gizlilik ortadan kalkar.
Gelen portları kapatmamak. Tünel kurulduktan sonra güvenlik duvarında 80/443 gelen kurallarını kaldır. Aksi halde saldırgan Cloudflare’i atlayıp doğrudan sunucuya ulaşabilir.
Sıkça sorulan sorular
- Gerçekten hiçbir gelen port açmam gerekmiyor mu?
- Evet.
cloudflaredyalnızca dışarı doğru bağlantı açar (TCP ve UDP 7844). Güvenlik duvarında gelen (inbound) hiçbir kural değiştirmezsin. Çoğu kurumsal ağda giden trafik zaten açık olduğu için ek yapılandırma bile gerekmez. - Sabit IP’m yok, evimdeki/ofisimdeki hat CGNAT arkasında. Yine de kullanabilir miyim?
- Evet — Tunnel’ın en güçlü olduğu senaryo tam olarak budur. Sunucunun internetten erişilebilir bir adresi olması gerekmez. Türkiye’de birçok operatör konut ve bazı iş hatlarında gelen 80/443 portlarını kapatır veya CGNAT uygular; bu hatlarda port yönlendirme çalışmaz ama Tunnel çalışır.
- Bağlantı koparsa ne olur?
cloudflaredvarsayılan olarak birden fazla Cloudflare veri merkezine ayrı ayrı bağlantı kurar. Biri düşerse trafik diğerleri üzerinden akmaya devam eder. Ayrıca daemon kopan bağlantıyı otomatik yeniden kurar. Yüksek erişilebilirlik için aynı tüneli iki farklı sunucuda çalıştırabilirsin; Cloudflare trafiği aralarında dağıtır.- Tunnel ile VPN arasındaki fark nedir?
- VPN kullanıcıyı ağa sokar; Tunnel servisi dışarı çıkarır. VPN’de bir kez içeri giren kullanıcı ağdaki her şeye erişebilir (yatay hareket riski). Tunnel’da yalnızca
ingresskuralında tanımladığın servis erişilebilir olur, gerisi görünmez bile. Kullanıcı tarafında istemci kurulumu da gerekmez. - ngrok ile aynı şey mi?
- Teknik olarak benzer, kullanım amacı farklı. ngrok geliştirme sırasında geçici paylaşım için tasarlanmıştır. Tunnel kalıcı üretim kullanımı içindir: sabit hostname, sistem servisi olarak çalışma, WAF/Access/hız sınırlama gibi Cloudflare katmanlarının doğrudan üzerine binmesi ve bant genişliği ücreti alınmaması.
- Tünelin arkasındaki servise kimlik doğrulama nasıl eklerim?
- Tunnel yalnızca bağlantıyı kurar, yetkilendirme yapmaz — yayınladığın hostname varsayılan olarak herkese açıktır. Önüne Cloudflare Access politikası koyman gerekir; e-posta, kimlik sağlayıcı (Entra ID, Google Workspace) veya cihaz duruşu ile kural yazarsın. Bu adımı atlamak, iç servisini yanlışlıkla internete açmak demektir.
- Sadece HTTP mi destekliyor?
- Hayır.
ingresskurallarında SSH, RDP, SMB ve rastgele TCP/UDP servisleri de tanımlanabilir. Ancak HTTP dışındaki protokollere kullanıcı tarafından erişmek için istemcide WARP veyacloudflared accesskomutu gerekir; tarayıcıdan doğrudan bağlanılmaz. - Origin sunucumun IP’si gerçekten gizleniyor mu?
- Evet, ama tam koruma için gelen trafiği de kısıtlaman gerekir. Tunnel kurduktan sonra DNS kaydın
<UUID>.cfargotunnel.com’a işaret eder, gerçek IP hiçbir yerde görünmez. Yine de sunucun hâlâ eski bir A kaydı, e-posta başlığı veya SSL sertifika şeffaflık kaydı üzerinden sızmış olabilir; eski kayıtları temizle ve güvenlik duvarında gelen 80/443’ü tamamen kapat. - Apex alan adı için tünel açabilir miyim?
- Evet. Birebir: “Yes. With Named Tunnels you can create a CNAME at the apex that points to the named tunnel.” Oluşturulan kayıt tipi de belgeli: “Named Tunnels can be routed via CNAME records to point to the
<UUID>.cfargotunnel.com; or as Load Balancing endpoints, which also point to<UUID>.cfargotunnel.com.” - Alan adım Cloudflare DNS'te değil, yine de kullanabilir miyim?
- Evet ama DNS kaydını elle açman gerekiyor. Birebir: “The best experience with Cloudflare Tunnel is using Full Setup because Cloudflare manages DNS for the domain and can automatically configure DNS records for newly started Tunnels.” Partial (CNAME) kurulumda ise: “You will need to create a new DNS record with your current DNS provider for each new hostname… The DNS record should be of type CNAME or ALIAS if it is on the root of the domain… and the value of the record should be
subdomain.domain.tld.cdn.cloudflare.net.” - WebSocket ve gRPC çalışıyor mu?
- WebSocket evet, gRPC koşullu. WebSocket birebir: “Yes. Cloudflare Tunnel has full support for Websockets.” gRPC ise yalnızca bir yolla: “Cloudflare Tunnel supports gRPC traffic via private subnet routing. Public hostname deployments are not currently supported.” Yani gRPC servisini public hostname olarak yayınlayamıyorsun; Cloudflare One Client, Mesh ya da WAN üzerinden özel ağ rotasıyla erişmen gerekiyor.
- Ziyaretçinin gerçek IP'si origin'e geliyor mu?
- Hayır. Birebir: “No. When using Cloudflare Tunnel, all requests to the origin are made internally between
cloudflaredand the origin.” Log'larında gerçek ziyaretçi IP'sini görmek istiyorsan ayrı bir yöntem kurman gerekiyor — Cloudflare bunu “configure an alternative method” diye ayrı bir belgeye bağlıyor (tipik olarakCF-Connecting-IPbaşlığını uygulamada okumak). - Authenticated Origin Pulls kurmalı mıyım?
- Hayır, tünelde hiçbir etkisi yok. Birebir: “Because Cloudflare Tunnel does not use an inbound listener on your origin, Authenticated Origin Pulls has no effect on hostnames routed through Cloudflare Tunnel. Origin traffic is already authenticated using your tunnel's connector credentials.” Klasik reverse proxy kurulumundan geliyorsan bu alışkanlığı bırakman gereken yerlerden biri.
- Kaç tünel ve kaç replika açabilirim?
- Resmî hesap limitleri: hesap başına 1.000 cloudflared tüneli, tünel başına 25 aktif replika, hesap başına 1.000 virtual network. Bir de paylaşımlı bir limit var ve gözden kaçıyor: rota sayısı (CIDR + hostname) hesap başına 1.000 ve bu havuz Cloudflare Mesh ile ortak — Mesh rotaların da aynı 1.000'i tüketiyor. Limit sayfasının kendi notu: “These limits may be increased on Enterprise accounts.”
- Yüksek erişilebilirlik için replika mı load balancer mı?
- İkisi farklı iş yapıyor. Replika: “Each replica establishes four new connections to Cloudflare… All replicas point to the same tunnel, so if a single host running
cloudflaredgoes down, the remaining replicas continue to serve traffic.” Ama yönlendirme kontrolü yok: “Replicas do not support traffic steering (such as round-robin or hash-based routing). When a request arrives at Cloudflare, it is forwarded to the geographically closest replica. If that connection fails, Cloudflare retries with other replicas, but there is no guarantee about which one is chosen.” Akıllı dağıtım istiyorsan Load Balancer kullanman gerekiyor. - Yapılandırmayı kesintisiz nasıl güncellerim?
- Dokümanın önerdiği dört adımlı replika yöntemi birebir: “1. Have a
cloudflaredinstance running with the original version of the configuration file. 2. Start acloudflaredreplica running with the updated version. 3. Wait for the replica to be fully running and usable. 4. Stop the first instance.” Bu, replikaların belgelenmiş üçüncü kullanım amacı: “To update the configuration of a tunnel without downtime.” - Ingress kurallarım çalışmıyor, nasıl teşhis ederim?
- İki komut var ve ikisi de trafiğe hiç dokunmadan çalışıyor. Doğrulama:
cloudflared tunnel ingress validate— “This will ensure that the set of ingress rules specified in your config file is valid.” Eşleştirme testi:cloudflared tunnel ingress rule https://foo.example.com— “This checks a URL against every rule, from first to last, and shows the first rule that matches.” Çıktı kaçıncı kuralın eşleştiğini söylüyor (Matched rule #3), böylece sıralama hatasını gözle görüyorsun. - Ingress kurallarında sıra önemli mi?
- Belirleyici. Birebir: “When
cloudflaredreceives an incoming request, it evaluates each ingress rule from top to bottom to find which rule matches… If a rule does not specify a hostname, all hostnames will be matched. If a rule does not specify a path, all paths will be matched.” Ve zorunlu kural: “The last ingress rule must be a catch-all rule that matches all traffic.” Bu ikisi birleşince klasik hata çıkıyor: hostname'siz catch-all'ı listenin üstüne koyarsan altındaki her kural ölü hâle geliyor. - Origin'im self-signed sertifika kullanıyor, 502 alıyorum.
- TLS doğrulaması takılıyor. Üç ayarı var. noTLSVerify — varsayılan
false; “When true, TLS verification is disabled. This will allow any certificate from the origin to be accepted.” caPool — kendi CA'nı tanıtma yolu: “Local file path to the certificate authority (CA) for your origin server certificate… You should only configure this setting if your certificate is not signed by Cloudflare.” originServerName — “Hostname thatcloudflaredshould expect from your origin server certificate. If null, the expected hostname is the service URL.” Doğru sıra: öncecaPoolile CA'yı tanıt;noTLSVerifybir teşhis aracı, kalıcı çözüm değil. - HTTP/2 ile origin'e bağlanabilir miyim?
- Evet ama şartlı. Birebir: “When true,
cloudflaredwill attempt to connect to your origin server using HTTP/2.0 instead of HTTP/1.1. HTTP/2.0 is a faster protocol for high traffic origins but requires you to deploy an SSL certificate on the origin. We recommend using this setting in conjunction withnoTLSVerifyso that you can use a self-signed certificate.” Yani origin'de sertifika yoksahttp2Originaçmak işe yaramıyor. - Ayarları tüm servisler için birden verebilir miyim?
- Evet — üst düzey
originRequestbloğu tüm ingress kurallarına miras kalıyor, tek tek kurallar da onu geçersiz kılabiliyor. Dokümanın kendi örneği: üstteconnectTimeout: 30s, tek bir servisteconnectTimeout: 10s— “The 30-second connection timeout still applies to all other services.” Bir de istisna: “Some built-in services such ashttp_statusdo not use any configuration.” - Origin'in gerçekten kapalı olduğunu nasıl kanıtlarım?
- Dokümanın kendi önerdiği kontrol, birebir: “To double check that your origin web server is not responding to requests outside Cloudflare while Tunnel is running you can run netcat in the command line” —
netcat -zv <sunucu-ip> 80venetcat -zv <sunucu-ip> 443. Bu iki komut da bağlantı kuramamalı. Kurabiliyorsa güvenlik duvarında hâlâ açık bir gelen kural var demektir ve tünelin sağladığı kazancın yarısını kaybediyorsun. - Tünel üzerinden büyük dosya ve video servis edebilir miyim?
- Yönlendirme tipine bağlı ve bu bir sözleşme meselesi. Birebir: “Public hostname routes make applications available on the Internet through Cloudflare's reverse proxy. On Free, Pro, and Business plans, the service-specific terms require you to use a specific paid service to serve video and other large files.” Özel ağ rotalarında ise bu kısıt yok: “Private network routes do not publish applications to the Internet, and this restriction does not apply.” Yani video yayınlayacaksan ya Stream gibi bir ürüne geçeceksin ya da erişimi Cloudflare One Client / Mesh / WAN üzerinden özel rotayla vereceksin.
- Sildiğim tüneli geri alabilir miyim?
- Hayır. Birebir: “No. You cannot undo a tunnel deletion. If the tunnel was locally-managed, its
config.yamlfile will still be present and you can create a new tunnel with the same configuration. If the tunnel was remotely-managed, both the tunnel and its configuration are permanently deleted.” Panelden yönetilen tünellerde yapılandırma Cloudflare tarafında durduğu için yedeğin de yok. Uzaktan yönetilen tüneller kullanıyorsan yapılandırmayı Terraform'da tutmak tek gerçek yedekleme yolu. - Belgelerde neden 'warp' ve 'argo' geçiyor?
- Eski adlar. Birebir: “Cloudflare Tunnel was previously named Warp during the beta phase. As Warp was added to the Argo product family, we changed the name to Argo Tunnel… Once we no longer required users to purchase Argo to create Tunnels, we renamed Argo Tunnel to Cloudflare Tunnel.” Bu yüzden DNS kayıtları hâlâ
<UUID>.cfargotunnel.comhedefini gösteriyor. Karıştırma: bugünkü Cloudflare One Client (eski WARP istemcisi) bambaşka bir üründür.
İlgili servisler
- Accessİç uygulamalara VPN yerine identity ve device temelli erişim policy’leri koyar.
- WorkersJavaScript/TypeScript/Python kodunu Cloudflare’in 330+ şehirdeki sunucularında, sunucu yönetmeden çalıştırır.
- WAFSQL injection, XSS ve bilinen zafiyet istismarlarını request origin’e ulaşmadan engeller.
- GatewayÇalışanların DNS, HTTP ve ağ trafiğini filtreler; zararlı ve yasak siteleri engeller.
- SpectrumHTTP olmayan TCP/UDP servislerini (SSH, oyun sunucusu, e-posta) Cloudflare arkasına alır.
- Load BalancingTrafiği birden çok origin arasında dağıtır, health check yapar, arızalıyı devre dışı bırakır.
Bu sayfadaki fiyat ve özellik bilgileri 2 Eylül 2026 tarihinde Cloudflare’in resmî kaynaklarından doğrulanmıştır. Cloudflare fiyatlandırmasını önceden haber vermeden değiştirebilir; bağlayıcı bilgi içinresmî sayfaya bakın.