Ar VPN maršrutų talpykla slepia jūsų pakeitimą? Patikrinkite tris dalykus
Linux neturi visuotinės maršrutų talpyklos, kurią būtų galima išvalyti. Pasenęs testas paprastai reiškia pasenusį socket, NAT įrašą arba iš naujo pritaikytą profilį. Trys patikros juos atskiria.
Maršrutų talpyklos valymas yra pirmasis instinktas, kai pakeitimas neįsigalioja, o šiuolaikiniame Linux tai bergždžias darbas: visuotinė IPv4 maršrutų talpykla buvo pašalinta prieš metus, todėl ip route show cache nieko nespausdina ir nėra ko išvalyti. Būsena, kuri jus apgauna, gyvena vienu sluoksniu aukščiau: sokete, NAT susiejime, resolveryje ar tinklo tvarkyklėje, kuri iš naujo pritaikė seną profilį. Trys klausimai atskiria tuos atvejus: ar neteisingas kelias ateina iš naujo srauto, ar iš seno ryšio, ar jūsų platforma apskritai talpina maršrutus, ir ar būsena yra maršrutizavime, ar virš jo. Atsakykite į juos prieš iš naujo nustatydami sąsają.
Pirma patikra: ar senas kelias ateina iš naujo srauto?
Užmegztas ryšys išlaiko maršrutą, su kuriuo buvo sukurtas. Todėl SSH sesija per tunelį išgyvena maršrutų lentelės pakeitimą, o nauja sesija iškart pasirenka naują kelią, ir todėl „pakeitimas nieko nepadarė“ dažnai reiškia „senas socket vis dar jį laiko“. Bandykite su nauju procesu, o ne su langu, kuris jau atidarytas.
ss -tnp | head
ip route get 1.1.1.1
curl -m 5 -sS -o /dev/null -w '%{remote_ip}
' https://example.com
Paskutinė komanda išspausdina adresą, kurį naujas ryšys iš tikrųjų pasiekė, ir tai pigiausias būdas pamatyti tikrąjį kelią nepasitikint būsenos langu. Palyginkite jį su šaltinio adresu, kurį turėjo naudoti namespace ar sąsaja.
Jei naujas srautas pasirenka teisingą kelią, o senas neatsistato, nustokite žiūrėti į maršrutizavimą. Maršrutas buvo teisingas; sesija buvo sena.
Antra patikra: ar jūsų platforma apskritai laiko maršrutų talpyklą?
Linux atveju atsakymas yra ne, ta prasme, kurią turi omenyje dauguma vadovų. Nėra visuotinės paskirties talpyklos, kurią būtų galima išmesti, o socket lygmens įrašas, laikantis pasirinktą maršrutą, išlaisvinamas kartu su socket. ip-route vadovo talpyklos skyrius aprašo istorinį elgesį, o ne tai, ką galima išvalyti dabartinėje branduolyje.
Kitos platformos skiriasi, ir būtent čia kopijuoti patarimai nepavyksta. Windows laiko paskirties talpyklą, kurią galima išvalyti komanda netsh interface ip delete destinationcache. BSD ir macOS rodo paieškas pagal paskirties vietą per route -n get, o jų talpyklos pasibaigia pagal savo grafiką. Komanda, kuri veikia vienoje iš jų, Linux atveju nedaro visiškai nieko, todėl tas pats pataisymas atrodo nepavykęs pusei jį bandančių žmonių.
NAT arba conntrack lentelė nėra maršrutų talpykla, nors sukelia tą patį simptomą. Srautas, išverstas prieš jūsų pakeitimą, išlaiko savo vertimą, ir conntrack -L jį parodys dar ilgai po to, kai maršrutizavimo politika pajudėjo toliau. Tai pasenusi būsena, bet maršrutų valymas jos nepaliestų.
Trečia patikra: ar būsena yra maršrutizavime, ar virš jo?
Perskaitykite dabartinę paiešką prieš ką nors kitą: ip route get paskirties vietai, tada tą pačią komandą su from ir šaltinio adresu, tada ip rule show. Jei šie trys sutampa su tuo, ką ketinote, maršrutizavimas nėra taisytinas sluoksnis, o pasenęs stebėjimas atėjo iš kitur.
Trys įprasti įtariamieji sėdi virš maršrutizavimo. Tinklo tvarkyklė gali iš naujo įdiegti maršrutą iš išsaugoto profilio praėjus kelioms sekundėms po to, kai jį ištrinate, todėl jūsų pakeitimas atrodo grįžtantis; patikrinkite nmcli connection show --active ir įrenginio būseną prieš vėl redaguodami lentelę. Resolverio talpykla grąžina seną adresą, kuris atrodo kaip maršrutizavimo gedimas, kol to paties vardo nepaklausiate įrankiu, apeinančiu talpyklą. Programos ryšių telkinys laiko veikiantį socket senosios paskirties vietai ir niekada neprašo branduolio naujo sprendimo.
Ką leidžia daryti išvadą trys atsakymai
Sudėkite atsakymus ir pataisymas paprastai pats save pasako. Naujas srautas, pasirenkantis neteisingą kelią platformoje be maršrutų talpyklos, reiškia, kad politika tikrai neteisinga, todėl perskaitykite taisykles ir lentelę, kurią įdiegė tunelis. Naujas srautas, pasirenkantis teisingą kelią, o sena sesija stringa, reiškia, kad problema yra programa arba socket. Teisingi maršrutai su sulaužytu stebėjimu abiem atvejais reiškia, kad būsena yra virš maršrutizavimo.
Priešinkitės bendram atnaujinimui. Tinklo kamieno paleidimas iš naujo arba visų maršrutų ištrynimas mašinoje, kurios numatytasis maršrutas yra tunelis, gali nutraukti būtent tą ryšį, kurį naudojate jam taisyti, ir sunaikina įrodymus, kurie būtų pasakę, kuris sluoksnis sugedo.
Jei vis dėlto turite ką nors išvalyti, išvalykite mažiausią su diagnoze sutinkantį dalyką: vienos programos socketus, vieną conntrack įrašą, resolverio talpyklą. Tada pakartokite tą patį naujo srauto testą ir užrašykite, kas pasikeitė.
Laikykite tris būsenas atskirai savo užrašuose
Išsaugota konfigūracija, dabartinė paieška ir stebimas srautas yra trys skirtingi faktai, ir jų suliejimas į „talpyklą“ yra tai, kas apsunkina gedimo atkūrimą. Užrašykite profilį ar įrenginį, kuriam priklauso maršrutas, ip route get išvestį ir tikrojo ryšio šaltinį bei paskirties vietą.
Šalia užrašykite platformą ir kliento versiją, nes pataisymas, išvalantis Windows paskirties talpyklą, nėra Linux pagrindiniam kompiuteriui taikomas pataisymas, o procedūra, nukopijuota tarp jų, moko neteisingos pamokos. Kai perduodate problemą kam nors kitam, tos trys eilutės leidžia jam atkurti sugedusią būseną, o ne spėlioti.