Tailscale Serve наспроти Funnel: кој навистина може да ја отвори врската?
Serve споделува услуга со вашиот tailnet, а Funnel ја изложува на отворениот интернет. Споредете ја публиката, заглавијата за идентитет и портите што ги дозволува Funnel.
Двете команди објавуваат локална услуга преку Tailscale HTTPS име и од машината што ги извршува изгледаат речиси идентично. Разликата е кој подоцна може да стигне до URL-то, и таа разлика одредува кои контроли се уште ѝ се потребни на вашата апликација. Serve ја држи публиката во tailnet, а Funnel ја преместува на отворениот интернет. Прво изберете ја публиката, потоа изберете ја командата што одговара на неа.
Serve одговара на прашање внатре во вашиот tailnet
Serve посредува локална порта или служи локална содржина на уредите во вашиот tailnet, и правилата за пристап на tailnet се уште важат за секое барање. Контролната табла на портата 3000 станува достапна на HTTPS име што само вашите уреди можат да го решат и да се поврзат со него. Ова е вистинската стандардна поставка за внатрешни алатки, бидејќи публиката веќе е автентицирана од tailnet и вие не додавате јавна површина. URL-то изгледа како обична веб-страница, и токму затоа луѓето го сметаат за такво.
Serve може да прикачи и заглавија за идентитет што го опишуваат корисникот на tailnet на барањата што ги препраќа. Ако вашата апликација им верува на тие заглавија како автентикација, врзете го backend-от за localhost за ништо друго да не може да стигне до него директно; backend што слуша на рутирачка адреса може да прими барања што никогаш не поминале низ посредникот.
Funnel ја менува публиката на отворениот интернет
Funnel објавува избрана услуга за секого што го има URL-то, а посетителите не им требаат клиентот, сметка или членство во вашиот tailnet. Затоа ресурсот бара автентикација, ограничување на брзината и закрпи што би ги примениле на која било јавна услуга. Јавните барања не ги носат заглавијата за идентитет на tailnet на Serve, па апликацијата што се потпирала на нив под Funnel воопшто нема идентитет на корисник. Изборот на друга команда за објавување не одговара на прашањето за автентикација наместо вас.
Funnel има и ограничувања што упатство од постара верзија можеби не ги споменува. Тој завршува TLS со сертификат што Tailscale го добива за името и поддржува само одредени порти за слушање, како што опишува документацијата на Funnel. Ако вашата услуга очекува протокол различен од HTTPS на една од тие порти, Funnel е погрешната алатка, а не загатка со конфигурација.
Читајте го режимот од клиентот, а не од портата
Проверете ја тековната состојба пред да споделите нешто, бидејќи двата режима можат да бидат конфигурирани за истата локална порта во различно време. Командите за состојба известуваат што е навистина објавено и за кого. Не заклучувајте за публиката од фактот што URL-то одговара.
tailscale serve status
tailscale funnel status
tailscale status --json | head -40
Синтаксата на командите се менувала меѓу верзиите на клиентот, па копиран повик може да избере друг режим од оној што сте го намеравале. Преферирајте ја документираната форма за верзијата што ја извршувате и читајте ја потврдата што ја печати клиентот наместо да ја претпоставувате. Ако постојат и Serve и Funnel конфигурација, јавната е таа што е важна за изложеноста. Ресетирајте ја конфигурацијата што не сте ја намеравале наместо да наредувате уште една врз неа.
Запрете и прочитајте ја состојбата повторно ако излезот не ја именува публиката. Објавено URL без наведена публика е претпоставка, а претпоставките се начинот на кој внатрешните контролни табли завршуваат на отворениот интернет.
Тестирајте со публиката што навистина сте ја намеравале
Тестирајте од надвор од tailnet, а не од машината што ја објавила услугата. Барање од уред во tailnet докажува дека посредникот работи, но не докажува дека странец е исклучен. Користете мрежа без клиент на Tailscale и без рута во 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
За внатрешна контролна табла надворешното барање треба да не успее да се поврзе или да не успее да авторизира, а внатрешното барање треба да успее со идентитетот што го очекувате. За јавна услуга надворешното барање треба да успее и апликацијата треба да ги побара сопствените акредитиви. Забележете кој од тие два исхода сте го набљудувале, бидејќи самото URL не ви го кажува. Ако резултатот е спротивен на намерата, прво отстранете ја јавната конфигурација, а потоа истражете.
Објавувањето услуга исто така не е истата одлука како избирање излезен јазол, кој контролира каде излегува вашиот излезен сообраќај. Serve и Funnel одговараат кој може да стигне до нешто што го извршувате, а излезниот јазол одговара од каде изгледа дека доаѓаат вашите сопствени врски. Држете ги двете прашања одвоени и споредбата останува едноставна.