Cloudflare Tunnel ile VPS uzerinde portlari kapatma
Cloudflare Tunnel kurulumunda 80 ve 443 portlarini guvenli hale getirme rehberi. Uygulamanizi localhost adresine baglayarak dis erisimi tamamen kesmeyi ogrenin.
Cloudflare Tunnel ne yapar ve açık port olmaması gerçekte ne anlama gelir
Cloudflare Tunnel, VPS üzerinde cloudflared adında küçük bir daemon çalıştırır. Bu daemon, Cloudflare'e doğru giden bir bağlantı açar ve bu bağlantıyı açık tutar. Alan adınıza gelen istekler Cloudflare'in uç noktalarına ulaşır ve mevcut bağlantı üzerinden sunucunuza iletilir; bu sayede dışarıdan sunucunuza doğrudan bir bağlantı kurulmasına gerek kalmaz.
Çoğu kılavuzun değinmediği adım şudur: tünel kurmak hiçbir şeyi kapatmaz. Eğer güvenlik duvarınızda 80 ve 443 numaralı portlar hala açıksa ve uygulamanız 0.0.0.0 üzerinde dinleme yapmaya devam ediyorsa, ilk yöntemi değiştirmek yerine ikinci bir giriş yolu eklemiş olursunuz. Kaynak IP adresiniz hala erişilebilirdir ve onu bulan herkes Cloudflare'i devre dışı bırakarak doğrudan sunucunuza ulaşabilir. Bu portları kapatmak manuel bir işlemdir ve yukarıda anlatılan her şeyi değerli kılan adım tam olarak budur.
cloudflared, 7844 numaralı port üzerinden region1.v2.argotunnel.com ve region2.v2.argotunnel.com adreslerine giden yönlü erişime ihtiyaç duyar. QUIC protokolü için UDP kullanır ve HTTP/2 için TCP'ye geri döner. Egress filtrelemesi olan bir ağda her ikisine de izin verin veya --protocol http2 kullanarak TCP yolunu zorunlu kılın.
Başlamadan önce
- Cloudflare hesabınızda tanımlı ve Cloudflare isim sunucuları tarafından yönetilen bir alan adı.
cloudflared tunnel route dnsbu bölgeye kayıt yazacağı için bölgenin önceden mevcut olması gerekir. - VPS üzerinde 7844 numaralı porttan dışarıya doğru UDP ve TCP erişimi.
- İlk test için
python3 -m http.server 8080olsa bile yerel olarak dinleme yapan bir uygulama. - Sunucuda
sudoyüklü olmalı ve güvenlik duvarı ayarlarını değiştirmeden önce ikinci bir SSH oturumu açık tutulmalıdır.
Ubuntu veya Debian üzerinde cloudflared kurulumu
Cloudflare, her .deb sürümü için bir cloudflared paketi sunar; bu nedenle kurulum, tek bir indirme ve tek bir dpkg çağrısından ibarettir.
curl -fsSL -o /tmp/cloudflared.deb \
https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i /tmp/cloudflared.deb
cloudflared --versionSunucu mimarisinden emin değilseniz önce dpkg --print-architecture komutunu çalıştırın. 64-bit ARM mimarisinde dosya adı amd64 yerine arm64 ile biter; bunun dışında hiçbir şey değişmez. Devam etmeden önce sürüm bilgisini görmek için cloudflared --version komutunu çalıştırmanız yeterlidir.
Bu yöntemle kurulan bir paket, apt güncelleme yolunun dışında kalır; bu nedenle apt-get upgrade aracı paketi asla güncellemez ve güncellemeler sizin sorumluluğunuzdadır. sudo cloudflared update komutu en yeni sürümü indirir ve mevcut binary dosyasının üzerine yazar; servis oluşturulduktan sonra, çalışan sürecin yeni binary dosyasını kullanması için sudo systemctl restart cloudflared komutunu çalıştırın. Bir tunnel daemon, herhangi bir port açmasa dahi internete açık bir yazılım olduğundan, bu işlemi diğer yamalarınızla aynı periyotta gerçekleştirin.
Oturum açma ve adlandırılmış tünel oluşturma
cloudflared tunnel loginBaşsız (headless) bir VPS üzerinde tarayıcı açılmayacağı için, ekrana yazdırılan URL'yi kopyalayıp dizüstü bilgisayarınızdaki tarayıcıya yapıştırın ve bölgeyi (zone) seçin. İşlem tamamlandığında ~/.cloudflared/cert.pem dosyası oluşacaktır.
cert.pem dosyası sizin hesap kimlik bilginizdir. Bu dosya; tünel oluşturma, ilgili bölgeye DNS kayıtları yazma ve tünelleri silme yetkisi verir. Çalışan tünel bu dosyayı hiçbir zaman kullanmaz. Bu dosyayı bir parola gibi saklayın; çünkü bu dosyanın bir kopyası, bir başkasının alan adınız üzerinde yeni ana bilgisayar adları (hostname) yayınlaması için yeterlidir.
cloudflared tunnel create homelabBaşarılı bir çalıştırma işleminden sonra aşağıdaki her iki satır da ekrana yazdırılır; bu satırlardaki UUID değeri, yapılandırma dosyasına yapıştıracağınız değerdir.
Tunnel credentials written to /home/you/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.
Created tunnel homelab with id 6ff42ae2-765d-4adf-8112-31c55c1551efBu JSON dosyası tünelin kimliğidir ve çalışan servisin ihtiyaç duyduğu tek kimlik bilgisidir. Bu dosyaya sahip olan herkes tüneliniz olarak kayıt yapabilir ve trafiğinizi alabilir. Bu kimlik bilgisini tek başına yenilemenin bir yolu yoktur: dosyayı geçersiz kılmak, cloudflared tunnel delete homelab işlemini yapmayı ve yeni bir tünel oluşturmayı gerektirir.
Kimlik bilgileri dosyasını güvenli bir konumda tutun
Servis root kullanıcısı ile çalıştığı için, dosyayı bir yedekleme işinin veya paylaşımlı bir oturumun erişebileceği bir ev dizini yerine, root sahipliğindeki bir dizine yerleştirin.
sudo install -d -m 700 -o root -g root /etc/cloudflared
sudo install -m 600 -o root -g root \
~/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json \
/etc/cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
rm ~/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
sudo ls -l /etc/cloudflared
cloudflared tunnel listls -l komutu, JSON dosyası üzerinde -rw------- root root çıktısını vermelidir. cloudflared tunnel list komutu cert.pem dosyasını okur; bu sayede çalışmaya devam eder ve tünel adını, UUID değerini ve mevcut bağlantı sayısını ekrana yazdırır.
Gerçek ingress kurallarıyla config.yml dosyasını oluşturun
Yapılandırmayı ev dizininizde değil, /etc/cloudflared/config.yml yolunda oluşturun. Bunun nedeni şudur: cloudflared service install, bulduğu her yapılandırmayı /etc/cloudflared/config.yml konumuna kopyalar ve ardından --config /etc/cloudflared/config.yml değerini systemd birimine sabitler (hard-code). Dosyayı ~/.cloudflared/config.yml içinde oluşturursanız, bu kopya yalnızca tek seferlik bir anlık görüntü (snapshot) olur. Daha sonra ev dizinindeki kopyada yaptığınız hiçbir değişiklik sisteme yansımaz; servis eski kuralları sunmaya devam eder ve hiçbir uyarı almazsınız. Dosyayı doğrudan ilgili konumda oluşturmak bu sorunu tamamen ortadan kaldırır.
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /etc/cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
loglevel: info
ingress:
- hostname: app.example.com
service: http://127.0.0.1:8080
- hostname: files.example.com
service: http://127.0.0.1:8081
- hostname: grafana.example.com
path: ^/api/
service: http://127.0.0.1:3000
- service: http_status:404Kurallar yukarıdan aşağıya doğru okunur ve ilk eşleşen kural geçerli olur. hostname içermeyen bir kural her ana bilgisayar adı (hostname) ile eşleşir; bu nedenle "catch-all" kuralı en sona yazılmalıdır. Bu kuralı çıkarırsanız yapılandırma The last ingress rule must match all URLs (i.e. it should not have a hostname or path filter) hatasıyla reddedilir. http_status:404, 404 yanıtı döndüren ve başka hiçbir işlem yapmayan yerleşik bir servistir. Bu servisin varlığı gereklidir: aksi takdirde, yayınlamayı amaçlamadığınız bir ana bilgisayar adına gelen istek, en altta yer alan herhangi bir gerçek kurala düşer.
service: URL kısmında localhost yerine 127.0.0.1 kullanın. Ubuntu üzerinde localhost, öncelikle ::1 adresine çözümlenir ve yalnızca IPv4 loopback adresine bağlı bir uygulama bu bağlantıyı reddeder. Günlük kaydında dial tcp [::1]:8080: connect: connection refused hatası görünür ve ziyaretçi 502 hatası alır.
Sıçrama (hop) makineden dışarı çıkmadığı için burada düz http:// kullanımı doğrudur. https:// değerini yalnızca yerel uygulama TLS (transport layer security) zorunluluğu getirdiğinde kullanın; sertifika aradığınız isimle eşleşmediğinde x509: certificate is valid for example.com, not localhost hatası almayı bekleyin. Bu durumu originRequest altında originServerName ile düzeltin veya noTLSVerify: true ile riski kabul edin.
Herhangi bir işlem başlatmadan önce kuralları kontrol edin:
sudo cloudflared --config /etc/cloudflared/config.yml tunnel ingress validate
sudo cloudflared --config /etc/cloudflared/config.yml tunnel ingress rule https://app.example.com/loginingress validate, yapılandırmanın geçerli olup olmadığını bildirir veya hataya neden olan kuralı belirtir. ingress rule, tek bir URL alır ve bu URL ile eşleşen ilk kuralı yazdırır; bu, path düzenli ifadesinin (regex) beklediğinizle eşleşmediğini anlamanın en hızlı yoludur.
DNS kaydını tünele yönlendirme
cloudflared tunnel route dns homelab app.example.com
cloudflared tunnel route dns homelab files.example.com
cloudflared tunnel route dns homelab grafana.example.comHer çağrı, 6ff42ae2-765d-4adf-8112-31c55c1551ef.cfargotunnel.com adresine işaret eden bir CNAME kaydı oluşturur. Bu hedef yalnızca Cloudflare ağı içerisinde çözümlenebildiğinden, ana makine adınız için genel DNS yanıtı bir Cloudflare adresi olur ve VPS IP adresiniz hiçbir zaman görünmez. config.yml içindeki bir joker karakterli hostname kaydı, kullandığınız her isim için eşleşen bir DNS kaydına ihtiyaç duymaya devam eder.
Bir kayıt zaten mevcut olduğunda, komut şu şekilde başarısız olur:
Failed to add route: code: 1003, reason: Failed to create record app.example.com with err An A, AAAA, or CNAME record with that host already exists.Bu mevcut kayıt, neredeyse her zaman VPS'inizin genel IP adresine işaret eden eski A kaydıdır ve tam olarak kaldırılmasını istediğiniz kayıt budur. Bu kaydı Cloudflare panelinden silin ve ardından komutu tekrar çalıştırın. Kaydı yerinde bırakmak, DNS'in kaynak IP adresinizi yayınlamaya devam etmesi anlamına gelir; bu durumda tünel hiçbir şeyi gizlemez.
Yeniden başlatma sonrasında çalışmaya devam etmesi için servis olarak kurun
Hata mesajlarını kendi terminalinizde okumak, günlük kayıtlarında (journal) aramaktan çok daha kolay olduğu için önce ön planda (foreground) çalıştırın.
sudo cloudflared --config /etc/cloudflared/config.yml tunnel run homelabSağlıklı bir başlangıç, her uç nokta (edge location) için bir tane olmak üzere, her biri kendi connIndex değerine sahip birkaç Registered tunnel connection satırı günlüğe kaydeder. Tarayıcınızda ana bilgisayar adlarınızdan birini yükleyin ve giriş kurallarının sizi beklediğiniz yere yönlendirdiğini doğrulayın, ardından Ctrl-C ile durdurun.
sudo cloudflared --config /etc/cloudflared/config.yml service install
systemctl status cloudflaredBu işlem /etc/systemd/system/cloudflared.service ile birlikte cloudflared-update.service ve cloudflared-update.timer dosyalarını yazar, ardından sizin için systemctl enable cloudflared.service ve systemctl start cloudflared.service komutlarını çalıştırır. enable, tüneli yeniden başlatma sonrasında tekrar ayağa kaldırdığı için burada önemli olan kısımdır. Birimin ExecStart değeri cloudflared --no-autoupdate --config /etc/cloudflared/config.yml tunnel run şeklindedir; bu nedenle söz konusu yapılandırma yolu değiştirilemez.
Bu adımda karşılaşılan üç hata belirli mesajlara sahiptir. possible conflicting configuration in /home/you/.cloudflared/config.yml and /etc/cloudflared/config.yml, her iki dosyanın da mevcut olduğu ve cloudflared'in hangisini kullanacağını tahmin etmeyi reddettiği anlamına gelir: istemediğiniz dosyayı silin. configuration file ... must contain entries for the tunnel to run and its associated credentials (tunnel: TUNNEL-UUID, credentials-file: CREDENTIALS-FILE), yapılandırmanızın adlandırılmış tünel anahtarları yerine hızlı url: kısayolunu kullandığı ve bu kısayolun servis olarak çalıştırılamayacağı anlamına gelir. cloudflared service is already installed, eski bir birimin hala yerinde olduğu anlamına gelir; bu yüzden önce sudo cloudflared service uninstall komutunu çalıştırın.
Yeniden yükleme (reload) özelliği yoktur. /etc/cloudflared/config.yml dosyasını düzenledikten sonra sudo systemctl restart cloudflared komutunu çalıştırın. Ardından, varsayımda bulunmak yerine yeniden başlatma iddiasını kanıtlayın:
sudo reboot
# once it is back
systemctl is-enabled cloudflared
systemctl is-active cloudflared
journalctl -u cloudflared -n 50 --no-pager
curl -sI https://app.example.comis-enabled komutunun enabled çıktısını vermesi ve is-active komutunun active çıktısını vermesi, bu bölümün temel amacıdır. Rotalar mevcut olduğunda ve servis çalıştığında, cert.pem komutunun sunucuda başka bir görevi kalmaz: rm ~/.cloudflared/cert.pem. Daha sonra bir ana bilgisayar adı eklemek, yalnızca cloudflared tunnel login komutunu tekrar çalıştırmak anlamına gelir.
80 ve 443 numaralı portları kapatın, aksi takdirde tünel yalnızca ek bir yol görevi görür
İki değişiklik yapmanız gerekir ve her ikisi de zorunludur. Birini yapıp diğerini ihmal etmek, origin sunucusunun dışarıdan erişilebilir kalmasına neden olur.
İlk olarak, uygulamayı loopback adresine bağlayın. Nginx tarafında bu, bu nginx reverse proxy yapılandırma açıklamasında üzerinden geçilen düzenlemenin aynısı olarak listen 80; yerine listen 127.0.0.1:8080; kullanılması anlamına gelir. Docker Compose tarafında ise bu, ports: - "127.0.0.1:8080:80" anlamına gelir. Yalın "8080:80" biçimi tüm arayüzlerde yayın yapar ve Docker, paketler ufw tarafından görülmeden önce devreye giren kendi NAT (ağ adresi çevirisi) kurallarını yazar; bu nedenle bir ufw deny kuralı bunu durdurmayacaktır. Bu tuzağın kendine ait bir açıklaması mevcuttur: Docker yayınlanan portları neden ufw kurallarını görmezden gelir.
sudo ss -lntpTaşıdığınız her servis, Local Address sütununda 127.0.0.1:8080 değerini göstermelidir. 0.0.0.0:8080 veya *:8080 yazan bir satır, hala dünyaya açık bir şekilde dinleme yapıyordur.
İkinci olarak, portları kapatın.
sudo ufw status numbered
sudo ufw delete allow 'Nginx Full'
sudo ufw status80 ve 443 numaralı portlar için deny kurallarını üst üste yığmak yerine allow kurallarını silin; çünkü ufw ilk eşleşen kuralda durur ve listede daha üstte kalan eski bir allow kuralı geçerli olur. SSH kuralınızı koruyun. Ufw güvenlik duvarı temel kılavuzu kurallar dizisinin geri kalanını kapsar. Çoğu VPS sağlayıcısı, kontrol panellerinde ufw'den bağımsız ayrı bir ağ güvenlik duvarı çalıştırır; bu nedenle 80 ve 443 numaralı portları orada da kapatın.
Şimdi başka bir yerden doğrulama yapın, çünkü sunucunun kendi üzerinde çalıştırılan curl http://127.0.0.1:8080 dış dünya hakkında hiçbir şey kanıtlamaz.
# run these from a different machine
nc -vz 203.0.113.10 443
curl -sI https://app.example.comHam IP adresi üzerinden alınan bir reddedilmiş veya zaman aşımına uğramış nc yanıtı ve ana bilgisayar adı (hostname) üzerinden alınan bir 200 yanıtı, aradığınız sonuçtur. Bir portun gerçekten açık olup olmadığını kontrol etme konusu, test etmek için daha fazla yöntem içerir.
Tünel bir taşıma yöntemidir, kimlik doğrulama değildir. Önüne bir giriş ekranı koymadığınız sürece, tünel üzerinden yayınladığınız her şey herkese açıktır; bunu ya uç noktada Cloudflare Access ile ya da sunucu üzerinde uygulamanın önünde konumlanan bir OAuth2 proxy ile yapabilirsiniz. SSH için de ayrı bir çözüm gerekir, çünkü tünel bunu kapsamaz: 22 numaralı portu açık tutun ancak yalnızca kendi kaynak adreslerinizle sınırlandırın.
Cloudflare Tunnel size ne kazandırır ve maliyeti nedir
Kazancınız gerçektir. Origin IP adresiniz artık yayınlanmaz, hiçbir gelen port dışarıya açılmaz, kurulum genel IP adresi olmayan bir makinede bile çalışır, genel sertifika Cloudflare'in sorumluluğundadır, bu nedenle sunucunuzda hiçbir ACME (otomatik sertifika yönetim ortamı) istemcisi çalışmaz ve hacimsel saldırılar bant genişliği kotanız yerine uç noktada (edge) emilir.
Maliyetler de aynı derecede gerçektir. Cloudflare, TLS sonlandırmasını kendi uç noktasında yapar: ziyaretçinizin isteği orada şifresi çözülerek tünele yeniden şifrelenir, dolayısıyla Cloudflare trafiği okuyabilir. Güvenlik duvarı, önbellekleme ve Access kurallarını mümkün kılan şey budur ve proxy hizmetlerini kullandığınız sürece bunu kapatan bir ayar yoktur. Düz metin verilerinizin üçüncü bir tarafça tutulması kabul edilemezse, burada durun ve başka bir çözüm seçin.
Cloudflare ayrıca erişilebilirlik için zorunlu bir bağımlılık haline gelir. cloudflared bağlı olmadığında, ziyaretçiler uygulamanız yerine Cloudflare'in 1033 hata sayfasını görür ve siz, geri dönebilecekleri doğrudan rotayı bilerek kaldırmış olursunuz.
Sıradan bir tarayıcıdan genel bir ana makine adına yalnızca HTTP, HTTPS ve WebSocket ile ulaşılabilir. Diğer tüm TCP protokolleri, SSH veya RDP (uzak masaüstü protokolü) ya da bir oyun sunucusu, istemci tarafında da yazılım gerektirir: yerel bir portu yönlendiren cloudflared access tcp veya WARP istemcisi. Bunlar için istemci gerektirmeyen bir yol yoktur.
İstek gövdeleri uç noktada sınırlandırılmıştır ve limitin üzerindeki bir yükleme, uygulamanıza ulaşmadan önce HTTP 413 hatasıyla reddedilir. Ağustos 2026 itibarıyla bu tavan, ücretsiz ve Pro planlarda 100 MB'tır, ücretli katmanlarda ise daha yüksektir; bu nedenle bir sayıya göre tasarım yapmadan önce Cloudflare'in güncel limitler sayfasını kontrol edin. Cloudflare'in self-servis şartları, proxy'nin kullanımını esas olarak video ve diğer büyük HTML olmayan dosyaları sunmakla kısıtlar; bir medya kütüphanesini ücretsiz bir tünele yönlendirmeden önce bunu okumanızda fayda vardır.
Cloudflare Tunnel, ters SSH tüneli veya Tailscale Funnel
Bu üç yöntem de yalnızca dışa dönük (outbound) çalışır; dolayısıyla gelen portu veya genel IP adresi olmayan bir sunucuda dahi kullanılabilirler. Aralarındaki fark, düz metin verinizin kimin elinde tutulduğu ve genel ağda hangi ana makine adının (hostname) göründüğüdür.
Ters SSH tüneli, genel IP adresine sahip ikinci bir makine gerektirir ve bu makine ön kapı görevi görür: sertifika, reverse proxy ve güvenlik duvarı yönetimi tamamen size aittir. Verileriniz başka bir tarafça şifresi çözülmeden iletilir. Bu yöntem daha fazla bileşen gerektirir ve ağ kesintilerinden sonra ayakta kalabilmesi için Restart=always içeren bir systemd ünitesine veya autossh aracına ihtiyaç duyar. CGNAT için ters SSH tüneli kurulum rehberi, bu yapının nasıl oluşturulacağını adım adım açıklar.
Tailscale Funnel, bu seçenekler arasında en yakın karşılaştırmadır. Aynı şekilde yalnızca dışa dönük çalışır ve TLS sonlandırma işlemi kendi makinenizde gerçekleşir; bu sayede Tailscale röleleri düz metin verinizi asla görmez. Bunun bedeli isimlendirme ve port kısıtlamalarıdır: Funnel yalnızca tailnet'inizin ts.net alan adı altındaki isimlere hizmet verir ve sadece 443, 8443 ve 10000 portlarını kullanır. Tailscale Serve ve Funnel arasındaki farklar, her iki tarafı da detaylandırır.
Bu nedenle, sizi kısıtlayan temel faktöre göre seçim yapın. Genel ağın kendi alan adınıza erişmesi gerekiyorsa ve trafiğin Cloudflare tarafından okunmasını kabul ediyorsanız Cloudflare Tunnel'ı seçin. Bir ts.net ana makine adı sizin için uygunsa ve düz metin verinizi bir proxy'ye teslim etmek istemiyorsanız Tailscale Funnel'ı tercih edin. Hali hazırda genel IP'li bir sunucunuz varsa ve veri yolunda hiçbir üçüncü tarafın bulunmasını istemiyorsanız ters SSH tünelini kullanın.
FAQ
Cloudflare Tunnel kullanırken 443 numaralı portu açık tutmam gerekir mi?
Hayır. cloudflared, Cloudflare'e 7844 numaralı port üzerinden dışa doğru bağlanır ve her istek bu bağlantı üzerinden geri gelir; dolayısıyla hiçbir gelen port kullanılmaz. Ancak tüneli kurmak, mevcut portlarınızı otomatik olarak kapatmaz. ufw içindeki 80 ve 443 numaralı portlara ait izin kurallarını silin, sağlayıcınızın ağ güvenlik duvarı üzerinden bu portları kapatın, uygulamayı 127.0.0.1 adresine bağlayın ve VPS IP adresinizi yayınlayan tüm eski A kayıtlarını silin. Durumu sunucu üzerinde sudo ss -lntp ile, farklı bir makineden ise nc -vz <your-ip> 443 ile doğrulayın.
Ana makine adım neden Cloudflare 1033 hatası veriyor?
1033 hatası, Cloudflare'in ilgili ana makine adı için DNS kaydına sahip olduğunu ancak isteği karşılayacak sağlıklı bir cloudflared bağlantısı bulamadığını gösterir. Süreç çalışmıyor olabilir veya çalışıyor olmasına rağmen Cloudflare'e ulaşamıyor olabilir. systemctl status cloudflared ve journalctl -u cloudflared -n 50 kayıtlarını kontrol edin; ardından 7844 numaralı dışa dönük portun hem UDP hem de TCP için izinli olduğundan emin olun. UDP ve QUIC trafiğini engelleyip TCP yedekleme bağlantısına izin vermeyen bir güvenlik duvarı tam olarak bu soruna yol açar. cloudflared tunnel info homelab, Cloudflare'in o an gördüğü bağlantıları listeler; listenin boş olması hatanın sizin tarafınızda olduğunu gösterir.
Tünel üzerinden neden 502 Bad Gateway hatası alıyorum?
502 hatası, cloudflared servisine ulaşıldığını ancak bu servisin yerel uygulamanıza erişemediğini gösterir; dolayısıyla hata Cloudflare'de değil, bu iki nokta arasındadır. Günlük kayıtlarını okuyun. dial tcp [::1]:8080: connect: connection refused, belirttiğiniz adreste dinleme yapan bir servis olmadığını gösterir. Bu mesajdaki [::1] ifadesi, genellikle uygulamanız yalnızca IPv4 üzerinden dinleme yaparken service: URL'sinde localhost yazdığınız anlamına gelir; bu durumda http://127.0.0.1:8080 yazmayı deneyin. HTTP/1.x transport connection broken: malformed HTTP response ise bunun tam tersi bir uyumsuzluktur: düz HTTP ile konuşan bir kaynağa https:// yazdığınızda oluşur.
Cloudflare Tunnel üzerinden SSH, RDP veya oyun sunucusu çalıştırabilir miyim?
Standart bir istemci ile hayır. Tünel üzerinden sağlanan genel bir ana makine adı HTTP, HTTPS ve WebSocket trafiğini taşır; bunlar tarayıcıların kullandığı protokollerdir. Diğer tüm TCP protokolleri için istemci makinede de yazılım bulunması gerekir; bunun için ya cloudflared access tcp ile yerel port yönlendirmesi yapmalı ya da WARP istemcisini kullanmalısınız. Herhangi bir kurulum yapmadan herhangi bir makineden SSH erişimi istiyorsanız, tünel doğru araç değildir. 22 numaralı portu açık tutun ve kaynak IP adresi ile kısıtlayın.
Cloudflare tünel üzerinden geçen trafiğimi görebilir mi?
Evet. Cloudflare, TLS sonlandırmasını kendi uç noktasında yapar, isteği orada şifresini çözerek okur ve sunucunuza giden tünel içine tekrar şifreleyerek gönderir. Bu şifre çözme işlemi, güvenlik duvarı, önbellekleme ve Access politikalarının çalışmasını sağlar; aynı zamanda düz metin halindeki verinizin onların makinelerinde bulunduğu anlamına gelir. Cloudflare proxy'sini kullandığınız sürece hiçbir yapılandırma bunu engelleyemez. Bu durum kabul edilemez ise Tailscale Funnel kullanın veya genel bir sunucu üzerinde kendi reverse proxy'nizi çalıştırın.