ppp0 eller ppp1? Sådan navngiver du en PPP VPN-session til scripts
pppd giver hver session et interfacenavn og en profilmarkør. Læs begge fra hooket, ikke fra ppp0. Reserver et fast navn, kun når afvisning er hensigten.
Hook-scriptet udløses, læser ppp0 og anvender ruter på det interface, der på det tidspunkt ejer navnet. Nogle gange er det den tunnel, du mente; nogle gange er det en session, der blev forbundet et minut tidligere. Den næste genopkobling flytter nummeret, og det samme script konfigurerer stille den forkerte forbindelse. Løsningen er at tage interfacet fra det kald, der netop kørte, og bære den tilsigtede profil sammen med det.
Følg én session fra indstillinger til hook
Begynd der, hvor sessionen oprettes. xl2tpd starter pppd med den indstillingsfil, som den tunnels pppoptfile angiver, så plugin, enhedsnummer og enhver profilmarkør afgøres der i stedet for i en global fil. En forbindelsesmanager kan generere sine egne indstillinger, hvilket betyder, at redigering af /etc/ppp/options ikke er bevis for, at den tunnel, du bekymrer dig om, er ændret. Når forbindelsen kommer op, kører pppd underretningsscriptene fra distributionens dispatcher. Disse scripts modtager interfacenavnet som det første argument og profilmarkøren som det sjette.
Miljøet bærer de samme fakta under navne som IFNAME og PPP_IPPARAM, men deres tilgængelighed afhænger af den installerede dispatcher. Læs dispatcheren, før du stoler på en variabel: nogle distributioner beholder upstream-argumentrækkefølgen, andre filtrerer miljøet, før dit script kaldes. Et script, der kun bruger $1 og det sjette argument, virker under begge ordninger.
Læs interfacet fra kaldet
Den traditionelle hook modtager interfacet først. Den positionsværdi er den interfaceidentifikator, der beskriver den session, som udløste scriptet. Gem den i en variabel øverst, og brug derefter variablen til ruter, firewallregler og nedrivning.
ipparam office-vpn
Sæt en profilmarkør der, hvor indstillingerne defineres, ikke i scriptet. Med den linje i tunnelens indstillingsfil bærer hver session, der oprettes fra filen, office-vpn som sit sjette argument. Scriptet kan forgrene sig på markøren og samtidig handle på det rigtige interface. Hold de to adskilt i koden, fordi markøren er stabil, og interfacet tildeles per session.
Bed kun om et navn, når afvisning er korrekt
Et fast navn ser enklere ud end at læse argumenter, men det ændrer fejladfærden. Indstillingen unit anmoder om et nummer til en udgående forbindelse, og pppd falder tilbage til en dynamisk tildeling, når den enhed allerede er optaget. Intet i det resultat reserverer ppp0 til din profil.
ifname ppp-office
Indstillingen ifname opfører sig anderledes: hvis det ønskede navn allerede er i brug eller ikke kan tildeles, afslutter pppd i stedet for at vælge et andet. Det er et politikvalg, ikke en kosmetisk omdøbning. Brug den, når en anden samtidig instans af samme profil skal afvises, og bekræft, at den installerede pppd og din forbindelsesmanager sender indstillingen videre.
Uanset hvad er det navn, scriptet ser, det, der skal handles på. Et konfigureret navn fjerner ikke behovet for at læse kaldet, fordi en genstartet session stadig kan fremvise et andet navn end den forrige.
Få nedrivningen til at matche den session, du konfigurerede
Ruter og firewallregler overlever det script, der oprettede dem, så nedrivningen skal fjerne præcis de objekter, som sessionen ejer. Tag regler med profilmarkøren såvel som interfacet, og slet efter det tag. Hvis to tunneler kan være oppe, er sletning af alt, der nævner ppp, måden, hvorpå én afbrydelse ødelægger den anden forbindelse.
Test det tilfælde, der afslører fejlen: bring den anden PPP-session op, mens den første stadig er forbundet, og genopkobl derefter den første og se, hvilket interface hooken rapporterer. En vellykket kørsel med én session beviser intet om navnetildeling. Gentag med VPN stoppet for at bekræfte, at nedrivningen ikke efterlader en forældet rute.
Gem markøren, interfacet og hook-stien i udrulningsnoterne. Når nummeret ændres efter en genstart, forklarer disse tre værdier, hvorfor scriptet opførte sig anderledes uden nogen konfigurationsændring.