ppp0 eller ppp1? Så namnger du en PPP VPN-session för skript
pppd ger varje session ett gränssnittsnamn och en profilmarkör. Läs båda från hooken, inte från ppp0. Reservera ett fast namn bara när avvisning är avsiktlig.
Hookskriptet utlöses, läser ppp0 och tillämpar rutter på det gränssnitt som äger namnet i det ögonblicket. Ibland är det tunneln du menade; ibland är det en session som anslöt en minut tidigare. Nästa återanslutning flyttar numret, och samma skript konfigurerar tyst fel länk. Lösningen är att ta gränssnittet från anropet som just kördes, och bära den avsedda profilen bredvid det.
Följ en session från alternativen till hooken
Börja där sessionen skapas. xl2tpd startar pppd med den alternativfil som pppoptfile för den tunneln namnger, så pluginmodulen, enhetsnumret och varje profilmarkör avgörs där och inte i en global fil. En anslutningshanterare kan generera egna alternativ, vilket betyder att redigering av /etc/ppp/options inte är bevis på att tunneln du bryr dig om har ändrats. När länken kommer upp kör pppd aviseringsskripten från distributionens utskickare. Dessa skript tar emot gränssnittsnamnet som första argument och profilmarkören som det sjätte.
Miljön bär samma fakta under namn som IFNAME och PPP_IPPARAM, men deras tillgänglighet beror på utskickaren som är installerad. Läs utskickaren innan du litar på en variabel: vissa distributioner behåller upstream-argumentordningen, andra filtrerar miljön innan de anropar ditt skript. Ett skript som bara använder $1 och det sjätte argumentet fungerar under båda arrangemangen.
Läs gränssnittet från anropet
Den traditionella hooken tar emot gränssnittet först. Det positionsvärdet är gränssnittsidentifieraren som beskriver sessionen som utlöste skriptet. Spara det i en variabel högst upp och använd sedan variabeln för rutter, brandväggsregler och nedmontering.
ipparam office-vpn
Fäst en profilmarkör där alternativen definieras, inte i skriptet. Med den raden i tunnelns alternativfil bär varje session som skapas från filen office-vpn som sitt sjätte argument. Skriptet kan förgrena sig på markören medan det fortfarande agerar på det verkliga gränssnittet. Håll de två åtskilda i koden, eftersom markören är stabil och gränssnittet tilldelas per session.
Begär bara ett namn när avvisning är korrekt
Ett fast namn verkar enklare än att läsa argument, men det ändrar felbeteendet. Alternativet unit begär ett nummer för en utgående anslutning, och pppd faller tillbaka på dynamisk tilldelning när den enheten redan är upptagen. Ingenting i det resultatet reserverar ppp0 för din profil.
ifname ppp-office
Alternativet ifname beter sig annorlunda: om det begärda namnet redan används eller inte kan tilldelas, avslutar pppd i stället för att välja ett annat. Det är ett policyval, inte en kosmetisk namnändring. Använd det när en andra samtidig instans av samma profil ska avvisas, och bekräfta att den installerade pppd och din anslutningshanterare skickar vidare alternativet.
Hur som helst är namnet skriptet ser det som måste hanteras. Ett konfigurerat namn tar inte bort behovet av att läsa anropet, eftersom en omstartad session fortfarande kan presentera ett annat namn än den förra.
Låt nedmonteringen matcha sessionen du konfigurerade
Rutter och brandväggsregler överlever skriptet som skapade dem, så nedmonteringen måste ta bort exakt de objekt som sessionen äger. Märk regler med profilmarkören såväl som gränssnittet, och radera efter den märkningen. Om två tunnlar kan vara uppe, är radering av allt som nämner ppp sättet en frånkoppling förstör den andra anslutningen.
Testa fallet som avslöjar felet: ta upp den andra PPP-sessionen medan den första fortfarande är ansluten, återanslut sedan den första och se vilket gränssnitt hooken rapporterar. En lyckad körning med en session bevisar ingenting om namntilldelning. Upprepa med VPN stoppat för att bekräfta att nedmonteringen inte lämnar en inaktuell rutt.
Behåll markören, gränssnittet och hookvägen i driftsättningsanteckningarna. När numret ändras efter en omstart förklarar dessa tre värden varför skriptet betedde sig annorlunda utan någon konfigurationsändring.