Skriva li VPN predmemorija ruta vašu promjenu? Provjerite tri stvari
Linux nema globalnu predmemoriju ruta koju treba isprazniti. Zastario test obično znači zastario socket, NAT unos ili ponovno primijenjen profil. Tri provjere ih razlikuju.
Pražnjenje predmemorije ruta prvi je instinkt kada promjena ne stupi na snagu, a na modernom Linuxu to je uzaludan trud: globalna predmemorija IPv4 ruta uklonjena je prije godinama, pa ip route show cache ništa ne ispisuje i nema šta očistiti. Stanje koje vas zavarava živi jedan sloj više: u socketu, NAT mapiranju, resolveru ili mrežnom menadžeru koji je ponovno primijenio stari profil. Tri pitanja razdvajaju te slučajeve: dolazi li pogrešan put iz novog toka ili stare veze, predmemoriše li vaša platforma rute uopće, i je li stanje u rutiranju ili iznad njega. Odgovorite na njih prije nego resetujete interfejs.
Provjera prva: dolazi li stari put iz novog toka?
Uspostavljena veza zadržava rutu s kojom je stvorena. Zato SSH sesija preko tunela preživljava promjenu tablice rutiranja, dok nova sesija odmah preuzima novi put, i zato „promjena nije ništa učinila“ često znači „stari socket je još drži“. Testirajte novim procesom, a ne prozorom koji već imate otvoren.
ss -tnp | head
ip route get 1.1.1.1
curl -m 5 -sS -o /dev/null -w '%{remote_ip}
' https://example.com
Posljednja naredba ispisuje adresu koju je nova veza stvarno dosegla, što je najjeftiniji način da vidite pravi put bez povjerenja u prozor statusa. Uporedite je s izvornom adresom koju je namespace ili interfejs trebalo da koristi.
Ako novi tok ide ispravnim putem, a stari se ne oporavi, prestanite gledati rutiranje. Ruta je bila ispravna; sesija je bila stara.
Provjera druga: čuva li vaša platforma uopće predmemoriju ruta?
Na Linuxu je odgovor ne, u smislu koji većina vodiča podrazumijeva. Nema globalne predmemorije odredišta koju treba odbaciti, a unos na nivou socketa koji drži odabranu rutu oslobađa se sa socketom. Odjeljak o predmemoriji u priručniku za ip-route opisuje historijsko ponašanje, a ne nešto što možete isprazniti na trenutnom kernelu.
Druge platforme se razlikuju i upravo tu kopiranje savjeta ide naopako. Windows čuva predmemoriju odredišta koju možete očistiti pomoću netsh interface ip delete destinationcache. BSD i macOS izlažu pretrage po odredištu kroz route -n get, a njihove predmemorije istječu po vlastitom rasporedu. Naredba koja radi na jednoj od njih na Linuxu ne čini baš ništa, zato se ista popravka čini neuspješnom za polovinu ljudi koji je probaju.
NAT ili conntrack tablica nije predmemorija ruta, iako proizvodi isti simptom. Tok koji je preveden prije vaše promjene zadržava svoj prijevod, a conntrack -L će ga pokazati dugo nakon što je politika rutiranja otišla dalje. To je zastarjelo stanje, ali čišćenje ruta ga neće dotaknuti.
Provjera treća: je li stanje u rutiranju ili iznad njega?
Pročitajte trenutno pretraživanje prije bilo čega drugog: ip route get za odredište, zatim ista naredba s from i izvornom adresom, zatim ip rule show. Ako se ta tri slažu s vašom namjerom, rutiranje nije sloj koji treba popravljati, a zastarjelo zapažanje došlo je odnekud drugdje.
Tri uobičajena osumnjičena sjede iznad rutiranja. Mrežni menadžer može ponovno instalirati rutu iz sačuvanog profila sekundama nakon što je obrišete, pa se vaša promjena čini kao da se vraća; provjerite nmcli connection show --active i stanje unita prije nego ponovo uredite tablicu. Predmemorija resolvera vraća staru adresu, što izgleda kao neuspjeh rutiranja dok isto ime ne upitate alatom koji obilazi predmemoriju. Bazen veza aplikacije drži radni socket prema starom odredištu i nikada ne pita kernel za novu odluku.
Šta vam tri odgovora omogućavaju da zaključite
Sastavite odgovore i popravka se obično sama izrekne. Novi tok koji ide pogrešnim putem na platformi bez predmemorije ruta znači da je politika zaista pogrešna, zato pročitajte pravila i tablicu koju je tunel instalirao. Novi tok koji ide ispravnim putem dok stara sesija zapinje znači da je problem u aplikaciji ili socketu. Ispravne rute s pokvarenim zapažanjem u oba slučaja znače da je stanje iznad rutiranja.
Oduprite se generičkom osvježavanju. Restartovanje mrežnog steka ili brisanje svake rute na mašini čija je zadana ruta tunel može prekinuti upravo vezu koju koristite da to popravite, i uništava dokaz koji bi rekao koji je sloj zakazao.
Ako ipak morate nešto očistiti, očistite najmanju stvar koja odgovara dijagnozi: sockete jednog procesa, jedan conntrack unos, predmemoriju resolvera. Zatim ponovite isti test novog toka i zapišite šta se promijenilo.
Držite tri stanja odvojeno u svojim bilješkama
Sačuvana konfiguracija, trenutno pretraživanje i zapaženi tok tri su različite činjenice, a njihovo stapanje u „predmemoriju“ ono je što kvar čini teškim za reprodukovati. Zapišite profil ili unit koji posjeduje rutu, izlaz ip route get i izvor i odredište stvarne veze.
Zapišite pored platformu i verziju klijenta, jer popravka koja čisti Windows predmemoriju odredišta nije popravka primjenjiva na Linux host, a procedura kopirana između njih uči pogrešnu lekciju. Kada problem predate nekome drugom, ta tri reda mu omogućavaju da reprodukuje stanje kvara umjesto da nagađa.