Pasiekti privatų prefiksą per VPN yra reikalavimas su trukme: jis galioja tol, kol ta jungtis tinkama naudoti, ir baigiasi, kai baigiasi jungtis. Prisijungimo scenarijus to negali išreikšti, nes prisijungimas ir tunelio pakėlimas yra skirtingi momentai, o tunelis, kuris egzistuoja prisijungus, gali būti ne tas, kuris po minutės neša srautą. Pirmas sprendimas yra ne kokią komandą vykdyti. Tai, kuris komponentas valdo prefiksą.

Prefiksui reikia savininko, o ne momento

Pradėkite nuo reikalavimo užrašymo sakiniu su veiksniu: pasiekite 10.77.0.0/24 per biuro VPN, kol ta jungtis pakelta. Tas sakinys įvardija prefiksą, jungtį ir sąlygą, ir iš karto atmeta du populiarius pakaitalus: prisijungimo kabliuką ir sąsajos pavadinimą, pavyzdžiui, ppp0 arba utun2.

Sąsajų pavadinimai priskiriami vykdymo metu ir nėra stabilūs tarp pakartotinių prisijungimų. Kabliukas, kuris atitinka praėjusią savaitę matytą pavadinimą, arba nesuveiks, arba suveiks prieš svetimą sąsają. Abu rezultatai atrodo kaip maršrutizavimo klaida, o ne kaip pasenusi prielaida, kuria jie yra. Ta pati prieštaravimas galioja bet kuriam scenarijui, priklausom nuo pavadinimo, kuris egzistuoja tik tol, kol pakeltas vienas konkretus tunelis.

Naudokite palaikomą maršruto ketinimo šaltinį

Tinklų sietuvas, valdomas profilis arba valdančiojo kliento dokumentuotas maršruto mechanizmas yra tinkama vieta, kai tas mechanizmas gali išreikšti reikalavimą. Kuris taikomas, priklauso nuo protokolo ir tiekėjo, o raktai tarp jų nekeliauja, todėl reikšmė, kuri konfigūruoja profilį OpenVPN nieko nepasako apie vietinį L2TP ar 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

Paketinių tunelių kūrėjams Apple IPv4 tunelio nustatymai aiškiai atskleidžia įtrauktus ir neįtrauktus maršrutus, o IPv6 turi savo atitikmenį. Tai API, kuriuos naudoja tiekėjas, o ne įrodymas, kad kiekvienas vietinis VPN skydelis siūlo administratoriui savavališką maršrutų sąrašą. Jei dabartinis derinys negali išreikšti reikiamų prefiksų, kitas žingsnis yra palaikomas operatoriaus konfigūracijos kelias, o ne kita programa, įdiegta tikintis, kad ji elgsis geriau.

Naudojimo laikas apima valymą

Kartais išorinio pagalbininko tikrai reikia, ir tada „pridėk maršrutą“ yra mažiausia jo darbo dalis. Jis turi žinoti, kuriai jungčiai tarnauja ir kurią sąsają ta jungtis naudoja, palaukti, kol atitinkama tinklo būsena nusistovės, likti idempotentišku, kai paleidžiamas du kartus iš eilės, ir nevalyti nieko, ko pats neįdiegė.

Paskutinė sąlyga yra ta, kuri skauda. Pagalbininkas, kuris ištrina kiekvieną maršrutą, atitinkantį biuro prefiksą, anksčiau ar vėliau ištrins maršrutą, kurio nepridėjo. Dėl to atsiradęs sutrikimas suverčiamas VPN klientui, nes klientas yra ta dalis, kurią mato naudotojas. Nuspręsti, ką pagalbininkas valdo, prieš jį rašant, pigiau nei vėliau aiškinti, kodėl vietinis potinklis nustojo atsakinėti.

Pakartotinio prisijungimo lenktynės

Įsivaizduokite greitą pakartotinį prisijungimą. Sesija A krenta, sesija B pakyla ir įdiegia savo maršrutą, o tada pagaliau įvyksta atidėtas A valymas. Jei tas valymas šalina maršrutus pagal prefiksą, jis pasiima ir galiojančią B būseną, o jungtis, kuri veikė prieš sekundę, dabar maršrutizuojama į niekur.

Tai nuosavybės lenktynės, o miego pridėjimas prie scenarijaus tik pakeičia, kuri pusė jas laimi. Sprendimas – padaryti valymą priklausomą nuo tapatybės: palyginkite sąsają ir sesiją, kurias įdiegė pagalbininkas, su tomis, kurios dar galioja, ir šalinkite tik sutapus.

Ką testuoti ir ko maršrutas negali

Priėmimas turi apimti keturis perėjimus: pirmą jungtį, pakartotinį prisijungimą prie kitos sąsajos, nepavykusį prisijungimo bandymą ir galutinį atsijungimą. Po kiekvieno perskaitykite maršrutą, kurį sistema iš tikrųjų pasirinko adresui kitoje pusėje, o ne tą, kurio tikėjotės.

route -n get 10.77.0.5
netstat -rn -f inet

Įtraukite ir nepatogius atvejus į tą patį etapą: IPv6 ten, kur jo reikia, vietinį prefiksą, kuris persidengia su tolimuoju, ir maršrutą į patį viešą VPN galinį tašką, kuris turi veikti tol, kol tunelis pakeltas. Tada užrašykite, kas maršrutas nėra. Jis atrenka paketus; jis nesuteikia leidimo kitoje pusėje ir nesukuria grįžimo kelio, ir tai lieka atskiri reikalavimai su atskirais savininkais.

Norimas rezultatas yra prefiksas, kuris per kiekvieną perėjimą seka savo palaikomą jungties savininką, o ne komanda, kuri kartą atsitiktinai pavyko toje mašinoje, kur buvo parašyta.

Susiję straipsniai