Her iki komut da yerel bir hizmeti bir Tailscale HTTPS adı üzerinden yayımlar ve onları çalıştıran makineden neredeyse aynı görünürler. Fark, URL'ye daha sonra kimin ulaşabileceğidir ve bu fark uygulamanızın hâlâ hangi kontrollere ihtiyaç duyduğunu belirler. Serve izleyiciyi tailnet'in içinde tutar, Funnel ise onu açık internete taşır. Önce izleyiciyi seçin, sonra ona uyan komutu seçin.

Serve tailnet'inizin içindeki bir soruyu yanıtlar

Serve yerel bir bağlantı noktasına vekillik eder veya tailnet'inizdeki cihazlara yerel içerik sunar ve tailnet'in erişim kuralları her istek için geçerli olmaya devam eder. 3000 numaralı bağlantı noktasındaki bir gösterge paneli, yalnızca cihazlarınızın çözebileceği ve bağlanabileceği bir HTTPS adında erişilebilir hâle gelir. Bu, iç araçlar için doğru varsayılandır, çünkü izleyici zaten tailnet tarafından kimliği doğrulanmıştır ve siz genel bir yüzey eklemezsiniz. URL sıradan bir web sitesi gibi görünür ve insanların onu öyle sanmasının nedeni tam olarak budur.

Serve ayrıca ilettiği isteklere tailnet kullanıcısını tanımlayan kimlik başlıkları ekleyebilir. Uygulamanız bu başlıklara kimlik doğrulama olarak güveniyorsa, arka ucu localhost'a bağlayın ki başka hiçbir şey doğrudan ona ulaşamasın; yönlendirilebilir bir adreste dinleyen bir arka uç, vekilden hiç geçmemiş istekler alabilir.

Funnel izleyiciyi açık internete dönüştürür

Funnel seçilen hizmeti URL'ye sahip herkese yayımlar ve ziyaretçilerin istemciye, bir hesaba veya tailnet'inize üyeliğe ihtiyacı yoktur. Bu nedenle kaynak, herhangi bir genel hizmete uygulayacağınız kimlik doğrulamaya, hız sınırlamasına ve yamalara ihtiyaç duyar. Genel istekler Serve'ün tailnet kimlik başlıklarını taşımaz, bu yüzden bunlara güvenen bir uygulamanın Funnel altında hiçbir kullanıcı kimliği yoktur. Farklı bir yayımlama komutu seçmek kimlik doğrulama sorusunu sizin yerinize yanıtlamaz.

Funnel'ın eski bir sürümden kalan öğreticinin değinmeyebileceği kısıtlamaları da vardır. TLS'yi ad için Tailscale'in aldığı bir sertifikayla sonlandırır ve yalnızca belirli dinleme bağlantı noktalarını destekler, Funnel belgelerinin açıkladığı gibi. Hizmetiniz bu bağlantı noktalarından birinde HTTPS dışında bir protokol bekliyorsa, Funnel bir yapılandırma bulmacası değil, yanlış araçtır.

Modu bağlantı noktasından değil, istemciden okuyun

Bir şey paylaşmadan önce mevcut durumu kontrol edin, çünkü iki mod aynı yerel bağlantı noktası için farklı zamanlarda yapılandırılmış olabilir. Durum komutları gerçekte neyin ve kimin için yayımlandığını bildirir. URL yanıt veriyor diye izleyici hakkında çıkarım yapmayın.

tailscale serve status
tailscale funnel status
tailscale status --json | head -40

Komut sözdizimi istemci sürümleri arasında değişti, bu yüzden kopyalanan bir çağrı amaçladığınızdan farklı bir mod seçebilir. Çalıştırdığınız sürüm için belgelenmiş biçimi tercih edin ve varsaymak yerine istemcinin yazdırdığı onayı okuyun. Hem Serve hem de Funnel yapılandırması varsa, açığa çıkarma açısından önemli olan genel olandır. Amaçlamadığınız yapılandırmayı üstüne bir tane daha eklemek yerine sıfırlayın.

Çıktı izleyiciyi adlandırmıyorsa durun ve durumu yeniden okuyun. Belirtilen bir izleyici olmadan yayımlanan URL bir tahmindir ve tahminler, iç gösterge panellerinin açık internete nasıl düştüğünün yoludur.

Gerçekten amaçladığınız izleyiciyle test edin

Hizmeti yayımlayan makineden değil, tailnet'in dışından test edin. Tailnet'teki bir cihazdan gelen istek vekilin çalıştığını kanıtlar; bir yabancının dışlandığını kanıtlamaz. Tailscale istemcisi olmayan ve tailnet'e rotası olmayan bir ağ kullanın.

curl -sI https://host.tailnet-name.ts.net
curl -sI https://host.tailnet-name.ts.net --resolve host.tailnet-name.ts.net:443:203.0.113.10

Dahili bir gösterge paneli için dış istek bağlanamaz veya yetkilendiremez olmalı, iç istek ise beklediğiniz kimlikle başarılı olmalıdır. Genel bir hizmet için dış istek başarılı olmalı ve uygulama kendi kimlik bilgilerini istemelidir. Bu iki sonuçtan hangisini gözlemlediğinizi not edin, çünkü URL tek başına bunu söylemez. Sonuç amacın tersiyse, önce genel yapılandırmayı kaldırın ve sonra inceleyin.

Bir hizmeti yayımlamak, giden trafiğinizin nereden çıktığını kontrol eden bir çıkış düğümü seçmekle aynı karar değildir. Serve ve Funnel çalıştırdığınız bir şeye kimin ulaşabileceğini yanıtlar; çıkış düğümü kendi bağlantılarınızın nereden geliyor göründüğünü yanıtlar. İki soruyu ayrı tutun, karşılaştırma basit kalır.

İlgili makaleler