Ruta koja se upisuje nakon svake veze rješava trenutak, a ne sedmicu. Na macOS-u je trajni izbor obično prefiks sačuvan uz VPN servis, jer ga servis ponovo instalira pri svakom povezivanju i uklanja kada je servis isključen. Alternative su prolazni route add za testiranje i hook za povezivanje za adrese koje se saznaju tek nakon pregovaranja.

Odlučite pripada li ruta servisu ili sesiji

Pitajte o čemu zavisi prefiks. Ako je to fiksna privatna mreža iza izvornog VPN servisa, ruta pripada tom servisu. Ako zavisi od adrese partnera koja se mijenja pri svakoj vezi, hook ili zadatak vođen stanjem može biti bolji vlasnik. Ako samo provjeravate put za sljedećih pet minuta, prolazna ruta je dovoljna.

Ruta vezana za servis ima najčišći životni ciklus. Pojavljuje se sa servisom i nestaje kada servis nije povezan, pa ne može nadživjeti tunel na koji pokazuje. To svojstvo vrijedi više od pogodnosti jednoredne komande.

Ruta vezana za sesiju pripada interfejsu, a taj broj se mijenja bez najave. Ponovno povezivanje može tunelu dati drugo ime utun od onog koje je koristila prethodna sesija, što tvrdo kodiranu komandu pretvara u rutu koja ne pokazuje ni na šta ili, gore, na drugi tunel.

Pročitajte trenutno stanje rute i servisa

Počnite s imenima koja sistem zaista koristi. Ime servisa u postavkama mreže identifikator je za komande ispod, a trenutna tabela ruta pokazuje šta je povezani klijent instalirao. Pročitajte oboje dok je tunel aktivan.

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

To pretraživanje pokazuje koji bi prolaz i interfejs kernel odabrao za ovu adresu u ovom trenutku. Ako već bira tunel, prefiks je pokriven i nova ruta bi bila suvišna. Ako bira lokalni ruter, tunelu nedostaje taj prefiks.

Zabilježite adresu partnera dok ste povezani. Ona postaje vrijednost prolaza u ruti vezanoj za servis i obično je odredište prikazano za zadanu rutu tunela u netstat -rn.

Sačuvajte prefiks pomoću networksetup

Alat networksetup pridružuje dodatne rute mrežnom servisu. Za servis imena OfficeVPN i privatni prefiks dostupan kroz partnera tunela, oblik je:

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

Svaka trojka nakon imena servisa daje odredište, njegovu mrežnu masku i partnera tunela kao prolaz. Jedan poziv može nositi nekoliko prefiksa, a prazan poziv briše sačuvanu listu. Čitač je korak provjere; ako je lista prazna, postavka nije primijenjena na servis koji mislite.

Prolaz mora biti partner tunela, a ne fizički ruter. Ruta koja imenuje lokalni prolaz šalje privatni prefiks kroz fizički interfejs, što je izvorni kvar s dodatnim koracima. Zastario partner najčešći je razlog zašto ruta koja izgleda ispravno nikada ne prenosi saobraćaj. Ponovo pročitajte partnera iz povezanog stanja umjesto da kopirate adresu iz stare bilješke.

Koristite route add samo za test

Direktna ruta korisna je da dokaže da prefiks radi prije nego što ga učinite trajnim. Oblik s interfejsom izbjegava traženje prolaza:

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

Ruta nestaje pri sljedećem povezivanju i zavisi od broja interfejsa koji danas postoji. To je čini dijagnostikom, a ne primjenom. Ako test radi, a ruta vezana za servis ne, prvo uporedite vrijednost prolaza; to je polje koje je najčešće pogrešno.

Budite pažljivi sa savjetima koji zamjenjuju zadanu rutu VPN-a da bi nametnuli podjelu. Klijent koji nameće puni tunel može ponovo instalirati svoje rute nakon ponovnog povezivanja ili osvježavanja politike, pa se ručna promjena tiho poništava. Nekoliko privatnih prefiksa je problem rutiranja; držati sav internet saobraćaj lokalnim uprkos politici punog tunela odluka je na strani servera.

Odaberite hook samo kada se adresa pregovara

Za veze zasnovane na PPP-u, kao što je L2TP, macOS izvršava /etc/ppp/ip-up nakon uspostavljanja veze. Skripta prima ime interfejsa i pregovarane lokalnu i udaljenu adresu, pa može dodati rutu koja zavisi od partnera kojeg je server dodijelio. To je upravo slučaj koji fiksna ruta servisa ne može izraziti.

IKEv2 i klijenti proizvođača možda uopće ne koriste taj PPP put, što znači da skripta može ostati nijema cijelu sesiju. Kada se to dogodi, zadatak launchd koji provjerava scutil --nc status i reaguje na promjenu stanja ekvivalentan je mehanizam, s malim kašnjenjem.

Koji god hook koristili, učinite ga idempotentnim i neka uklanja samo rute koje je sam stvorio. Skripta koja briše svaku rutu koja spominje tunel na kraju će obrisati rutu koja drži VPN server dostupnim, i veza će pasti čim uspije.

Završite provjerom privatnog odredišta, običnog pregledanja i ciklusa ponovnog povezivanja ili spavanja. Zatim pregledajte scutil --dns, jer razrješavanje imena je odvojena politika i ruta koja radi ne dokazuje da se privatna imena razrješavaju.

Povezani članci