Tailscale serve ve funnel farkı nedir?
Tailscale serve sadece tailnet icinde HTTPS erisimi saglarken funnel ayni portu genel internete acar. Hangi komutu sececeginizi ve funnel icin gereken ACL ayarlarini ogrenin.
tailscale serve ve funnel: URL'ye kimler erişebilir
tailscale serve ile tailscale funnel arasındaki fark, erişim sağlayan kitle ile ilgilidir; başka hiçbir fark yoktur. serve, yerel bir port üzerinde HTTPS (hypertext transfer protocol secure) ön ucu oluşturur ve bunu yalnızca tailnet ağınızda yayınlar. funnel ise aynı yerel portu, Tailscale tarafından işletilen röle sunucuları aracılığıyla tüm genel internete açar. Her iki komut da aynı bayrakları ve hedefleri kabul eder. Özel bir panel ile dünyaya açık bir panel arasındaki fark tek bir kelimeden ibarettir.
Her iki komut da tarayıcıların halihazırda güvendiği, ts.net ile biten bir isim üzerinde sertifika sağlar ve hiçbirinde VPS güvenlik duvarınızda gelen bir portun açılmasına gerek yoktur. tailscaled daemon süreciniz zaten tailnet ağına giden bir bağlantıyı açık tuttuğu için trafik bu kanal üzerinden ulaşır. Bir sunucuyu tailnet ağına dahil etmek ayrı bir işlemdir; bir VPS'i Tailscale çıkış düğümü olarak çalıştırmak veya özel bir ağ için subnet router duyurusu yapmak bu konuyu kapsar. Halihazırda tailnet üzerinde olan bir servisi yayınlamak ise bu işlemin konusudur.
Komutların çalışması için gerekenler
- VPS üzerinde Tailscale 1.38.3 veya daha yeni bir sürüm yüklü olmalı ve tailnet oturumu açılmış olmalıdır. Durumu
tailscale versionvetailscale statusile kontrol edin. - MagicDNS etkinleştirilmiş olmalıdır. MagicDNS, Tailscale'in yerleşik DNS (alan adı sistemi) çözümleyicisidir ve makineye yalnızca bir
100.xadresi yerineblog-vps.your-tailnet.ts.netgibi bir isim atar. - Yönetim konsolunun DNS sayfasında tailnet için HTTPS sertifikaları etkinleştirilmiş olmalıdır. Bu özellik olmadan, portunuzun önüne koyabileceğiniz bir sertifika oluşmaz.
- Yalnızca
funneliçin, tailnet politika dosyasındafunneldüğüm özniteliği tanımlanmalıdır. İlk denemelerin çoğu bu adımda takılır; bu konu aşağıda açıklanmıştır.
Buradaki her komut sudo ile başlar, çünkü CLI, tailscaled ile yalnızca root kullanıcısının yazma yetkisine sahip olduğu bir soket üzerinden iletişim kurar. Bir kullanıcıya bu kısıtlamayı atlama yetkisi vermek için:
sudo tailscale set --operator=$USERTailscale serve ile tailnet ağınızda yayın yapın
serve komutunu yerel bir porta yönlendirdiğinizde, geri kalan işlemleri sistem otomatik olarak gerçekleştirir.
sudo tailscale serve 3000Available within your tailnet:
https://amelie-workstation.pango-lin.ts.net
|-- / proxy http://127.0.0.1:3000
Press Ctrl+C to exit.Yalın 3000 kullanımı, http://127.0.0.1:3000 için bir kısayoldur. Tailscale, makinenin tailnet adresi üzerindeki 443 numaralı portu dinler, ts.net sertifikası ile TLS (transport layer security) sonlandırmasını yapar ve düz HTTP trafiğini yerel portunuza iletir. Uygulamanızın bir sertifikanın varlığından haberdar olması gerekmez; normalde düz HTTP üzerinde bırakacağınız bir yönetim paneli için bu yöntemin tercih edilmesinin temel nedeni budur.
Şimdi son satırı inceleyin: Press Ctrl+C to exit. Komut ön planda çalışır ve eşleme işlemi bu sürecin içinde yaşar. Terminali kapattığınızda URL çalışmayı durdurur, çünkü diske herhangi bir veri yazılmamıştır. --bg bayrağını eklediğinizde ise eşleme, düğümün serve yapılandırmasına kaydedilir; böylece hem terminal oturumundan hem de yeniden başlatmalardan sonra varlığını korur.
sudo tailscale serve --bg 3000Serve komutu sadece bir port numarasından fazlasını kabul eder. --set-path, bir servisi alt dizin altında bağlar; böylece birden fazla uygulama aynı ana bilgisayar adını (hostname) paylaşabilir:
sudo tailscale serve --bg --set-path=/grafana 3000
sudo tailscale serve --bg --set-path=/metrics 9090Hedef olarak statik dosyaların bulunduğu bir dizin veya halihazırda TLS ile konuşan ancak sertifikasının denetlenmesini istemediğiniz bir arka uç (backend) da tanımlanabilir:
sudo tailscale serve --bg /srv/reports
sudo tailscale serve --bg https+insecure://localhost:8443Bu özellik sadece HTTP ile sınırlı değildir. --tcp=<port>, ham bir TCP (transmission control protocol) akışını iletir; --tls-terminated-tcp=<port> ise TLS sonlandırmasını düğümünüzde yapar ve düz metni iletir. Bu sayede, HTTP protokolünü hiç desteklemeyen bir servisin önüne güvenilir bir sertifika yerleştirilmiş olur:
sudo tailscale serve --bg --tls-terminated-tcp=443 tcp://127.0.0.1:9899Funnel neden düğüm özniteliğinin ayarlanmadığını söylüyor?
Funnel, varsayılan olarak tüm tailnet genelinde kapalıdır. İlk çalıştırmada bu uyarı görüntülenir ve işlem durdurulur:
Funnel not available; "funnel" node attribute not set. See https://tailscale.com/kb/1223/tailscale-funnel/.Komut doğruydu. Tailnet politikası bu düğüme yayın yapma izni vermediği için istemci, bir relay ile iletişime geçmeden önce işlemi reddeder. Yönetim konsolunda Access Controls altında bulunan tailnet politika dosyasını düzenleyin ve şu özniteliği ekleyin:
"nodeAttrs": [
{
"target": ["autogroup:member"],
"attr": ["funnel"],
},
],autogroup:member ifadesi, bu izni tailnet'teki her üyeye tanımlar. Eğer sadece tek bir makinenin yayın yapması gerekiyorsa, o makineyi etiketleyin ve hedef olarak etiketi kullanın; örneğin tag:public. Politikayı kaydedin ve ardından funnel komutunu tekrar çalıştırın.
Hesabınız bir tailnet yöneticisi ise, güncel istemciler bir kısayol sunar: CLI, login.tailscale.com üzerinde bir onay URL'si yazdırır; bu bağlantıyı takip etmek HTTPS sertifikalarını etkinleştirir ve özniteliği sizin yerinize ekler. Yönetici değilseniz, bu URL size yardımcı olmayacaktır. Politika erişimi olan birinin düzenlemeyi yapması gerekir.
Tailscale Funnel ile internete yayınlama
Öznitelik ayarlandıktan sonra, komut zaten bildiğiniz komutun farklı bir fiil ile kullanılmış halidir.
sudo tailscale funnel --bg 3000Available on the internet:
https://amelie-workstation.pango-lin.ts.net
|-- / proxy http://127.0.0.1:3000
Press Ctrl+C to exit.Her seferinde o ilk satırı okuyun. Available within your tailnet ve Available on the internet, özel bir servis ile herkese açık bir servis arasındaki tek görünür farktır ve bunları üreten komutlar tek bir kelime ile birbirinden ayrılır.
Ağustos 2026 itibarıyla funnel yalnızca 443, 8443 veya 10000 numaralı portları dinler, başka hiçbir portu dinlemez. Varsayılan port 443'tür; --https=8443 veya --https=10000 ise alternatiflerdir. Funnel aktarıcıları bağlantıları yalnızca bu portlar üzerinden kabul ettiği için diğer tüm portlar reddedilir. Bu nedenle bir funnel URL'si her zaman ya doğrudan ana bilgisayar adından ya da sonuna :8443 eklenmiş ana bilgisayar adından oluşur.
Şu anda nelerin yayınlandığını nasıl görebilirim?
Tahmin yürütmek, bir panelin bir ay boyunca herkese açık kalmasına neden olur. Bunun yerine düğüme (node) sorun.
tailscale serve status
tailscale funnel status
tailscale serve status --jsonHer iki durum komutu da aynı yapılandırmayı okur, bu nedenle her ikisi de size genel tabloyu gösterir. Bir betik veya zamanlanmış kontrol içerisinde --json biçimini kullanın, çünkü düz metin çıktısı insanlar tarafından okunmak üzere tasarlanmıştır. Hiçbir şey yapılandırılmadığında tek bir satır alırsınız:
No serve configÇalıştığından emin olduğunuz bir kurulumdan sonra bunu görmek, eşlemenin ön planda oluşturulduğu ve sürecin sonlandığı anlamına gelir. --bg ile yeniden oluşturun.
Tek bir eşlemeyi kaldırmak için, onu oluşturan komutu tekrarlayın ve sonuna off ekleyin. Düğüm üzerindeki tüm serve ve funnel eşlemelerini silmek için reset kullanın.
sudo tailscale funnel --https=443 3000 off
sudo tailscale serve resetHer iki işlemden sonra da tailscale serve status komutunu tekrar çalıştırın ve ne yapmasını istediğinizi varsaymak yerine, geriye ne kaldığını okuyun.
Elde ettikleriniz ve vazgeçtikleriniz
Elde edilen kazanımlar gerçektir ve insanların bunu bir reverse proxy yerine tercih etme nedenidir.
- Tarayıcıların güvendiği ve sizin yerinize yenilenen bir sertifika. Kurulacak bir ACME (otomatik sertifika yönetim ortamı) istemcisi veya unutulacak bir yenileme görevi yoktur.
- VPS güvenlik duvarında gelen trafiğe açık bir port gerekmez.
tailscaleddışarıya doğru bağlantı kurar, bu sayede VPS üzerindeki varsayılan olarak reddeden ufw güvenlik duvarı tam olarak olduğu gibi sıkı tutulabilir. - Satın alınacak, yönlendirilecek veya beklenilecek bir DNS kaydı yoktur.
- Genel IP adresine sahip bir VPS yerine NAT (ağ adresi çevirisi) arkasındaki bir makinede tüm hikaye olan port yönlendirme ihtiyacı yoktur.
Maliyetler de aynı derecede gerçektir ve funnel bunların tamamını beraberinde getirir.
- Alan adı size ait değildir. Genel ziyaretçiler
host.your-tailnet.ts.netadresini görür. Funnel özel alan adı desteğine sahip değildir, bu nedenle önüneapp.example.comkoyamazsınız. - Yol size ait değildir. Trafik önce bir Tailscale aktarıcısına (relay) ulaşır ve aktarıcı, akışı tailnet üzerinden düğümünüze proxy eder. Tailscale, funnel trafiğinin yayınlanmayan ve yapılandırılamayan bant genişliği sınırlarına tabi olduğunu belirtir; bu nedenle bir sayıya güvenmeden önce kendi aktarım hızınızı ölçün.
- Kontroller eksiktir. Çalıştırdığınız bir reverse proxy size erişim günlükleri, hız sınırları, istek boyutu limitleri ve kimlik doğrulama ekleyebileceğiniz bir yer sağlar. Funnel size yalnızca bir URL verir. Diğer her şey uygulamanızın içinde yer almalıdır.
- Port listesi yukarıda belirtildiği gibi sabittir.
Her iki özellik de Tailscale tarafından işletilen altyapıya dayanır: ts.net adı için sertifika düzenleme ve funnel aktarıcılarının kendisi. Eğer kendi kendine barındırılan bir Headscale kontrol sunucusu kullanmayı düşünüyorsanız, her ikisinin de sizinle birlikte geleceğini varsaymayın. Çalıştırmayı planladığınız Headscale sürümünün sürüm notlarını kontrol edin.
Hangisini kullanmalıyım?
Kural kısadır.
Dahili olan her şey için serve kullanın: yönetici arayüzleri, paneller, indekslenmesini istemediğiniz bir metrik arayüzü veya bir sitenin hazırlık (staging) kopyası. Tailnet üyeliği erişim kontrolünü sağlar ve oldukça güvenlidir. Tailnet üzerinde olmayan bir cihaz, ilgili ismi çözümleyemez bile.
Demo bağlantısı, üçüncü tarafların POST isteği göndermesi gereken bir webhook alıcısı veya geliştirme aşamasındaki bir OAuth geri çağırması (callback) için funnel kullanın. Halka açık bir HTTPS URL'sine ulaşmanın en hızlı yolu budur ve tek bir off komutu ile sonlandırılabilir. Ancak halka açık olması, herkesin erişebileceği anlamına gelir: ana makine adı gizli değildir ve giriş ekranı olmayan bir uygulamanın önündeki funnel, herkese açık bir servistir. Arkasında ne çalışırsa çalışsın, açık bir Ollama API uç noktası için gereken özenle, kendi isteklerinin kimlik doğrulamasını kendisi yapmalıdır.
Üretim ortamı olarak adlandıracağınız her şey için gerçek bir reverse proxy kullanın. Kendi alan adınız, kendi sertifikanız, kendi günlük kayıtlarınız, kendi hız sınırlamalarınız olsun ve istek yolunda başka kimse bulunmasın. Reverse proxy olarak nginx, Caddy ve Traefik karşılaştırması, birini seçme konusunda yol gösterir.
Hata modları ve karşılaşacağınız dizgeler
Funnel başlatılamıyor. Funnel not available; "funnel" node attribute not set. bir komut sorunu değil, bir politika sorunudur. Tailnet politika dosyasına funnel özniteliğini ekleyin, kaydedin ve tekrar deneyin.
Çalışıyordu, ancak şimdi tailscale serve status komutu No serve config hatasını veriyor. Eşleme ön planda oluşturulmuş ve o süreç sonlanmış. Aynı komutu --bg ile tekrar çalıştırın.
İsim çözümleniyor ancak yanıt veren yok. Serve, belirttiğiniz hedefe proxy yapar; dolayısıyla orada dinleme yapan bir servis yoksa proxy yapılacak bir yer de yoktur. tailscaled çalıştıran makinede ss -ltnp | grep 3000 ile bunu doğrulayın. Sık karşılaşılan bir neden, bir container'ın portunu 127.0.0.1 yerine bir Docker bridge adresi üzerinde yayınlamasıdır; bu durumda ana makine beklediğiniz yerde bir dinleyici görmez. Docker Compose ağ yapısı nasıl çalışır belgesi, yayınlanan bir portun gerçekte nereye ulaştığını gösterir.
ts.net ismi üzerinde sertifika hataları. HTTPS sertifikaları büyük olasılıkla tailnet için etkinleştirilmemiştir. Bunları yönetim konsolundan açın, ardından sertifika adımını kendi başına çalıştırın; böylece hatalar serve çıktısıyla birbirine karışmaz:
sudo tailscale cert your-host.your-tailnet.ts.netFunnel mobil veride yükleniyor ancak dizüstü bilgisayarınızdan farklı davranıyor. Dizüstü bilgisayarınız tailnet üzerinde olduğu için MagicDNS ismi 100.x adresine çözümler ve servise bir röle kullanmadan doğrudan ulaşırsınız. Bu doğru bir davranıştır ve dizüstü bilgisayarınızın genel erişilebilirliği test edemeyeceği anlamına gelir. Tailnet üzerinde olmayan bir makineden curl kullanın.
FAQ
tailscale serve ve tailscale funnel arasındaki fark nedir?
Sonuca kimin erişebileceği farkıdır. tailscale serve, yerel bir portu yalnızca tailnet ağınızdaki cihazların erişebileceği bir HTTPS URL'sinde yayınlar. tailscale funnel ise aynı portu, Tailscale tarafından işletilen röle sunucuları üzerinden yönlendirerek internetteki herkesin erişebileceği bir URL'de yayınlar. Kullanılan flag'ler ve hedefler her ikisi için de ortaktır. İlk çıktı satırı size hangisini elde ettiğinizi söyler: Available within your tailnet veya Available on the internet.
tailscale funnel neden düğüm özniteliğinin ayarlanmadığını söylüyor?
Çünkü funnel, birisi etkinleştirene kadar tailnet üzerinde devre dışıdır. Mesaj Funnel not available; "funnel" node attribute not set. şeklindedir ve herhangi bir röle ile iletişime geçilmeden önce doğrudan kendi istemcinizden gelir. Erişim Kontrolleri altındaki tailnet politika dosyasına, autogroup:member adresine veya yalnızca tek bir makinenin yayın yapması gerekiyorsa bir etikete funnel özniteliğini veren bir nodeAttrs girdisi ekleyin. Bir tailnet yöneticisi, bunun yerine CLI tarafından yazdırılan onay URL'sini takip edebilir.
Tailscale Funnel hangi portları kullanabilir?
Yalnızca 443, 8443 ve 10000. Varsayılan port 443'tür; diğerlerini --https=8443 veya --https=10000 ile seçebilirsiniz. Bu, sunucunuzun değil, funnel rölelerinin bir sınırlamasıdır; dolayısıyla VPS üzerinde yapılacak hiçbir güvenlik duvarı veya yapılandırma değişikliği bu sınırı kaldırmaz. tailscale serve, tailnet ağınızın dışına asla çıkmadığı için böyle bir kısıtlamaya sahip değildir.
Bir serve veya funnel URL'si yeniden başlatmadan sonra kalıcı olur mu?
Yalnızca --bg kullandıysanız kalıcı olur. Bu flag olmadan komut ön planda çalışır, Press Ctrl+C to exit. çıktısını verir ve süreçle birlikte eşleme de kaybolur. --bg ile eşleme, düğümün serve yapılandırmasına yazılır ve yeniden başlatma sonrasında tailscaled ile geri gelir. Hiçbir şey ayarlanmadığında No serve config çıktısını veren tailscale serve status komutu ile durumu kontrol edebilirsiniz.
Bir funnel'ı çalışır durumda bırakmak güvenli midir?
Taşıma katmanı anlamında güvenlidir: bağlantı HTTPS'dir ve güvenlik duvarınızda hiçbir port açık değildir. İnsanların genellikle kastettiği anlamda ise güvenli değildir; çünkü URL herkese açıktır, dolayısıyla arkasındaki uygulama da herkese açıktır. Bir funnel'ı yalnızca kendi isteklerini doğrulayan bir uygulamanın önünde tutun ve demo veya webhook testi bittiğinde, oluştururken kullandığınız komutun sonuna off ekleyerek kapatın.
Yukarıdaki komut davranışlarının kaynakları: Tailscale Serve ve Funnel belgeleri ile tailscale.com/docs adresindeki CLI referansı.