Atsakymas išeina per LAN, o ne per tunelį: kodėl ir kaip
Užklausa, atėjusi per tunelį, nereiškia, kad atsakymas išeis tuo pačiu keliu. Linux ieško paskirties vietos, ir vietinis potinklis dažniausiai laimi.
Paslauga, paskelbta per šliuzą, veikia iš didžiosios interneto dalies ir nepavyksta iš vieno biuro. Kažkas patikrina tunelį, pamato atvykstančią užklausą ir daro išvadą, kad atsakymas turi grįžti tuo pačiu keliu. Linux taip neveikia, ir joks tunelio tyrimas atsakymo nepakeis. Atsakymas maršrutizuojamas pagal paskirties vietą, o tas vienas nepavykstantis skambintojas yra potinklyje, kurį hostas jau pasiekia tiesiogiai.
Kas iš tikrųjų nusprendžia dėl išeinančio paketo
Branduolys ieško maršruto paketo paskirties vietai, tikrindamas politikos taisykles prioriteto tvarka, o paskui lentelę, kurią parenka atitinkanti taisyklė. Sąsaja, kuria paketas atvyko, nevaidina jokio vaidmens, nebent taisyklė ar žymė buvo parašyta tam, kad tai būtų svarbu. Tai šio hosto maršrutizavimo faktas, o ne tunelio gedimas.
Todėl per tunelį gauta užklausa gali sukelti atsakymą, kuris išeina per fizinę sąsają, ir srautas tampa vienkryptis, nors joks įrenginys nepraneša apie klaidą. Prieš darydami išvadą apie tunelį, patikrinkite abi kryptis. Atsakymas, išėjęs ne ta kryptimi, dingsta iš tunelio skaitiklių, todėl abu galai nesutaria, ar kas nors buvo išsiųsta. Atkreipkite dėmesį, kuris skaitiklis pasikeitė, prieš liesdami taisyklę.
Kodėl laimi vietinis potinklis
Hostas, turintis adresą vietiniame tinkle, pagrindinėje lentelėje turi prijungtą maršrutą tam priešdėliui, o prijungtas maršrutas yra tiesioginis atitikimas. Kai skambintojas ateina iš to paties potinklio, paieška randa vietinę jungtį dar neapsvarsčius tunelio.
Būtent asimetrija apsunkina diagnostiką. Skambintojai iš platesnio interneto veikia, nes neatitinka jokio vietinio maršruto, o vienintelis skambintojas, bendrinantis biuro priešdėlį, nepavyksta, ir būtent su juo kas nors testuoja.
Lygiaverčių aprėptis nėra tas pats kaip įdiegti maršrutai
Tunelio pusėje lygiaverčio leidžiami diapazonai aprašo, ką galima siųsti į tunelį ir kokie šaltiniai iš jo priimami. Jie nieko nesako apie tai, kur vietinė maršrutizavimo lentelė nusiųs paketą.
Jei tunelio įrankis įdiegia hoste numatytąjį maršrutą, jis gali į tunelį įtraukti nesusijusį srautą kaip šalutinę žalą. Ten, kur sprendimą turėtų priimti politikos taisyklė, įrankio maršrutų diegimo parinktis egzistuoja būtent tam, kad to būtų išvengta, o adresai, raktai ir galinio taško nuostatos lieka tokie patys, kokie buvo. Dėl patogumo pridėtas numatytasis maršrutas yra įprastas būdas hostui prarasti savo vietinį tinklą.
Pasirinkite lentelę pagal šaltinio adresą
Šaltiniu pagrįsta taisyklė siunčia atsakymus iš paslaugos adreso į privačią lentelę, kurios numatytasis maršrutas yra tunelis, o visa kita toliau naudoja pagrindinę lentelę. Pasirinkite lentelės ir prioriteto numerius, kurie vietoje nenaudojami, ir perskaitykite esamas taisykles prieš ką nors įterpdami. Skaitykite veikiančias taisykles, o ne išsaugotą failą, nes po paleidimo iš naujo jie gali skirtis.
ip -6 route add default dev wg0 table 200
ip -6 rule add priority 32000 from 2001:db8:aa::20/128 lookup 200
ip -6 rule add priority 32001 from 2001:db8:aa::20/128 unreachablePaskutinė eilutė leidžia trūkstamam maršrutui aiškiai nepavykti, o ne grįžti prie vietinės jungties. Šaltinis turi būti tikrai priskirtas hostui, o įprastos vietinės ir pagrindinės paieškos turi likti savo ankstesnėse vietose. Taisyklė parenka lentelę pagal šaltinį; ji nelygina priešdėlių ilgių tarp lentelių.
Patvirtinkite kelią, tada paslaugą
Paklauskite branduolio, ką jis darytų, o ne spręskite iš įrašo, naudodami paslaugos adresą kaip šaltinio parinkiklį. Teisingas atsakymas čia sutaupo visą paketų sekimą.
ip -6 route get 2001:db8:bb::30 from 2001:db8:aa::20Išvestis turėtų įvardyti tunelį. Tada išbandykite šaltinį, kurio nelietėte, ir patvirtinkite, kad jis vis dar naudoja vietinę jungtį, taigi pakeitimas liko viename adrese. Platesnis parinkiklis nieko neįrodytų apie pradinį skundą.
Ko tai neištaiso
Palikite perdavimą, ugniasienės taisykles ir ICMPv6 elgseną šliuze tokias, kokios buvo, nes šaltinio maršrutas nepakeičia nė vieno jų. Trūkstamas Packet Too Big pranešimas vis tiek sugadina didelius atsakymus, nesvarbu, kuri lentelė laimėjo paiešką. Ištaisykite tai prieš pridėdami maršrutizavimo taisykles, kitaip simptomas išliks po pakeitimo.
Prieš ką nors iš to taikydami, patvirtinkite publikavimo modelį. Atvirkštinis tarpinis serveris, atidarantis savo backend ryšį, pateikia savo šaltinį ir neišsaugo skambintojo, todėl šioje konstrukcijoje šis gedimas negali įvykti. Taisyklės taikymas ten pridėtų maršrutizavimo išimtį, kuri nieko neišsprendžia ir paslepia tikrąją priežastį.
Galiausiai įrašykite taisyklių numerius ir lentelę į hosto konfigūracijos valdymą. Ranka pridėta politikos taisyklė dingsta per kitą perrinkimą, o biuro skambintojas grįžta su tuo pačiu skundu.