ifconfig-noexec non salva la tua sessione SSH: cosa fa davvero
Sopprime la configurazione dell’indirizzo dell’interfaccia fatta da OpenVPN stesso. Non riserva una rotta di risposta per SSH, non disattiva ogni cambio di rotta e non fornisce l’indirizzo mancante.
In un thread di un forum, ifconfig-noexec viene proposto come la soluzione che tiene viva una sessione SSH quando sale un tunnel. Il ragionamento sembra plausibile finché non guardi cosa tocca davvero l’opzione. Impedisce a OpenVPN di configurare l’indirizzo dell’interfaccia del tunnel e passa quei valori agli script; non dice nulla su dove finiscono le risposte alla tua connessione di gestione. Credere il contrario produce un tunnel senza indirizzo utilizzabile e una sessione SSH che muore comunque.
Cosa delega davvero l’opzione
Per impostazione predefinita, il client attiva il dispositivo del tunnel e assegna gli indirizzi locale e remoto che il server gli ha passato. Con ifconfig-noexec impostato, quel passaggio viene saltato e i valori negoziati vengono esportati nell’ambiente degli script perché qualcos’altro possa applicarli.
La proprietà si sposta. Al suo posto non viene inventato nulla.
Quindi la domanda a cui l’opzione risponde è chi configura l’interfaccia, e la domanda a cui non risponde è come i pacchetti trovano la via di ritorno verso di te. Tieni separate le due cose, altrimenti passerai una serata a modificare rotte per compensare un’interfaccia senza indirizzo.
Tre opzioni simili con compiti diversi
La famiglia è facile da confondere perché i nomi differiscono di una parola e i sintomi si sovrappongono. Leggi cosa sopprime ciascuna prima di sceglierne una.
| Option | What stops happening |
|---|---|
ifconfig-noexec | OpenVPN's own tunnel-address configuration; values go to scripts instead |
route-noexec | Automatic route addition and removal; route details go to a script |
route-nopull | Server-pushed routes and related options such as DNS are rejected |
Sono alternative da capire una per una, non un insieme da incollare insieme. Sopprimere la configurazione dell’indirizzo non sopprime i cambi di rotta, le regole del firewall o le opzioni spinte che trasportano DNS. Uno script delegato è anche libero di cambiare le rotte, che è una decisione che stai consegnando invece di evitare.
Se un client di un fornitore avvolge il motore, usa la sua integrazione supportata invece di infilare una direttiva di basso livello in un profilo e sperare che il wrapper la rispetti. I wrapper spesso rigenerano il profilo alla connessione, così una modifica manuale sparisce senza errore. Controlla dove il client tiene le sue impostazioni prima di passare una serata sul file. Vale per ogni riga della tabella, non solo per quella per cui sei venuto.
La sessione SSH che volevi proteggere
Una connessione SSH ha un indirizzo di origine, un indirizzo di destinazione e un percorso di risposta. Su un server che ha appena installato un default a tunnel completo, la risposta al tuo indirizzo pubblico combacia con il tunnel e il gateway VPN la scarta.
Niente nella configurazione degli indirizzi dell’interfaccia del tunnel cambia questo.
Quello che lo risolve è una rotta più specifica per il tuo indirizzo di gestione attraverso il gateway pre-tunnel, o una regola di policy che indirizza quel traffico, più le impostazioni di filtro che il tuo host applica. I due problemi a volte compaiono insieme, ed è così che uno viene scambiato per la cura dell’altro. Provali separatamente: alza il tunnel senza l’opzione, guarda l’indirizzo dell’interfaccia e il percorso di risposta, poi decidi quale dei due è davvero rotto.
Cosa deve prendere in carico uno script delegato
Se vuoi davvero che un altro proprietario configuri l’interfaccia, elenca il lavoro: applica l’indirizzo locale e quello remoto, alza il dispositivo, ripristina o rimuovi l’indirizzamento allo smontaggio e fai lo stesso di nuovo dopo una riconnessione. I valori di una sessione riuscita non vanno codificati a mano, perché il server potrebbe dare una coppia diversa la prossima volta.
Le variabili d’ambiente esportate dal client sono l’unico input supportato per quel lavoro.
env | grep -E '^ifconfig_|^route_'Dentro uno script route-up quelle variabili sono disponibili; da un processo cron o da una shell manuale no. Verifica quale hook del ciclo di vita usa la tua versione e verifica che l’hook giri con privilegi sufficienti a cambiare l’interfaccia, perché il client potrebbe essere già sceso a un utente senza privilegi.
Prova l’intero ciclo di vita, non una sola sessione
Alza il tunnel, controlla l’indirizzo sul dispositivo, poi riconnetti e controlla di nuovo. Una configurazione che funziona una volta e fallisce al secondo tentativo di solito significa che il passaggio delegato gira solo alla prima connessione.
Poi prova insieme i due criteri di accettazione: una nuova connessione SSH attraverso il percorso di gestione previsto funziona, e un’applicazione consentita usa correttamente il tunnel.
Una vecchia sessione SSH che sopravvive per caso mentre il tunnel non ha indirizzo non è un successo, ed è esattamente lo stato che questa opzione produce quando nessuno prende in carico il lavoro. Controlla prima l’indirizzo dell’interfaccia, poi il percorso di risposta della gestione, poi l’applicazione. Se due dei tre sono sbagliati, l’opzione ha spostato il lavoro senza dargli un proprietario.