Išjunkite šaltinio NAT „Tailscale“ potinklio maršrutizatoriuje, ir tunelis veikia toliau, o jungtys per jį sustoja. Užklausos pasiekia paskirties vietą su nuotolinio kliento overlay adresu, o tai ir yra pakeitimo esmė, ir atsakymams dabar reikia kelio, kurio LAN neturėjo pažinti. Be to kelio paketai nusileidžia, atsakymai išeina per įprastą tinklų sietuvą, o gedimas atrodo kaip ugniasienės problema, kurios nepaaiškina nė viena ugniasienės taisyklė. Tunelis sveikas; grįžimo atkarpos trūksta.

Ką slėpė SNAT

Kai SNAT įjungtas, maršrutizatorius prieš persiųsdamas į potinklį perrašo šaltinio adresą savo LAN adresu, todėl paskirties vieta atsako hostui, kurį jau moka pasiekti, ir daugiau nieko nereikia konfigūruoti. Išjungus išsaugomas pradinis šaltinis, ir paskirties vieta tada mato adresą overlay diapazone, o ne kaimyną savo laide. Šis adresas yra tikras ir maršrutizuojamas visame tailnet tinkle, tačiau iš LAN per numatytąjį tinklų sietuvą jis nepasiekiamas. Dokumentuotas jungiklis yra --snat-subnet-routes=false, taikomas pačiam Linux potinklio maršrutizatoriui.

Tai nuolatinis nustatymas, o ne jungiklis kiekvienam paketui, todėl grįžimo kelias turi egzistuoti kiekvienam paskirties tinklui, kurį aptarnauja tas maršrutizatorius. Būtent todėl pakeitimas yra diegimo sprendimas, o ne žymimasis langelis. Viskas, ką aptarnauja tas maršrutizatorius, paveldi reikalavimą tuo pačiu metu.

Kur gali būti grįžimo kelias

Trys vietos yra įprastos, ir jos skiriasi aprėptimi, o ne teisingumu. Statinis maršrutas paskirties hoste yra tiesiausias ir mažiausiai plečiamas, nes kiekvienam įrenginiui reikia savo kopijos. Maršrutų lentelė VPC arba vietos maršrutizatoriuje apima visą tinklą iš karto, o DHCP parinktis su beklasiais statiniais maršrutais pasiekia klientus automatiškai, bet tyliai nepavyksta įrenginiuose, kurie ją ignoruoja.

ip route add 100.64.0.0/10 via 192.168.1.10
ip route get 100.64.0.5

Kad ir kurią vietą pasirinktumėte, kitas šuolis yra maršrutizatoriaus LAN adresas ir niekada jo tailnet adresas. LAN hostas negali pasiekti overlay, kol neturi šio maršruto, todėl kitas šuolis overlay viduje yra apvalus ir nesiunčia paketo niekur. Ši viena klaida paaiškina daugumą konfigūracijų, kurios atrodo teisingai ir vis tiek nepavyksta, ir ji išgyvena kiekvieną patikrą, kuri skaito tik paties maršrutizatoriaus lentelę. Užsirašykite, kurią vietą naudojote, nes kitaip kitas žmogus išbandys neteisingą.

Gedimo skaitymas kaip vienkrypčio srauto

Simptomą atpažinti lengviau nei priežastį: paslauga atsako pačiame maršrutizatoriuje ir tyli nuotolinio kliento atžvilgiu. Užfiksuota paskirties vieta rodo ateinančias užklausas ir išeinančius atsakymus, o tai atrodo kaip sėkmė, kol nepastebi, kur tie atsakymai keliauja. Jie eina į numatytąjį tinklų sietuvą, o tai reiškia, kad įeinanti atkarpa veikė, o grįžimo ne.

Užfiksuokite vietoj to maršrutizatoriuje, nes jis mato abi vieno apsikeitimo kryptis ir parodo, ar atsakymas apskritai atėjo. Jei atsakymas atsiranda paskirties vietoje, bet niekada maršrutizatoriuje, maršruto paskirties pusėje trūksta arba jis neteisingas. Jei jis atsiranda maršrutizatoriuje ir ten sustoja, problema yra toliau ir priklauso kitam tyrimui.

sudo tcpdump -ni any host 100.64.0.5
ip route get 100.64.0.5

Ar tikrasis adresas vertas maršruto

SNAT palikimas išlieka paprastesnis atsakymas, kai paskirties tinklo neįmanoma perkonfigūruoti, o kaina yra tai, kad kiekvienas klientas paskirties žurnaluose ir politikoje atrodo kaip maršrutizatorius. Jį išjungti pagrįsta, kai programai reikia tikrojo šaltinio adreso arba kai tinklo politika turi atskirti klientus, kurie dalijasi maršrutizatoriumi. Abi priežastys teisėtos ir nė viena nėra nemokama. Nauda turi būti verta maršruto palaikymo kiekviename paskirties tinkle ir toliau aprašytos ugniasienės peržiūros.

Vienam mažam LAN mainai paprastai atsiperka, o daugeliui įrenginių, kurie negali priimti statinio maršruto, paprastai neatsiperka. Užrašykite sprendimą ir priežastį prie maršrutizatoriaus konfigūracijos, kad kitas administratorius žinotų, kuri elgsena yra tyčinė. Numatytasis nustatymas, kurio niekas neužrašė, nesiskiria nuo aplaidumo.

Ugniasienė, žurnalai ir dvigubas vaidmuo

Kiekviena taisyklė, kuri atitikdavo maršrutizatoriaus LAN adresą, dabar atitinka kitą šaltinį, įskaitant leidimo taisykles ir bet kurį žurnalo lauką, kuris įrašydavo maršrutizatorių kaip klientą. Perskaitykite tas taisykles prieš pirmą bandymą, o ne po pirmos nesėkmės, nes taisyklė, leidžianti tik maršrutizatoriaus adresą, visiškai užblokuoja naują šaltinį. Susiaurinkite pakeitimą iki klientų ir prievadų, kuriems jo reikia, tada patvirtinkite, kad jis tyliai nepraleidžia viso tailnet tinklo.

sudo nft list ruleset | grep -n '100\.64'
sudo iptables-save | grep -n '100\.64'

Vienas mazgas, tarnaujantis ir kaip išėjimo mazgas, ir kaip potinklio maršrutizatorius, yra dokumentuotas derinys, galintis numesti aukštupio srautą, kai potinklio SNAT yra išjungtas. Šių vaidmenų atskyrimas skirtinguose mazguose pašalina šią išlygą ir suteikia kiekvienam maršrutui ir ugniasienės politikai vieną savininką. Jei vaidmenys turi likti kartu, tikėkitės tokios elgsenos ir išbandykite ją prieš kaltindami klientą. Laikykite maršrutą, jungiklio nustatymą ir vaidmenų priskyrimą vienoje pastaboje, nes jie skaitomi kartu, kai nepavyksta kitas ryšys.

Susiję straipsniai