ppp0 o ppp1? Come nominare una sessione VPN PPP per gli script
pppd assegna a ogni sessione un nome di interfaccia e un marcatore di profilo. Leggi entrambi dall’hook, non da ppp0. Riserva un nome fisso solo quando il rifiuto è voluto.
Lo script dell’hook scatta, legge ppp0 e applica le rotte all’interfaccia che in quel momento possiede quel nome. A volte è il tunnel che intendevi; a volte è una sessione connessa un minuto prima. La riconnessione successiva sposta il numero, e lo stesso script configura in silenzio il collegamento sbagliato. La correzione è prendere l’interfaccia dall’invocazione appena eseguita e portare il profilo previsto accanto a essa.
Segui una sessione dalle opzioni all’hook
Parti da dove viene creata la sessione. xl2tpd avvia pppd con il file di opzioni indicato dal pppoptfile di quel tunnel, quindi il plugin, il numero di unità e qualsiasi marcatore di profilo si decidono lì e non in un file globale. Un gestore di connessioni può generare opzioni proprie, il che significa che modificare /etc/ppp/options non è prova che il tunnel che ti interessa sia cambiato. Quando il collegamento sale, pppd esegue gli script di notifica dal dispatcher della distribuzione. Questi script ricevono il nome dell’interfaccia come primo argomento e il marcatore di profilo come sesto.
L’ambiente porta gli stessi fatti con nomi come IFNAME e PPP_IPPARAM, ma la loro disponibilità dipende dal dispatcher installato. Leggi il dispatcher prima di affidarti a una variabile: alcune distribuzioni mantengono l’ordine degli argomenti originale, altre filtrano l’ambiente prima di chiamare il tuo script. Uno script che usa solo $1 e il sesto argomento funziona in entrambe le configurazioni.
Leggi l’interfaccia dall’invocazione
L’hook tradizionale riceve l’interfaccia per primo. Quel valore posizionale è l’identificatore di interfaccia che descrive la sessione che ha attivato lo script. Salvalo in una variabile in alto, poi usa quella variabile per rotte, regole del firewall e smontaggio.
ipparam office-vpn
Allega un marcatore di profilo dove sono definite le opzioni, non nello script. Con quella riga nel file di opzioni del tunnel, ogni sessione creata da quel file porta office-vpn come sesto argomento. Lo script può diramarsi sul marcatore pur agendo sull’interfaccia reale. Tieni i due separati nel codice, perché il marcatore è stabile e l’interfaccia viene allocata per sessione.
Chiedi un nome solo se il rifiuto è corretto
Un nome fisso sembra più semplice che leggere gli argomenti, ma cambia il comportamento in caso di errore. L’opzione unit chiede un numero per una connessione in uscita, e pppd ripiega su un’allocazione dinamica quando quell’unità è già occupata. Niente in quel risultato riserva ppp0 al tuo profilo.
ifname ppp-office
L’opzione ifname si comporta diversamente: se il nome richiesto è già in uso o non può essere assegnato, pppd esce invece di sceglierne un altro. È una scelta di politica, non una rinomina estetica. Usala quando una seconda istanza concorrente dello stesso profilo deve essere rifiutata, e conferma che il pppd installato e il tuo gestore di connessioni passino l’opzione.
In ogni caso, il nome che lo script vede è quello su cui bisogna agire. Un nome configurato non elimina la necessità di leggere l’invocazione, perché una sessione riavviata può ancora presentare un nome diverso dal precedente.
Fai corrispondere lo smontaggio alla sessione configurata
Le rotte e le regole del firewall sopravvivono allo script che le ha create, quindi lo smontaggio deve rimuovere esattamente gli oggetti di cui la sessione è proprietaria. Etichetta le regole con il marcatore di profilo oltre che con l’interfaccia, ed elimina in base a quell’etichetta. Se due tunnel possono essere attivi, cancellare tutto ciò che menziona ppp è il modo in cui una disconnessione rompe l’altra connessione.
Prova il caso che espone il bug: alza la seconda sessione PPP mentre la prima è ancora connessa, poi riconnetti la prima e osserva quale interfaccia riporta l’hook. Un’esecuzione riuscita con una sola sessione non dimostra nulla sull’allocazione dei nomi. Ripeti con la VPN ferma per confermare che lo smontaggio non lasci una rotta obsoleta.
Conserva il marcatore, l’interfaccia e il percorso dell’hook nelle note di distribuzione. Quando il numero cambia dopo un riavvio, quei tre valori spiegano perché lo script si è comportato diversamente senza alcuna modifica alla configurazione.