Hook-skriptet utløses, leser ppp0 og bruker ruter på det grensesnittet som eier navnet i det øyeblikket. Noen ganger er det tunnelen du mente; noen ganger er det en økt som koblet til et minutt tidligere. Neste gjenoppkobling flytter nummeret, og det samme skriptet konfigurerer stille feil forbindelse. Løsningen er å ta grensesnittet fra kallet som nettopp kjørte, og bære den tiltenkte profilen sammen med det.

Følg én økt fra alternativene til hooken

Begynn der økten opprettes. xl2tpd starter pppd med alternativfilen som pppoptfile for den tunnelen navngir, så plugin-modulen, enhetsnummeret og enhver profilmarkør avgjøres der og ikke i en global fil. En tilkoblingsbehandler kan generere sine egne alternativer, noe som betyr at redigering av /etc/ppp/options ikke er bevis på at tunnelen du bryr deg om er endret. Når koblingen kommer opp, kjører pppd varselskriptene fra distribusjonens utsender. Disse skriptene mottar grensesnittnavnet som første argument og profilmarkøren som det sjette.

Miljøet bærer de samme fakta under navn som IFNAME og PPP_IPPARAM, men tilgjengeligheten avhenger av utsenderen som er installert. Les utsenderen før du stoler på en variabel: noen distribusjoner beholder upstream-argumentrekkefølgen, andre filtrerer miljøet før de kaller skriptet ditt. Et skript som bare bruker $1 og det sjette argumentet, fungerer under begge ordningene.

Les grensesnittet fra kallet

Den tradisjonelle hooken mottar grensesnittet først. Den posisjonsverdien er grensesnittidentifikatoren som beskriver økten som utløste skriptet. Lagre den i en variabel øverst, og bruk deretter variabelen til ruter, brannmurregler og nedriving.

ipparam office-vpn

Fest en profilmarkør der alternativene defineres, ikke i skriptet. Med den linjen i tunnelens alternativfil bærer hver økt som opprettes fra filen, office-vpn som sitt sjette argument. Skriptet kan forgrene seg på markøren mens det fortsatt handler på det virkelige grensesnittet. Hold de to adskilt i koden, fordi markøren er stabil og grensesnittet tildeles per økt.

Be om et navn bare når avvisning er riktig

Et fast navn ser enklere ut enn å lese argumenter, men det endrer feilatferden. Alternativet unit ber om et nummer for en utgående forbindelse, og pppd faller tilbake til dynamisk tildeling når den enheten allerede er opptatt. Ingenting i det resultatet reserverer ppp0 for profilen din.

ifname ppp-office

Alternativet ifname oppfører seg annerledes: hvis det forespurte navnet allerede er i bruk eller ikke kan tildeles, avslutter pppd i stedet for å velge et annet. Det er et policyvalg, ikke en kosmetisk omdøping. Bruk det når en andre samtidig forekomst av samme profil skal avvises, og bekreft at den installerte pppd og tilkoblingsbehandleren din sender alternativet videre.

Uansett er navnet skriptet ser, det som må handles på. Et konfigurert navn fjerner ikke behovet for å lese kallet, fordi en omstartet økt fortsatt kan presentere et annet navn enn den forrige.

Få nedrivingen til å matche økten du konfigurerte

Ruter og brannmurregler overlever skriptet som opprettet dem, så nedrivingen må fjerne nøyaktig objektene som økten eier. Merk regler med profilmarkøren så vel som grensesnittet, og slett etter den merkingen. Hvis to tunneler kan være oppe, er sletting av alt som nevner ppp måten én frakobling ødelegger den andre forbindelsen.

Test tilfellet som avdekker feilen: ta opp den andre PPP-økten mens den første fortsatt er tilkoblet, og koble deretter den første til på nytt og se hvilket grensesnitt hooken rapporterer. En vellykket kjøring med én økt beviser ingenting om navnetildeling. Gjenta med VPN stoppet for å bekrefte at nedrivingen ikke etterlater en utdatert rute.

Hold markøren, grensesnittet og hook-stien i distribusjonsnotatene. Når nummeret endres etter en omstart, forklarer disse tre verdiene hvorfor skriptet oppførte seg annerledes uten noen konfigurasjonsendring.

Relaterte artikler