A ajunge la un prefix privat printr-un VPN este o cerință cu durată: se aplică atât timp cât acea conexiune este utilizabilă și se încheie când conexiunea se încheie. Un script de autentificare nu poate exprima asta, pentru că autentificarea și ridicarea tunelului sunt momente diferite, iar tunelul care există la autentificare poate să nu fie cel care transportă trafic un minut mai târziu. Prima decizie nu este ce comandă se execută. Ci ce componentă deține prefixul.

Prefixul are nevoie de un proprietar, nu de un moment

Începeți prin a scrie cerința ca o propoziție cu subiect: ajungeți 10.77.0.0/24 prin VPN-ul de birou cât timp acea conexiune este activă. Propoziția numește prefixul, conexiunea și condiția și elimină imediat doi înlocuitori populari: un hook de autentificare și un nume de interfață precum ppp0 sau utun2.

Numele interfețelor sunt atribuite la rulare și nu sunt stabile între reconectări. Un hook care se potrivește cu numele văzut săptămâna trecută fie nu se declanșează, fie se declanșează pe interfața altcuiva. Ambele rezultate apar ca o eroare de rutare, nu ca presupunerea învechită care sunt. Aceeași obiecție se aplică oricărui script legat de un nume care există doar cât timp un anumit tunel este ridicat.

Folosiți o sursă acceptată de intenție de rută

Gateway-ul, un profil administrat sau mecanismul de rute documentat al clientului proprietar este locul potrivit, atunci când acel mecanism poate exprima cerința. Care se aplică depinde de protocol și de furnizor, iar cheile nu călătoresc între ele, așa că o valoare care configurează un profil OpenVPN nu vă spune nimic despre clientul nativ L2TP sau IKEv2.

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

Pentru dezvoltatorii de tuneluri de pachete, setările de tunel IPv4 ale Apple expun explicit rutele incluse și excluse, iar IPv6 are omologul său. Acestea sunt API-uri pe care le folosește furnizorul, nu dovada că fiecare panou VPN nativ oferă administratorului o listă arbitrară de rute. Dacă combinația actuală nu poate exprima prefixele de care aveți nevoie, pasul următor este o cale de configurare acceptată de operator, nu o altă aplicație instalată în speranța că se comportă mai bine.

Durata de viață include curățarea

Uneori un ajutor extern este cu adevărat necesar, iar atunci «adaugă ruta» este cea mai mică parte a muncii sale. Trebuie să știe cărei conexiuni îi servește și ce interfață folosește acea conexiune, să aștepte până când starea de rețea relevantă se stabilizează, să rămână idempotent când rulează de două ori la rând, și să nu curețe nimic ce nu a instalat el însuși.

Ultima clauză este cea care doare. Un ajutor care șterge fiecare rută care corespunde prefixului de birou va șterge, mai devreme sau mai târziu, o rută pe care nu a adăugat-o. Întreruperea rezultată este pusă pe seama clientului VPN, pentru că clientul este partea pe care o vede utilizatorul. Să decizi ce deține un ajutor înainte de a-l scrie este mai ieftin decât să explici după aceea de ce o subrețea locală a încetat să răspundă.

Cursa reconectării

Imaginați-vă o reconectare rapidă. Sesiunea A cade, sesiunea B urcă și își instalează ruta, apoi curățarea întârziată a lui A rulează în sfârșit. Dacă acea curățare elimină rute după prefix, ia cu ea starea validă a lui B, iar conexiunea care funcționa acum o secundă rutează acum în nimic.

Aceasta este o cursă de proprietate, iar adăugarea unei pauze în script schimbă doar care parte o câștigă. Soluția este să faci curățarea condiționată de identitate: compară interfața și sesiunea pe care le-a instalat ajutorul cu cele încă valabile și elimină doar la potrivire.

Ce să testați și ce nu poate face o rută

Acceptarea trebuie să acopere patru tranziții: prima conexiune, o reconectare pe o altă interfață, o încercare de conectare eșuată și deconectarea finală. După fiecare, citiți ruta pe care sistemul a ales-o efectiv pentru o adresă de pe partea îndepărtată, nu pe cea pe care o așteptați.

route -n get 10.77.0.5
netstat -rn -f inet

Includeți cazurile incomode în aceeași rundă: IPv6 acolo unde este necesar, un prefix local care se suprapune cu cel îndepărtat și ruta către punctul final public al VPN-ului însuși, care trebuie să continue să funcționeze cât timp tunelul este ridicat. Apoi notați ce nu este o rută. Selectează pachete; nu acordă permisiune pe partea îndepărtată și nu creează o cale de întoarcere, iar acestea rămân cerințe separate cu proprietari separați.

Rezultatul pe care îl doriți este un prefix care urmează proprietarul său de conexiune acceptat prin fiecare tranziție, nu o comandă care a reușit o dată din întâmplare pe mașina pe care a fost scrisă.

Articole similare