Tailscale Serve nasuprot Funnel: ko zapravo može otvoriti link?
Serve dijeli uslugu s vašim tailnetom, a Funnel je izlaže javnom internetu. Uporedite publiku, zaglavlja identiteta i portove koje Funnel dozvoljava.
Obje komande objavljuju lokalnu uslugu preko Tailscale HTTPS imena i s mašine koja ih pokreće izgledaju gotovo identično. Razlika je ko poslije toga može doći do URL-a, a ta razlika određuje koje kontrole vašoj aplikaciji još trebaju. Serve zadržava publiku unutar tailneta, a Funnel je premešta na javni internet. Prvo odaberite publiku, a zatim komandu koja joj odgovara.
Serve odgovara na pitanje unutar vašeg tailneta
Serve posreduje lokalni port ili poslužuje lokalni sadržaj uređajima na vašem tailnetu, a pravila pristupa tailneta i dalje važe za svaki zahtjev. Kontrolna tabla na portu 3000 postaje dostupna na HTTPS imenu koje samo vaši uređaji mogu razriješiti i s kojim se mogu povezati. To je ispravan zadani izbor za interne alate, jer je publika već autentifikovana kroz tailnet i ne dodajete javnu površinu. URL izgleda kao običan veb-sajt i upravo zato ga ljudi uzimaju za takav.
Serve takođe može dodavati zaglavlja identiteta koja opisuju korisnika tailneta zahtjevima koje prosljeđuje. Ako vaša aplikacija vjeruje tim zaglavljima kao autentifikaciji, vežite backend za localhost da ništa drugo ne može doći do njega direktno, jer backend koji sluša na adresi koja se može rutirati može primati zahtjeve koji nikada nisu prošli kroz proxy.
Funnel mijenja publiku u otvoreni internet
Funnel objavljuje odabranu uslugu svakome ko ima URL, a posjetiocima ne trebaju klijent, nalog ni članstvo u vašem tailnetu. Resursu su zato potrebni autentifikacija, ograničavanje brzine i ažuriranja koja biste primijenili na svaku javnu uslugu. Javni zahtjevi ne nose Serveova zaglavlja identiteta tailneta, pa aplikacija koja se na njih oslanjala pod Funnelom nema nikakav identitet korisnika. Odabir druge komande za objavljivanje ne rješava pitanje autentifikacije umjesto vas.
Funnel ima i ograničenja koja tutorijal iz starijeg izdanja možda ne spominje. Završava TLS certifikatom koji Tailscale pribavlja za ime i podržava samo određene portove za slušanje, kako opisuje Funnel dokumentacija. Ako vaša usluga očekuje protokol osim HTTPS-a na jednom od tih portova, Funnel je pogrešan alat, a ne zagonetka s konfiguracijom.
Čitajte režim iz klijenta, a ne iz porta
Provjerite trenutno stanje prije nego što bilo šta podijelite, jer se dva režima mogu konfigurisati za isti lokalni port u različito vrijeme. Statusne komande prijavljuju šta je zaista objavljeno i kome. Ne zaključujte o publici iz činjenice da URL odgovara.
tailscale serve status
tailscale funnel status
tailscale status --json | head -40
Sintaksa komandi se mijenjala kroz verzije klijenta, pa kopirani poziv može odabrati drugačiji režim od onog koji ste namjeravali. Preferirajte dokumentovani oblik za verziju koju pokrećete i čitajte potvrdu koju klijent ispiše umjesto da je pretpostavljate. Ako postoje i Serve i Funnel konfiguracija, javna je ona koja je važna za izlaganje. Resetujte konfiguraciju koju niste namjeravali umjesto da preko nje slažete još jednu.
Zaustavite se i ponovo pročitajte status ako izlaz ne imenuje publiku. Objavljeni URL bez navedene publike je nagađanje, a nagađanja su način na koji interne kontrolne table završe na javnom internetu.
Testirajte s publikom koju ste zaista namjeravali
Testirajte izvan tailneta, a ne s mašine koja je objavila uslugu. Zahtjev s uređaja na tailnetu dokazuje da proxy radi, ali ne dokazuje da je stranac isključen. Koristite mrežu bez Tailscale klijenta i bez rute u tailnet.
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
Za internu kontrolnu tablu vanjski zahtjev treba da ne uspije da se poveže ili da ne prođe autorizaciju, a unutrašnji zahtjev treba da uspije s identitetom koji očekujete. Za javnu uslugu vanjski zahtjev treba da uspije, a aplikacija treba da zatraži vlastite akreditive. Zapišite koji ste od ta dva ishoda primijetili, jer sam URL to ne govori. Ako je rezultat suprotan namjeri, prvo uklonite javnu konfiguraciju, a zatim istražite.
Objavljivanje usluge nije ista odluka kao odabir izlaznog čvora, koji kontroliše odakle izlazi vaš odlazni saobraćaj. Serve i Funnel odgovaraju ko može doći do nečega što pokrećete, a izlazni čvor odgovara odakle izgleda da dolaze vaše vlastite veze. Držite ta dva pitanja odvojeno i poređenje ostaje jednostavno.