At nå et privat præfiks gennem en VPN er et krav med en varighed: det gælder, så længe forbindelsen er brugbar, og det slutter, når forbindelsen slutter. Et login-script kan ikke udtrykke det, fordi login og tunnel-op er forskellige øjeblikke, og den tunnel, der findes ved login, er måske ikke den, der bærer trafik et minut senere. Den første beslutning er ikke, hvilken kommando der skal køres. Det er, hvilken komponent der ejer præfikset.

Præfikset har brug for en ejer, ikke et øjeblik

Begynd med at skrive kravet som en sætning med et subjekt: nå 10.77.0.0/24 gennem Office VPN, mens den forbindelse er oppe. Den sætning navngiver præfikset, forbindelsen og betingelsen, og den udelukker straks to populære erstatninger: et login-hook og et interface-navn som ppp0 eller utun2.

Interface-navne tildeles ved kørsel og er ikke stabile mellem genforbindelser. Et hook, der matcher det navn, det så i sidste uge, vil enten ikke udløses eller udløses mod en andens interface. Begge udfald fremstår som en rutningsfejl snarere end den forældede antagelse, de er. Den samme indvending gælder for ethvert script, der er bundet til et navn, som kun findes, mens én bestemt tunnel er oppe.

Brug en understøttet kilde til rutehensigt

Gatewayen, en administreret profil eller den ejende klients dokumenterede rutemekanisme er det rigtige sted, når den mekanisme kan udtrykke kravet. Hvilken der gælder, afhænger af protokollen og udbyderen, og nøglerne rejser ikke mellem dem, så en værdi, der konfigurerer en profil OpenVPN fortæller dig intet om den indfødte L2TP- eller IKEv2-klient.

MechanismCan carry extra prefixesWho owns the lifetime
Gateway-pushed routesOften, if the gateway is configured for itThe connection
Managed profile settingsDepends on the client and profile formatThe profile
Provider tunnel settingsYes, as included and excluded routesThe provider process
Manual commandYes, onceNobody

For udviklere af pakketunneler eksponerer Apples IPv4-tunnelindstillinger eksplicit inkluderede og ekskluderede ruter, og IPv6 har sin modpart. Det er API'er, som udbyderen bruger, ikke bevis for, at hver indfødt VPN-panel tilbyder en administrator en vilkårlig ruteliste. Hvis den nuværende kombination ikke kan udtrykke de præfikser, du har brug for, er næste skridt en understøttet konfigurationsvej fra operatøren, ikke en anden app installeret i håb om, at den opfører sig bedre.

Levetiden omfatter oprydning

Nogle gange er en ekstern hjælper reelt nødvendig, og når den er, er «tilføj ruten» den mindste del af dens arbejde. Den skal vide, hvilken forbindelse den tjener, og hvilket interface den forbindelse bruger, vente på, at den relevante netværkstilstand falder til ro, forblive idempotent, når den kører to gange i træk, og ikke rydde op i noget, den ikke selv har installeret.

Den sidste klausul er den, der gør ondt. En hjælper, der sletter hver rute, der matcher kontorpræfikset, vil før eller siden slette en rute, den ikke har tilføjet. Det resulterende udfald får VPN-klienten skylden, fordi klienten er den del, brugeren kan se. At beslutte, hvad en hjælper ejer, før man skriver den, er billigere end bagefter at forklare, hvorfor et lokalt subnet holdt op med at svare.

Genforbindelseskapløbet

Overvej en hurtig genforbindelse. Session A går ned, session B kommer op og installerer sin rute, og så kører A's forsinkede oprydning endelig. Hvis den oprydning fjerner ruter efter præfiks, tager den B's gyldige tilstand med sig, og den forbindelse, der virkede for et sekund siden, router nu ud i ingenting.

Det er et ejerskabsløb, og at tilføje en søvn til scriptet ændrer kun, hvilken side der vinder det. Løsningen er at gøre oprydning betinget af identitet: sammenlign det interface og den session, hjælperen installerede, med dem, der stadig er aktuelle, og fjern kun ved match.

Hvad man skal teste, og hvad en rute ikke kan

Accept skal dække fire overgange: den første forbindelse, en genforbindelse til et andet interface, et forbindelsesforsøg der mislykkes, og den endelige afbrydelse. Efter hver af dem skal du læse den rute, systemet faktisk valgte til en adresse på den fjerne side, ikke den, du forventede.

route -n get 10.77.0.5
netstat -rn -f inet

Tag de akavede tilfælde med i samme gennemgang: IPv6 hvor det kræves, et lokalt præfiks, der overlapper det fjerne, og ruten til selve det offentlige VPN-endepunkt, som skal blive ved med at virke, mens tunnelen er oppe. Skriv derefter ned, hvad en rute ikke er. Den vælger pakker; den giver ikke tilladelse på den fjerne side og skaber ikke en returvej, og det forbliver separate krav med separate ejere.

Det resultat, du ønsker, er et præfiks, der følger sin understøttede forbindelsesejer gennem hver overgang, snarere end en kommando, der tilfældigt lykkedes én gang på den maskine, hvor den blev skrevet.

Relaterede artikler