İçeriğe atla
Cloudflare Wiki

    ↑↓ gez↵ açEsc kapatCloudflare Wiki

    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 akışı: tarayıcıdan gelen istek Cloudflare kenarına ulaşır, kenar hostname eşlemesine bakar, isteği tünel üzerinden sunucudaki cloudflared'e ve oradan localhost:8080'deki servise iletir

    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:

    1. 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.
    2. 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.
    3. 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:

    1. Kullanıcı wiki.sirket.com adresini ister.
    2. DNS, bu adı <TÜNEL-UUID>.cfargotunnel.com adresine çözer — gerçek IP’n hiçbir adımda görünmez.
    3. İstek Cloudflare kenarına ulaşır. Burada WAF, Access, hız sınırlama gibi katmanlar uygulanır.
    4. Kenar, o tünele ait açık bağlantılardan birini seçer ve isteği içeri gönderir.
    5. cloudflared isteği ingress kurallarına bakarak yerel servise iletir (http://localhost:8080 gibi).
    6. Yanıt aynı yoldan geri döner.

    İki yönetim biçimi

    Uzaktan yönetilenYerel yönetilen
    Yapılandırma neredeCloudflare panelindeSunucudaki config.yml dosyasında
    KurulumPanelden token kopyala-yapıştırcloudflared komutlarıyla
    DeğişiklikPanelden anındaDosyayı düzenle, servisi yeniden başlat
    Sürüm kontrolüYokVar — dosya Git’e girer
    Uygun olduğu yerHı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 cloudflared

    Sürümü doğrula:

    cloudflared --version
    Ubuntu üzerinde apt ile cloudflared kurulumu ve cloudflared --version çıktısı

    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ç.

    Tarayıcıda açılan Authorize Cloudflare Tunnel ekranı ve hesaptaki alan adı listesi

    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
    cloudflared tunnel create ve tunnel list komutlarının terminal çıktısı

    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.

    Cloudflare DNS panelinde tünel için oluşan CNAME kaydı, proxy açık

    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)='
    curl ile tünel hostname'inin doğrulanması ve cdn-cgi/trace çıktısında colo=FRA, loc=TR

    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
    Zero Trust panelinde self-hosted Access uygulaması oluşturma ekranı ve erişim politikası
    Cloudflare Access giriş ekranı: SAML sağlayıcı seçeneği ve e-posta ile tek kullanımlık kod

    Ölçüm: öncesi ve sonrası

    Yukarıdaki adımlar Ubuntu 24.04 üzerinde cloudflared 2026.8.3 ile gerçekten uygulandı. Sonuç:

    ÖlçütKlasik yayınTünel ile
    Güvenlik duvarında açılan gelen port80 ve 443hiçbiri
    Gereken giden port—TCP/UDP 7844
    Sabit genel IP gereksinimivaryok
    DNS kaydının işaret ettiği yersunucunun A kaydı<UUID>.cfargotunnel.com
    Origin IP’si dışarıdan görünür müevethayır
    Kimlik doğrulamauygulamanın kendi girişiAccess — 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
    Terminal — üç servisin dinlediği portları gösteren ss -ltnp çıktısı; 8080, 8081 ve 8443 görünsün

    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.

    Terminal — cloudflared tunnel ingress rule çıktısı; Matched rule #1 ve http_status:404 satırları okunacak şekilde
    Terminal — üç hostname'e curl -I; üçünde de HTTP/2 404

    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
    Terminal — ingress rule çıktısında artık Matched rule #2 ve statik servisin adresi

    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"
    İki bölmeli görüntü — solda curl çıktısında 502, sağda journalctl'de sertifika doğrulama hatası satırı

    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.”

    Terminal — caPool eklendikten sonra curl -I https://panel.alanadin.com çıktısı 200

    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
    Terminal — kesintisiz curl döngüsü; restart anında 502 ya da 000 dizisi ve sonra 200'e dönüş

    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.”

    Terminal — cloudflared tunnel info çıktısı; iki connector ve toplam sekiz bağlantı listeleniyor
    Terminal — aynı curl döngüsü; geçiş boyunca kesintisiz 200. Demo'nun kanıt karesi bu

    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.

    Terminal — üç netcat denemesinin de Connection refused ya da timeout vermesi

    Ölçüm tablosu

    ÖlçütDeğ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 RoutingAyrı ü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, DLPAynı 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. cloudflared yalnı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?
    cloudflared varsayı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 ingress kuralı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. ingress kuralları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 veya cloudflared access komutu 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 cloudflared and 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 olarak CF-Connecting-IP baş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 cloudflared goes 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 cloudflared instance running with the original version of the configuration file. 2. Start a cloudflared replica 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 cloudflared receives 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 that cloudflared should expect from your origin server certificate. If null, the expected hostname is the service URL.” Doğru sıra: önce caPool ile CA'yı tanıt; noTLSVerify bir teşhis aracı, kalıcı çözüm değil.
    HTTP/2 ile origin'e bağlanabilir miyim?
    Evet ama şartlı. Birebir: “When true, cloudflared will 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 with noTLSVerify so that you can use a self-signed certificate.” Yani origin'de sertifika yoksa http2Origin açmak işe yaramıyor.
    Ayarları tüm servisler için birden verebilir miyim?
    Evet — üst düzey originRequest bloğu tüm ingress kurallarına miras kalıyor, tek tek kurallar da onu geçersiz kılabiliyor. Dokümanın kendi örneği: üstte connectTimeout: 30s, tek bir serviste connectTimeout: 10s — “The 30-second connection timeout still applies to all other services.” Bir de istisna: “Some built-in services such as http_status do 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> 80 ve netcat -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.yaml file 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.com hedefini 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.

    Hata bildir

    Yanlış bir rakam, eskimiş bir bilgi veya bozuk bir bağlantı mı buldun? Bildir, kaynağıyla birlikte kontrol edelim.