Prie VPN adreso pririšta programa vis tiek naudoja neteisingą maršrutą
Prie VPN adreso pririštas socket laikosi įprasto numatytojo maršruto. Prieš pridėdami politikos taisykles patikrinkite adreso priklausomybę ir šaltinį atsižvelgiantį paiešką.
Programa prisiriša prie VPN adreso, o ryšys vis tiek išeina įprastu numatytuoju maršrutu. Prisirišime niekas nesugedo; jis padarė tiksliai tai, ką daro prisirišimas. Socket prisirišimas prie vietinio adreso parenka šaltinio adresą, kurį branduolys įrašo į antraštę. Jis neįdiegia maršruto ir nesukuria politikos taisyklės, kuri siųstų paketus su tuo šaltiniu į konkretų tunelį.
Likusi šio vadovo dalis yra mano naudojama patikros tvarka kartu su komanda, kuri pateikia kiekvieną stebėjimą.
Ką iš tikrųjų nusprendžia prisirišimas
Prisirišimas priskiria socketui vietinį adresą. Tada branduolys atlieka tą pačią maršruto paiešką, kurią būtų atlikęs ir kitaip, nebent politikos taisyklė pakeistų, kurią lentelę ta paieška skaito.
Štai kodėl paketas gali išeiti su VPN šaltinio adresu fizine sąsaja. Kitoje pusėje jis ateina iš privataus diapazono, kurio tinklas tame kelyje niekada nesitikėjo, grįžtančiam srautui nėra maršruto atgal, ir ryšys pakimba arba atsistato.
Linux IP socketų žinynas aprašo prisirišimo semantiką. Maršrutizavimo pusė gyvena ip-rule ir ip-route, ir tai atskiri žinynai dėl priežasties.
Įsitikinkite, kad adresas priklauso šiai vardų erdvei
Adresas, prie kurio galite prisirišti, turi egzistuoti sąsajoje tinklo vardų erdvėje, kurioje veikia programa. Partnerio adresas, tinklų sietuvos adresas arba adresas, kuris egzistuoja tik kitoje vardų erdvėje, negali būti pririštas, ir iškvietimas nepavyksta su EADDRNOTAVAIL.
ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>Vykdykite tuos tris tame pačiame kontekste kaip programa: ta pati vardų erdvė ir, jei galite gauti, tas pats naudotojas. Sena net30 schema neįrodo, kokį adresą dabartinė jūsų topologija skyrė klientui. Skaitykite sąsają, kuri iš tikrųjų aktyvi.
Skaitykite to šaltinio ir tikslo paiešką
Viena komanda atsako į klausimą, į kurį prisirišimas neatsakė:
ip route get 203.0.113.10 from 10.8.0.2
ip rule showPirmoji eilutė išspausdina maršrutą, kurį paketas nuo to šaltinio iki to tikslo nueitų, įskaitant išeinančią sąsają ir pageidaujamą šaltinį. Jei ji nurodo fizinę sąsają, prisirišimas ir maršrutas nesutampa, ir paketas išeis su šaltiniu, į kurį kelias negali grįžti.
Tada ip rule show pasako, ar kuri nors taisyklė būtų pasirinkusi kitą lentelę. Prioritetai čia svarbūs, nes laimi pirmoji atitinkanti taisyklė, o taisyklė, pagaunanti viską virš jūsų taisyklės, padaro jūsų taisyklę nematomą.
Įdiekite politikos taisyklę tik jei tai yra projektas
Maršrutizavimas pagal šaltinį yra sąmoningas projektas, o ne vienos programos taisymas. Jei politikos savininkas nori, kad srautas iš tunelio potinklio naudotų tunelį, taisyklė priklauso jo konfigūracijai, o ne vienkartinei komandai jūsų nešiojamajame kompiuteryje.
Veikianti forma yra atskira lentelė su numatytuoju maršrutu per tunelį ir taisyklė, kuri siunčia VPN šaltinio diapazoną į tą lentelę. Pridėkite išimtis, kurių reikia projektui, nes lentelė, kurioje yra tik tunelio numatytasis maršrutas, pagaus tikslus, kurie turi likti vietiniai arba būti pasiekiami fiziniu keliu.
ip route add default dev tun0 table 100
ip rule add from 10.8.0.2 table 100 priority 100
ip route get 203.0.113.10 from 10.8.0.2Atšaukite su ip rule del ir ip route flush table 100. Viskas, kas taip pridėta, dingsta po perkrovimo, nebent tai įrašytų valdytojas; tai ir saugumo savybė, ir priežastis nelaikyti vienintelės kopijos savo shell istorijoje.
Patikrinkite trimis stebėjimais
Užrašykite šaltinį, kurio paprašė programa, maršrutą, kurį pasirinko paieška, ir šaltinį, kurį serveris iš tikrųjų matė.
Šie trys gali nesutapti, ir kiekvienas nesutapimas rodo į kitą vietą. Užfiksavimas tunelio sąsajoje įrodo, kad paketas išėjo su teisingu šaltiniu. Užfiksavimas fizinėje sąsajoje įrodo, kad jis išėjo neteisingu keliu. Tik serverio pusės vaizdas įrodo kelią nuo galo iki galo.
Jei programa siūlo prisirišimo prie įrenginio parinktį arba maršrutizavimo režimą kiekvienai programai, traktuokite tai kaip kitą mechanizmą su kitais apribojimais. Panašiai atrodantys nustatymai ne visi veda prie to paties branduolio sprendimo.