Ekstra Mac VPN-ruter treng ein eigar, ikkje eit innloggingsskript
Ei rute lagt til éin gong ved innlogging er ikkje ein gjenoppkoplingspolicy. Gi fjerne prefiks ein eigar, og avgjer korleis dei blir viste, endra og forsvinn med den tilkoblinga.
Å nå eit privat prefiks gjennom ein VPN er eit krav med varigheit: det gjeld så lenge den tilkoblinga er brukbar, og det sluttar når tilkoblinga sluttar. Eit innloggingsskript kan ikkje uttrykke det, fordi innlogging og tunnel-opp er ulike augneblink, og tunnelen som finst ved innlogging er kanskje ikkje den som ber trafikk eit minutt seinare. Den første avgjerda er ikkje kva kommando som skal køyrast. Det er kva komponent som eig prefikset.
Prefikset treng ein eigar, ikkje eit augneblink
Byrja med å skrive kravet som ei setning med eit subjekt: nå 10.77.0.0/24 gjennom Office-VPN medan den tilkoblinga er oppe. Den setninga namngir prefikset, tilkoblinga og vilkåret, og ho utelukkar straks to populære erstattarar: ein innloggingskrok og eit grensesnittnamn som ppp0 eller utun2.
Grensesnittnamn blir tildelte ved køyring og er ikkje stabile mellom gjenoppkoplingar. Ein krok som matchar namnet han såg førre veke, vil anten ikkje utløysast eller utløysast mot nokon andre sitt grensesnitt. Begge utfalla framstår som ein rutefeil snarare enn den forelda føresetnaden dei er. Den same innvendinga gjeld for eit kvart skript som er bunde til eit namn som berre finst medan ein bestemt tunnel er oppe.
Bruk ei støtta kjelde til rutehensikt
Gatewayen, ein administrert profil eller den eigande klienten sin dokumenterte rutemekanisme er rett stad, når den mekanismen kan uttrykke kravet. Kva som gjeld avheng av protokollen og leverandøren, og nøklane reiser ikkje mellom dei, så ein verdi som konfigurerer ein profil OpenVPN fortel deg ingenting om den innebygde L2TP- eller IKEv2-klienten.
| Mechanism | Can carry extra prefixes | Who owns the lifetime |
|---|---|---|
| Gateway-pushed routes | Often, if the gateway is configured for it | The connection |
| Managed profile settings | Depends on the client and profile format | The profile |
| Provider tunnel settings | Yes, as included and excluded routes | The provider process |
| Manual command | Yes, once | Nobody |
For utviklarar av pakketunnelar eksponerer Apples IPv4-tunnelinnstillingar inkluderte og ekskluderte ruter eksplisitt, og IPv6 har sin motpart. Dette er API-ar som leverandøren brukar, ikkje prov på at kvart innebygde VPN-panel tilbyr ein administrator ei vilkårleg ruteliste. Viss den noverande kombinasjonen ikkje kan uttrykke prefiksa du treng, er neste steg ein støtta konfigurasjonsveg frå operatøren, ikkje ein annan app installert i håp om at han oppfører seg betre.
Levetida omfattar opprydding
Nokre gonger er ein ekstern hjelpar verkeleg nødvendig, og når han er det, er «legg til ruta» den minste delen av jobben. Han må vite kva tilkobling han tener og kva grensesnitt den tilkoblinga brukar, vente til den relevante nettverkstilstanden fell til ro, halde fram som idempotent når han blir køyrd to gonger på rad, og ikkje rydde noko han ikkje sjølv installerte.
Den siste klausulen er den som gjer vondt. Ein hjelpar som slettar kvar rute som matchar kontorprefikset, vil før eller seinare slette ei rute han ikkje la til. Utfallet blir lagt på VPN-klienten, fordi klienten er den delen brukaren ser. Å avgjere kva ein hjelpar eig før du skriv han er billegare enn å forklare etterpå kvifor eit lokalt subnett slutta å svare.
Gjenoppkoplingsløpet
Tenk deg ei rask gjenoppkopling. Sesjon A fell, sesjon B kjem opp og installerar ruta si, og så køyrer A si forseinka opprydding endeleg. Viss den oppryddinga fjernar ruter etter prefiks, tek ho B sin gyldige tilstand med seg, og tilkoblinga som fungerte for eitt sekund sidan rutar no ut i ingenting.
Dette er eit eigarskapsløp, og å leggje til ein svevn i skriptet endrar berre kva side som vinn det. Løysinga er å gjere opprydding avhengig av identitet: samanlikn grensesnittet og sesjonen hjelparen installererte med dei som framleis gjeld, og fjern berre ved treff.
Kva som skal testast, og kva ei rute ikkje kan gjere
Aksept må dekkje fire overgangar: den første tilkoblinga, ei gjenoppkopling til eit anna grensesnitt, eit tilkoplingsforsøk som mislukkast, og den endelege fråkoblinga. Etter kvar av dei, les ruta systemet faktisk valde for ei adresse på den fjerne sida, ikkje den du forventa.
route -n get 10.77.0.5
netstat -rn -f inet
Ta med dei vanskelege tilfella i same runde: IPv6 der det krevst, eit lokalt prefiks som overlappar det fjerne, og ruta til sjølve det offentlege VPN-endepunktet, som må halde fram med å verke medan tunnelen er oppe. Skriv så ned kva ei rute ikkje er. Ho vel pakkar; ho gir ikkje løyve på den fjerne sida og lagar ikkje ein returveg, og det blir verande separate krav med separate eigarar.
Resultatet du vil ha er eit prefiks som følgjer sin støtta tilkoblingseigar gjennom kvar overgang, snarare enn ein kommando som tilfeldigvis lukkast éin gong på maskinen der han vart skriven.