Scriptul hook-ului se declanșează, citește ppp0 și aplică rute interfeței care poartă acel nume în acel moment. Uneori este tunelul la care te refereai; uneori este o sesiune care s-a conectat cu un minut mai devreme. Următoarea reconectare mută numărul, iar același script configurează în tăcere legătura greșită. Soluția este să iei interfața din invocarea care tocmai a rulat și să porți profilul dorit alături de ea.

Urmărește o sesiune de la opțiuni până la hook

Începe acolo unde se creează sesiunea. xl2tpd pornește pppd cu fișierul de opțiuni numit de pppoptfile al tunelului respectiv, așa că pluginul, numărul unității și orice marcator de profil se decid acolo, nu într-un fișier global. Un manager de conexiuni poate genera propriile opțiuni, ceea ce înseamnă că editarea /etc/ppp/options nu este dovada că tunelul care te interesează s-a schimbat. Când legătura urcă, pppd rulează scripturile de notificare de la expeditorul distribuției. Acele scripturi primesc numele interfeței ca prim argument și marcatorul de profil ca al șaselea.

Mediul poartă aceleași fapte sub nume precum IFNAME și PPP_IPPARAM, dar disponibilitatea lor depinde de expeditorul instalat. Citește expeditorul înainte de a te baza pe o variabilă: unele distribuții păstrează ordinea argumentelor upstream, altele filtrează mediul înainte de a-ți apela scriptul. Un script care folosește doar $1 și al șaselea argument funcționează în ambele aranjamente.

Citește interfața din invocare

Hook-ul tradițional primește interfața prima. Acea valoare pozițională este identificatorul interfeței care descrie sesiunea ce a declanșat scriptul. Salveaz-o într-o variabilă în partea de sus, apoi folosește variabila pentru rute, reguli de firewall și demontare.

ipparam office-vpn

Atașează un marcator de profil acolo unde sunt definite opțiunile, nu în script. Cu acea linie în fișierul de opțiuni al tunelului, fiecare sesiune creată din acel fișier poartă office-vpn ca al șaselea argument. Scriptul poate ramifica pe marcator acționând în continuare pe interfața reală. Ține cele două separate în cod, pentru că marcatorul este stabil, iar interfața este alocată pe sesiune.

Cere un nume doar când refuzul este corect

Un nume fix pare mai simplu decât citirea argumentelor, dar schimbă comportamentul la eșec. Opțiunea unit cere un număr pentru o conexiune de ieșire, iar pppd trece la alocare dinamică atunci când acea unitate este deja ocupată. Nimic din acel rezultat nu rezervă ppp0 pentru profilul tău.

ifname ppp-office

Opțiunea ifname se comportă diferit: dacă numele cerut este deja folosit sau nu poate fi atribuit, pppd iese în loc să aleagă altul. Este o alegere de politică, nu o redenumire cosmetică. Folosește-o când o a doua instanță simultană a aceluiași profil trebuie refuzată și confirmă că pppd instalat și managerul tău de conexiuni transmit opțiunea.

În orice caz, numele pe care îl vede scriptul este cel pe care trebuie să acționezi. Un nume configurat nu elimină nevoia de a citi invocarea, pentru că o sesiune repornită poate prezenta încă un nume diferit de precedentul.

Potrivește demontarea cu sesiunea configurată

Rutele și regulile de firewall supraviețuiesc scriptului care le-a creat, deci demontarea trebuie să elimine exact obiectele pe care le deține sesiunea. Marchează regulile cu marcatorul de profil și cu interfața, și șterge după acea marcă. Dacă două tuneluri pot fi active, ștergerea a tot ce menționează ppp este modul în care o deconectare strică cealaltă conexiune.

Testează cazul care expune eroarea: ridică a doua sesiune PPP cât timp prima este încă conectată, apoi reconectează prima și observă ce interfață raportează hook-ul. O rulare reușită cu o singură sesiune nu dovedește nimic despre alocarea numelor. Repetă cu VPN-ul oprit pentru a confirma că demontarea nu lasă o rută învechită.

Păstrează marcatorul, interfața și calea hook-ului în notele de implementare. Când numărul se schimbă după o repornire, acele trei valori explică de ce scriptul s-a comportat diferit fără nicio modificare de configurație.

Articole similare