Tailscale Serve alebo Funnel: kto naozaj môže otvoriť odkaz?
Serve zdieľa službu s vaším tailnetom, kým Funnel ju vystavuje otvorenému internetu. Porovnajte publikum, identitné hlavičky a porty, ktoré Funnel povoľuje.
Oba príkazy publikujú lokálnu službu cez HTTPS meno Tailscale a zo stroja, ktorý ich spúšťa, vyzerajú takmer identicky. Rozdiel je v tom, kto sa potom dostane k URL, a tento rozdiel určuje, ktoré kontroly vaša aplikácia ešte potrebuje. Serve drží publikum vnútri tailnetu, Funnel ho presúva na otvorený internet. Najprv vyberte publikum a potom príkaz, ktorý k nemu patrí.
Serve odpovedá na otázku vnútri vášho tailnetu
Serve proxuje lokálny port alebo poskytuje lokálny obsah zariadeniam vo vašom tailnete a pravidlá prístupu tailnetu stále platia pre každú požiadavku. Panel na porte 3000 sa stane dostupným na HTTPS mene, ktoré dokážu rozlíšiť a ku ktorému sa dokážu pripojiť len vaše zariadenia. To je správne predvolené nastavenie pre interné nástroje, pretože publikum už je overené tailnetom a vy nepridávate verejnú plochu. URL vyzerá ako bežná webová stránka, a práve preto si ju ľudia mýlia s obyčajnou stránkou.
Serve môže k preposielaným požiadavkám pripájať aj identitné hlavičky opisujúce používateľa tailnetu. Ak vaša aplikácia týmto hlavičkám dôveruje ako overeniu, pripnite backend k localhostu, aby sa k nemu nič iné nedostalo priamo; backend počúvajúci na smerovateľnej adrese môže dostávať požiadavky, ktoré nikdy neprešli cez proxy.
Funnel mení publikum na otvorený internet
Funnel publikuje vybranú službu každému, kto má URL, a návštevníci nepotrebujú klienta, účet ani členstvo vo vašom tailnete. Prostriedok preto potrebuje overovanie, obmedzovanie rýchlosti a záplaty, ktoré by ste použili na akúkoľvek verejnú službu. Verejné požiadavky nenesú identitné hlavičky tailnetu od Serve, takže aplikácia, ktorá sa na ne spoliehala, nemá pod Funnel žiadnu identitu používateľa. Voľba iného publikačného príkazu za vás otázku overovania nevyrieši.
Funnel má aj obmedzenia, ktoré návod zo staršej verzie nemusí spomenúť. Ukončuje TLS certifikátom, ktorý Tailscale získa pre dané meno, a podporuje len určité porty na počúvanie, ako opisuje dokumentácia Funnel. Ak vaša služba na jednom z týchto portov očakáva iný protokol než HTTPS, Funnel je nesprávny nástroj, nie hlavolam s konfiguráciou.
Režim čítajte z klienta, nie z portu
Pred zdieľaním čohokoľvek skontrolujte aktuálny stav, pretože oba režimy možno nakonfigurovať pre ten istý lokálny port v rôznych časoch. Stavové príkazy hlásia, čo je skutočne publikované a komu. Neodvodzujte publikum z toho, že URL odpovedá.
tailscale serve status
tailscale funnel status
tailscale status --json | head -40
Syntax príkazov sa medzi verziami klienta menila, takže skopírované volanie môže zvoliť iný režim, než ste zamýšľali. Uprednostnite dokumentovanú formu pre verziu, ktorú spúšťate, a čítajte potvrdenie, ktoré klient vypíše, namiesto toho, aby ste ho predpokladali. Ak existuje konfigurácia Serve aj Funnel, pre vystavenie je dôležitá tá verejná. Resetujte konfiguráciu, ktorú ste nemysleli, namiesto vrstvenia ďalšej na ňu.
Zastavte sa a prečítajte stav znova, ak výstup nepomenuje publikum. Publikovaná URL bez uvedeného publika je dohad a dohady sú spôsob, akým sa interné panely ocitnú na otvorenom internete.
Testujte s publikom, ktoré ste skutočne zamýšľali
Testujte zvonku tailnetu, nie zo stroja, ktorý službu publikoval. Požiadavka zo zariadenia v tailnete dokazuje, že proxy funguje; nedokazuje, že je cudzinec vylúčený. Použite sieť bez klienta Tailscale a bez trasy do tailnetu.
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
Pre interný panel by vonkajšia požiadavka mala zlyhať pri pripojení alebo zlyhať pri autorizácii a vnútorná požiadavka by mala uspieť s identitou, ktorú očakávate. Pre verejnú službu by vonkajšia požiadavka mala uspieť a aplikácia by si mala vyžiadať vlastné prihlasovacie údaje. Zapíšte si, ktorý z týchto dvoch výsledkov ste pozorovali, pretože samotná URL vám to nepovie. Ak je výsledok opakom zámeru, najprv odstráňte verejnú konfiguráciu a potom to skúmajte.
Publikovanie služby tiež nie je rovnaké rozhodnutie ako výber výstupného uzla, ktorý riadi, kadiaľ odchádza vaša odchádzajúca prevádzka. Serve a Funnel odpovedajú, kto sa dostane k niečomu, čo prevádzkujete; výstupný uzol odpovedá, odkiaľ akoby prichádzajú vaše vlastné spojenia. Držte obe otázky oddelene a porovnanie zostane jednoduché.