Tailscale Serve ar Funnel: kas iš tikrųjų gali atidaryti nuorodą?
Serve bendrina paslaugą su jūsų tailnet, o Funnel ją atskleidžia atvirame internete. Palyginkite auditoriją, tapatybės antraštes ir prievadus, kuriuos leidžia Funnel.
Abi komandos publikuoja vietinę paslaugą per Tailscale HTTPS vardą, ir iš mašinos, kuri jas vykdo, jos atrodo beveik identiškos. Skirtumas yra tai, kas vėliau gali pasiekti URL, ir šis skirtumas nulemia, kokių kontrolių jūsų programai dar reikia. Serve laiko auditoriją tailnet viduje, o Funnel perkelia ją į atvirą internetą. Pirmiausia pasirinkite auditoriją, tada pasirinkite ją atitinkančią komandą.
Serve atsako į klausimą jūsų tailnet viduje
Serve proxy'ina vietinį prievadą arba teikia vietinį turinį jūsų tailnet įrenginiams, ir tailnet prieigos taisyklės vis dar taikomos kiekvienai užklausai. Prietaisų skydelis prievade 3000 tampa pasiekiamas HTTPS vardu, kurį gali išspręsti ir prie kurio gali prisijungti tik jūsų įrenginiai. Tai teisingas numatytasis nustatymas vidiniams įrankiams, nes auditorija jau autentifikuota tailnet, o jūs nepridedate viešo paviršiaus. URL atrodo kaip įprasta svetainė, ir būtent todėl žmonės ją tokią ir palaiko.
Serve taip pat gali pridėti tapatybės antraštes, aprašančias tailnet naudotoją, prie persiunčiamų užklausų. Jei jūsų programa pasitiki šiomis antraštėmis kaip autentifikavimu, pririškite backend prie localhost, kad niekas kitas negalėtų jo pasiekti tiesiogiai; backend, klausantis maršrutizuojamu adresu, gali gauti užklausas, kurios niekada neėjo per proxy.
Funnel pakeičia auditoriją į atvirą internetą
Funnel publikuoja pasirinktą paslaugą visiems, kas turi URL, o lankytojams nereikia kliento, paskyros ar narystės jūsų tailnet. Todėl ištekliui reikia autentifikavimo, spartos ribojimo ir pataisų, kurias taikytumėte bet kuriai viešai paslaugai. Viešos užklausos neperneša Serve tailnet tapatybės antraščių, todėl programa, kuri jomis rėmėsi, po Funnel neturi jokios naudotojo tapatybės. Kitokios publikavimo komandos pasirinkimas neatsako į autentifikavimo klausimą už jus.
Funnel taip pat turi apribojimų, kurių senesnės versijos vadovėlis gali nepaminėti. Jis užbaigia TLS sertifikatu, kurį Tailscale gauna vardui, ir palaiko tik tam tikrus klausymosi prievadus, kaip aprašo Funnel dokumentacija. Jei jūsų paslauga viename iš tų prievadų tikisi kito protokolo nei HTTPS, Funnel yra netinkamas įrankis, o ne konfigūracijos galvosūkis.
Režimą skaitykite iš kliento, o ne iš prievado
Prieš ką nors bendrindami patikrinkite dabartinę būseną, nes abu režimai gali būti sukonfigūruoti tam pačiam vietiniam prievadui skirtingu metu. Būsenos komandos praneša, kas iš tikrųjų publikuota ir kam. Nedarome išvados apie auditoriją iš to, kad URL atsako.
tailscale serve status
tailscale funnel status
tailscale status --json | head -40
Komandų sintaksė keitėsi tarp kliento versijų, todėl nukopijuotas iškvietimas gali pasirinkti kitą režimą nei numatėte. Teikite pirmenybę dokumentuotai formai jūsų vykdomai versijai ir skaitykite kliento išspausdintą patvirtinimą, o ne darykite prielaidas. Jei yra ir Serve, ir Funnel konfigūracija, atskleidimui svarbi yra viešoji. Iš naujo nustatykite konfigūraciją, kurios nenorėjote, o ne dėkite kitą ant viršaus.
Sustokite ir perskaitykite būseną iš naujo, jei išvestis neįvardija auditorijos. Publikuotas URL be nurodytos auditorijos yra spėjimas, o spėjimai yra kelias, kuriuo vidiniai prietaisų skydeliai patenka į atvirą internetą.
Testuokite su auditorija, kurią iš tikrųjų turėjote omenyje
Testuokite iš už tailnet ribų, o ne iš mašinos, kuri publikavo paslaugą. Užklausa iš tailnet įrenginio įrodo, kad proxy veikia, bet neįrodo, kad pašalinis asmuo yra atskirtas. Naudokite tinklą, kuriame nėra Tailscale kliento ir nėra maršruto į 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
Vidiniam prietaisų skydeliui išorinė užklausa turėtų nepavykti prisijungti arba nepavykti autorizuoti, o vidinė užklausa turėtų pavykti su tikėtina tapatybe. Viešai paslaugai išorinė užklausa turėtų pavykti, o programa turėtų paprašyti savo prisijungimo duomenų. Užsirašykite, kurį iš šių dviejų rezultatų pastebėjote, nes vien URL to nepasako. Jei rezultatas priešingas ketinimui, pirmiausia pašalinkite viešą konfigūraciją, o paskui tirkite.
Paslaugos publikavimas taip pat nėra tas pats sprendimas kaip išėjimo mazgo pasirinkimas, kuris kontroliuoja, kur išvyksta jūsų išeinantis srautas. Serve ir Funnel atsako, kas gali pasiekti tai, ką vykdote; išėjimo mazgas atsako, iš kur tarsi ateina jūsų pačių ryšiai. Laikykite šiuos du klausimus atskirai, ir palyginimas išlieka paprastas.