Jednosmjerni saobraćaj nakon isključivanja Tailscale subnet SNAT-a
Isključite SNAT na Tailscale usmjerivaču podmreže i odgovori prestaju dolaziti. Prava izvorna adresa ostaje, pa je LAN-u potreban povratni put do 100.64.0.0/10.
Isključite izvorni NAT na Tailscale usmjerivaču podmreže i tunel nastavlja raditi dok veze kroz njega prestaju. Zahtjevi stižu na odredište s vlastitom overlay adresom udaljenog klijenta, što je upravo poanta promjene, i odgovori sada trebaju put koji LAN nikada nije morao poznavati. Bez tog puta paketi sliježu, odgovori izlaze kroz uobičajeni gateway, a kvar se predstavlja kao problem vatrozida koji nijedno pravilo vatrozida ne objašnjava. Tunel je zdrav; povratna dionica nedostaje.
Šta je SNAT skrivao
Uz uključen SNAT, usmjerivač prepisuje izvornu adresu na vlastitu LAN adresu prije prosljeđivanja u podmrežu, pa odredište odgovara hostu do kojeg već zna put i ništa drugo ne treba konfigurirati. Isključivanje čuva izvorni izvor, a odredište tada vidi adresu unutar overlay raspona, a ne susjeda na vlastitoj žici. Ta adresa je stvarna i usmjeriva putem tailneta, ali je s LAN-a kroz zadani gateway nedostupna. Dokumentirani prekidač je --snat-subnet-routes=false, primijenjen na sam Linux usmjerivač podmreže.
To je stalna postavka, a ne prekidač po paketu, pa povratni put mora postojati za svaku odredišnu mrežu koju taj usmjerivač opslužuje. To promjenu čini odlukom o postavljanju, a ne kvadratićem za potvrdu. Sve što taj usmjerivač opslužuje nasljeđuje zahtjev u istom trenutku.
Gdje povratni put može živjeti
Tri smještaja su uobičajena i razlikuju se po dosegu, a ne po ispravnosti. Statička ruta na odredišnom hostu najizravnija je i najmanje skalabilna, jer svaki uređaj treba vlastitu kopiju. Tablica ruta u VPC-u ili na usmjerivaču lokacije pokriva cijelu mrežu odjednom, a DHCP opcija s besklasnim statičkim rutama automatski stiže do klijenata, ali tiho zakaže na uređajima koji je ignoriraju.
ip route add 100.64.0.0/10 via 192.168.1.10
ip route get 100.64.0.5
Koji god smještaj odaberete, sljedeći hop je LAN adresa usmjerivača i nikada njegova tailnet adresa. LAN host ne može dosegnuti overlay dok ne ima ovu rutu, pa je sljedeći hop unutar overlaya cirkularan i ne šalje paket nikamo. Ta jedna greška objašnjava većinu konfiguracija koje izgledaju ispravno i ipak zakažu, i preživi svaku provjeru koja čita samo tablicu samog usmjerivača. Zapišite koji ste smještaj koristili, jer će inače sljedeća osoba testirati pogrešan.
Čitanje kvara kao jednosmjernog saobraćaja
Simptom je lakše prepoznati nego uzrok: usluga odgovara na samom usmjerivaču i šuti s udaljenog klijenta. Snimka na odredištu pokazuje zahtjeve koji dolaze i odgovore koji odlaze, što izgleda kao uspjeh dok ne primijetite kamo ti odgovori idu. Idem prema zadanom gatewayu, što znači da je dolazna dionica radila, a povratna nije.
Snimajte na usmjerivaču, jer on vidi oba smjera jedne razmjene i pokazuje je li odgovor ikada stigao. Ako se odgovor pojavi na odredištu, ali nikada na usmjerivaču, ruta nedostaje ili je pogrešna na strani odredišta. Ako se pojavi na usmjerivaču i tamo stane, problem je dalje i pripada drugoj istrazi.
sudo tcpdump -ni any host 100.64.0.5
ip route get 100.64.0.5
Vrijedi li stvarna adresa rute
Zadržavanje SNAT-a ostaje jednostavniji odgovor kad se odredišna mreža ne može ponovno konfigurirati, a cijena je da svaki klijent izgleda kao usmjerivač u zapisima i politici odredišta. Isključivanje je opravdano kad aplikacija treba stvarnu izvornu adresu ili kad mrežna politika mora razlikovati klijente koji dijele usmjerivač. Oba su legitimna razloga i nijedan nije besplatan. Korist mora biti vrijedna održavanja rute na svakoj odredišnoj mreži, plus pregleda vatrozida opisanog u nastavku.
Za jedan mali LAN razmjena se obično isplati, dok se za mnoštvo uređaja koji ne mogu primiti statičku rutu obično ne isplati. Zabilježite odluku i razlog uz konfiguraciju usmjerivača, da sljedeći administrator zna koje je ponašanje namjerno. Zadano ponašanje koje nitko nije zapisao ne razlikuje se od previda.
Vatrozid, zapisivanje i udvostručena uloga
Svako pravilo koje se poklapalo s LAN adresom usmjerivača sada se poklapa s drugim izvorom, uključujući pravila dopuštanja i svako polje zapisa koje je bilježilo usmjerivač kao klijenta. Pročitajte ta pravila prije prvog testa, a ne nakon prvog neuspjeha, jer pravilo koje dopušta samo adresu usmjerivača posve blokira novi izvor. Suzite zamjenu na klijente i portove kojima treba, zatim potvrdite da tiho ne propušta cijeli tailnet.
sudo nft list ruleset | grep -n '100\.64'
sudo iptables-save | grep -n '100\.64'
Jedan čvor koji služi i kao izlazni čvor i kao usmjerivač podmreže je dokumentirana kombinacija koja može odbaciti uzlazni promet nakon što se SNAT podmreže isključi. Razdvajanje tih uloga na različite čvorove uklanja tu napomenu i daje svakoj ruti i politici vatrozida jednog vlasnika. Ako uloge moraju ostati zajedno, očekujte takvo ponašanje i testirajte ga prije nego okrivite klijenta. Držite rutu, postavku prekidača i dodjelu uloga u jednoj bilješci, jer se čitaju zajedno kad sljedeća veza zakaže.