Maršrutas, įvedamas po kiekvieno prisijungimo, išsprendžia akimirką, o ne savaitę. macOS atveju patvarus pasirinkimas paprastai yra priešdėlis, saugomas kartu su VPN paslauga, nes paslauga jį įdiegia iš naujo kiekvieno prisijungimo metu ir pašalina, kai paslauga neveikia. Alternatyvos yra laikinas route add testavimui ir prisijungimo hook adresams, kurie žinomi tik po derybų.

Nuspręskite, ar maršrutas priklauso paslaugai, ar sesijai

Paklauskite, nuo ko priklauso priešdėlis. Jei tai fiksuotas privatus tinklas už vietinės VPN paslaugos, maršrutas priklauso tai paslaugai. Jei jis priklauso nuo partnerio adreso, kuris keičiasi kiekvieno prisijungimo metu, hook arba būsenos valdoma užduotis gali būti geresnis savininkas. Jei tik tikrinate kelią artimiausias penkias minutes, laikino maršruto pakanka.

Su paslauga susietas maršrutas turi švariausią gyvavimo ciklą. Jis atsiranda su paslauga ir išnyksta, kai paslauga neprisijungusi, todėl negali pergyventi tunelio, į kurį rodo. Ši savybė verta daugiau nei vienos eilutės komandos patogumas.

Su sesija susietas maršrutas priklauso sąsajai, ir tas numeris keičiasi be įspėjimo. Prisijungimas iš naujo gali suteikti tuneliui kitą utun vardą nei ankstesnė sesija, o tai kietai užkoduotą komandą paverčia maršrutu, kuris nerodo nieko arba, dar blogiau, kito tunelio.

Perskaitykite dabartinę maršruto ir paslaugos būseną

Pradėkite nuo vardų, kuriuos sistema iš tikrųjų naudoja. Paslaugos pavadinimas tinklo nustatymuose yra toliau pateiktų komandų identifikatorius, o dabartinė maršrutų lentelė rodo, ką įdiegė prisijungęs klientas. Skaitykite abu, kol tunelis veikia.

scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5

Ta paieška rodo, kurį šliuzą ir sąsają branduolys pasirinktų šiam adresui šiuo metu. Jei jis jau renkasi tunelį, priešdėlis padengtas ir naujas maršrutas būtų perteklinis. Jei jis renkasi vietinį maršrutizatorių, tuneliui trūksta to priešdėlio.

Prisijungę atkreipkite dėmesį į partnerio adresą. Jis tampa šliuzo reikšme su paslauga susietame maršrute ir paprastai yra paskirties vieta, rodoma numatytajam tunelio maršrutui komandoje netstat -rn.

Išsaugokite priešdėlį su networksetup

Įrankis networksetup prideda papildomus maršrutus prie tinklo paslaugos. Paslaugai, pavadintai OfficeVPN, ir privačiam priešdėliui, pasiekiamam per tunelio partnerį, forma yra:

sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN

Kiekvienas trejetas po paslaugos pavadinimo nurodo paskirties vietą, jos tinklo kaukę ir tunelio partnerį kaip šliuzą. Vienas iškvietimas gali nešti kelis priešdėlius, o tuščias iškvietimas išvalo išsaugotą sąrašą. Skaitytuvas yra patikros žingsnis; jei sąrašas tuščias, nustatymas nebuvo pritaikytas paslaugai, apie kurią galvojate.

Šliuzas turi būti tunelio partneris, o ne fizinis maršrutizatorius. Maršrutas, nurodantis vietinį šliuzą, siunčia privatų priešdėlį per fizinę sąsają, ir tai yra pirminė klaida su papildomais žingsniais. Pasenęs partneris yra dažniausia priežastis, kodėl teisingai atrodantis maršrutas niekada neperduoda srauto. Perskaitykite partnerį iš prisijungusios būsenos, o ne kopijuokite adresą iš senos pastabos.

Naudokite route add tik bandymui

Tiesioginis maršrutas naudingas norint įrodyti, kad priešdėlis veikia, prieš darant jį nuolatiniu. Sąsajos forma išvengia šliuzo paieškos:

sudo route -n add -net 10.20.0.0/16 -interface utun4

Maršrutas išnyksta per kitą prisijungimą ir priklauso nuo sąsajos numerio, kuris egzistuoja šiandien. Tai daro jį diagnostika, o ne diegimu. Jei bandymas veikia, o su paslauga susietas maršrutas ne, pirmiausia palyginkite šliuzo reikšmę; tai laukas, kuris dažniausiai būna neteisingas.

Būkite atsargūs su patarimais, kurie pakeičia numatytąjį VPN maršrutą, kad priverstų skaidymą. Klientas, kuris primeta visą tunelį, gali iš naujo įdiegti savo maršrutus po prisijungimo iš naujo ar politikos atnaujinimo, todėl rankinis pakeitimas tyliai atšaukiamas. Keli privatūs priešdėliai yra maršrutizavimo problema; laikyti visą interneto srautą vietiniu prieš viso tunelio politiką yra sprendimas serverio pusėje.

Rinkitės hook tik tada, kai adresas derinamas

PPP pagrindu veikiančioms jungtims, pavyzdžiui, L2TP, macOS paleidžia /etc/ppp/ip-up, kai jungtis užmezgama. Scenarijus gauna sąsajos pavadinimą ir suderintus vietinį bei nuotolinį adresus, todėl gali pridėti maršrutą, priklausantį nuo serverio priskirto partnerio. Tai būtent tas atvejis, kurio fiksuotas paslaugos maršrutas negali išreikšti.

IKEv2 ir gamintojų klientai gali visai nenaudoti to PPP kelio, o tai reiškia, kad scenarijus gali tylėti visą sesiją. Kai taip atsitinka, launchd užduotis, kuri klausia scutil --nc status ir reaguoja į būsenos pasikeitimą, yra lygiavertis mechanizmas su nedidele delsa.

Kad ir kokį hook naudotumėte, padarykite jį idempotentišką ir leiskite jam šalinti tik jo paties sukurtus maršrutus. Scenarijus, kuris ištrina kiekvieną tunelį minintį maršrutą, galiausiai ištrins maršrutą, kuris palaiko VPN serverio pasiekiamumą, ir ryšys nutrūks vos tik pavyks.

Užbaikite patikrinę privačią paskirties vietą, įprastą naršymą ir prisijungimo iš naujo ar miego ciklą. Tada patikrinkite scutil --dns, nes vardų sprendimas yra atskira politika, o veikiantis maršrutas neįrodo, kad privatūs vardai išsprendžiami.

Susiję straipsniai