Oba příkazy publikují místní službu přes jméno HTTPS od Tailscale a ze stroje, který je spouští, vypadají téměř stejně. Rozdíl je v tom, kdo se k URL potom dostane, a ten rozdíl určuje, které kontroly vaše aplikace ještě potřebuje. Serve drží publikum uvnitř tailnetu, Funnel ho přesouvá na veřejný internet. Nejprve zvolte publikum a potom příkaz, který k němu patří.

Serve odpovídá na otázku uvnitř vašeho tailnetu

Serve proxuje místní port nebo poskytuje místní obsah zařízením ve vašem tailnetu a přístupová pravidla tailnetu stále platí pro každý požadavek. Panel na portu 3000 je dostupný na jménu HTTPS, které dokážou přeložit a ke kterému se dokážou připojit jen vaše zařízení. To je správné výchozí nastavení pro interní nástroje, protože publikum už je ověřené tailnetem a vy nepřidáváte veřejnou plochu. URL vypadá jako běžný web, a právě proto si ho lidé pletou s webem.

Serve také může k předávaným požadavkům přikládat identitní hlavičky popisující uživatele tailnetu. Pokud vaše aplikace těmto hlavičkám důvěřuje jako ověření, připoutejte backend k localhostu, aby se k němu nic jiného nedostalo přímo; backend naslouchající na směrovatelné adrese může dostávat požadavky, které nikdy neprošly proxy.

Funnel mění publikum na otevřený internet

Funnel publikuje vybranou službu komukoli, kdo má URL, a návštěvníci nepotřebují klienta, účet ani členství ve vašem tailnetu. Prostředek proto potřebuje ověřování, omezování rychlosti a záplaty, které byste použili na jakoukoli veřejnou službu. Veřejné požadavky nenesou identitní hlavičky tailnetu od Serve, takže aplikace, která se na ně spoléhala, nemá pod Funnel žádnou identitu uživatele. Volba jiného publikačního příkazu za vás otázku ověřování nevyřeší.

Funnel má také omezení, která návod ze starší verze nemusí zmínit. Ukončuje TLS certifikátem, který Tailscale pro dané jméno získá, a podporuje jen určité porty pro naslouchání, jak popisuje dokumentace Funnel. Pokud vaše služba na jednom z těchto portů očekává jiný protokol než HTTPS, Funnel je špatný nástroj, nikoli hlavolam s konfigurací.

Režim čtěte z klienta, ne z portu

Než cokoli nasdílíte, zkontrolujte aktuální stav, protože oba režimy lze pro stejný místní port nakonfigurovat v různých časech. Stavové příkazy hlásí, co je skutečně publikované a komu. Neodvozujte publikum z toho, že URL odpovídá.

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

Syntaxe příkazů se mezi verzemi klienta měnila, takže zkopírované volání může zvolit jiný režim, než jste zamýšleli. Upřednostněte dokumentovanou podobu pro verzi, kterou používáte, a čtěte potvrzení, které klient vypíše, místo abyste ho předpokládali. Pokud existuje konfigurace Serve i Funnel, pro vystavení je důležitá ta veřejná. Resetujte konfiguraci, kterou jste nemysleli, místo abyste na ni vrstvili další.

Zastavte se a přečtěte stav znovu, pokud výstup nepojmenuje publikum. Publikovaná URL bez uvedeného publika je dohad a dohady jsou způsob, jakým se interní panely ocitnou na veřejném internetu.

Testujte s publikem, které jste skutečně zamýšleli

Testujte zvenčí tailnetu, ne ze stroje, který službu publikoval. Požadavek ze zařízení v tailnetu dokazuje, že proxy funguje; nedokazuje, že je cizinec vyloučen. Použijte síť, která nemá klienta Tailscale ani cestu 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

U interního panelu by vnější požadavek měl selhat při připojení nebo selhat při autorizaci a vnitřní požadavek by měl uspět s identitou, kterou očekáváte. U veřejné služby by vnější požadavek měl uspět a aplikace by si měla vyžádat vlastní přihlašovací údaje. Zapište si, který z těchto dvou výsledků jste pozorovali, protože samotná URL vám to neřekne. Pokud je výsledek opakem záměru, nejprve odstraňte veřejnou konfiguraci a potom to zkoumejte.

Publikování služby také není stejné rozhodnutí jako volba výstupního uzlu, který řídí, kudy odchází váš odchozí provoz. Serve a Funnel odpovídají na to, kdo se dostane k něčemu, co provozujete; výstupní uzel odpovídá na to, odkud vypadají vaše vlastní spojení. Držte obě otázky oddělené a srovnání zůstane jednoduché.

Související články