Jednosmerná premávka po vypnutí SNAT podsiete Tailscale
Vypnite SNAT na smerovači podsiete Tailscale a odpovede prestanú prichádzať. Skutočná zdrojová adresa zostáva, takže LAN potrebuje spätnú trasu do 100.64.0.0/10.
Vypnite zdrojový NAT na smerovači podsiete Tailscale a tunel funguje ďalej, kým spojenia cez neho prestanú. Požiadavky dorazia do cieľa s vlastnou overlay adresou vzdialeného klienta, čo je presne zmyslom zmeny, a odpovede teraz potrebujú cestu, ktorú LAN nikdy nemusela poznať. Bez tej cesty pakety pristanú, odpovede odídu cez bežnú bránu a porucha sa javí ako problém firewallu, ktorý žiadne pravidlo nevysvetľuje. Tunel je zdravý; spätná vetva chýba.
Čo SNAT skrýval
Pri zapnutom SNAT smerovač prepíše zdrojovú adresu na svoju vlastnú LAN adresu pred odoslaním do podsiete, takže cieľ odpovedá hostiteľovi, ku ktorému už vie, ako sa dostať, a nič ďalšie netreba konfigurovať. Vypnutie zachová pôvodný zdroj a cieľ potom vidí adresu v rozsahu overlaye, nie suseda na vlastnom drôte. Táto adresa je skutočná a smerovateľná v rámci tailnetu, ale z LAN cez predvolenú bránu je nedostupná. Dokumentovaný prepínač je --snat-subnet-routes=false, aplikovaný na samotný Linux smerovač podsiete.
Je to trvalé nastavenie, nie prepínač pre každý paket, takže spätná cesta musí existovať pre každú cieľovú sieť, ktorú tento smerovač obsluhuje. Práve preto je zmena rozhodnutím o nasadení, a nie zaškrtávacím políčkom. Všetko, čo tento smerovač obsluhuje, zdedí požiadavku v tom istom okamihu.
Kde môže spätná cesta žiť
Tri umiestnenia sú bežné a líšia sa dosahom, nie správnosťou. Statická trasa na cieľovom hostiteľovi je najpriamejšia a najmenej škálovateľná, pretože každé zariadenie potrebuje vlastnú kópiu. Smerovacia tabuľka vo VPC alebo na smerovači lokality pokrýva celú sieť naraz a voľba DHCP s beztriednymi statickými trasami sa dostane ku klientom automaticky, ale ticho zlyhá na zariadeniach, ktoré ju ignorujú.
ip route add 100.64.0.0/10 via 192.168.1.10
ip route get 100.64.0.5
Nech si vyberiete akékoľvek umiestnenie, ďalší hop je LAN adresa smerovača a nikdy nie jeho tailnet adresa. Hostiteľ v LAN sa k overlayu nedostane, kým nemá túto trasu, takže ďalší hop vnútri overlaye je kruhový a pošle paket nikam. Práve táto jediná chyba vysvetľuje väčšinu konfigurácií, ktoré vyzerajú správne a napriek tomu zlyhávajú, a prežije každú kontrolu, ktorá číta len tabuľku samotného smerovača. Zapíšte, ktoré umiestnenie ste použili, inak ďalší človek otestuje to nesprávne.
Čítanie poruchy ako jednosmernej premávky
Príznak sa rozpozná ľahšie ako príčina: služba odpovedá na samotnom smerovači a mlčí od vzdialeného klienta. Zachytenie na cieli ukazuje prichádzajúce požiadavky a odchádzajúce odpovede, čo vyzerá ako úspech, kým si nevšimnete, kam tie odpovede smerujú. Idú k predvolenej bráne, čo znamená, že prichádzajúca vetva fungovala a spätná nie.
Zachytávajte radšej na smerovači, pretože vidí oba smery jednej výmeny a ukáže, či odpoveď vôbec dorazila. Ak sa odpoveď objaví na cieli, ale nikdy na smerovači, trasa na strane cieľa chýba alebo je nesprávna. Ak sa objaví na smerovači a tam sa zastaví, problém je ďalej a patrí k inému vyšetrovaniu.
sudo tcpdump -ni any host 100.64.0.5
ip route get 100.64.0.5
Stojí skutočná adresa za trasu
Zachovanie SNAT zostáva jednoduchšou odpoveďou, kedykoľvek cieľovú sieť nemožno prekonfigurovať, a cenou je, že každý klient vyzerá v logoch a politike cieľa ako smerovač. Vypnutie je opodstatnené, keď aplikácia potrebuje skutočnú zdrojovú adresu alebo keď sieťová politika musí rozlišovať klientov, ktorí zdieľajú smerovač. Oba dôvody sú legitímne a ani jeden nie je zadarmo. Prínos musí stáť za udržiavaním trasy v každej cieľovej sieti plus za revíziou firewallu opísanou nižšie.
Pre jednu malú LAN sa výmena zvyčajne vyplatí, kým pre množstvo zariadení, ktoré nemôžu prijať statickú trasu, zvyčajne nie. Zapíšte rozhodnutie a dôvod vedľa konfigurácie smerovača, aby budúci správca vedel, ktoré správanie je zámerné. Predvolený stav, ktorý nikto nezapísal, nemožno rozlíšiť od opomenutia.
Firewall, protokolovanie a zdvojená rola
Každé pravidlo, ktoré zodpovedalo LAN adrese smerovača, teraz zodpovedá inému zdroju, vrátane pravidiel povolenia a každého poľa protokolu, ktoré zaznamenávalo smerovač ako klienta. Prečítajte si tieto pravidlá pred prvým testom, nie po prvom zlyhaní, pretože pravidlo povoľujúce len adresu smerovača nový zdroj úplne zablokuje. Zúžte náhradu na klientov a porty, ktoré ju potrebujú, a potom potvrďte, že ticho nepúšťa celý tailnet.
sudo nft list ruleset | grep -n '100\.64'
sudo iptables-save | grep -n '100\.64'
Jeden uzol slúžiaci zároveň ako výstupný uzol aj ako smerovač podsiete je dokumentovaná kombinácia, ktorá môže po vypnutí SNAT podsiete zahadzovať prevádzku smerom nahor. Rozdelenie týchto rolí na rôzne uzly odstráni túto výhradu a dá každej trase a politike firewallu jediného vlastníka. Ak role musia zostať spolu, očakávajte takéto správanie a otestujte ho, kým obviníte klienta. Držte trasu, nastavenie prepínača a pridelenie rolí v jednej poznámke, pretože sa čítajú spoločne, keď ďalšie spojenie zlyhá.