Come posso eseguire uno script dopo che OpenVPN si è connesso correttamente?


50

Come posso associare uno script a OpenVPN in modo che venga eseguito quando la VPN è connessa correttamente?


Nel caso del cliente immagino? Che software stai usando? OpenVPN o un wrapper (ad esempio NetworkManager)?
Lekensteyn,

@Lekensteyn, wrapper network-manger-openvpn.
Oxwivi

Risposte:


62

network-manager-openvpnnon fornisce tale funzionalità, è necessario utilizzare openvpndirettamente.

Passalo --script-security 2 --up /path/to/your/scriptquando ti connetti. Se stai utilizzando un file di configurazione situato in /etc/openvpn/, aggiungi le righe successive al tuo file di configurazione:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

Dalla manpage OpenVPN :

--script-security level [metodo]
              Questa direttiva offre un controllo a livello di policy sull'utilizzo di OpenVPN
              di programmi e script esterni. I valori di livello inferiore sono maggiori
              valori più restrittivi e più elevati sono più permissivi. Impostazioni per
              livello:

              0 - Assolutamente nessuna chiamata a programmi esterni.
              1 - (impostazione predefinita) chiama solo gli eseguibili incorporati come ifconfig,
              ip, route o netsh.
              2 - Consenti la chiamata di eseguibili integrati e definiti dall'utente
              script.
              3 - Consentire il passaggio delle password agli script via ambientale
              variabili (potenzialmente non sicure).
       --up cmd
              Comando Shell da eseguire dopo l'apertura corretta del dispositivo TUN / TAP (pre
              - modifica UID utente). Lo script up è utile per specificare
              comandi route che instradano il traffico IP destinato al privato
              sottoreti esistenti all'altra estremità della connessione VPN in
              la galleria.
Ordine di esecuzione degli script
       --up Eseguito dopo il bind del socket TCP / UDP e TUN / TAP aperti.
       --down Eseguito dopo la chiusura di TCP / UDP e TUN / TAP.

Ci sono più eventi per l'esecuzione degli script, quelli possono essere trovati nella pagina del manuale .

Crea /etc/openvpn/up.she concedi le autorizzazioni di esecuzione (diciamo 755 o 700). Contenuto di esempio per l'aggiunta di un indirizzo IPv6 e di un percorso (mostrato a scopo didattico, non copiarlo direttamente):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

Si noti che questo upscript viene eseguito come root. Se non hai specificato a Usere Groupimpostazione, OpenVPN eseguirà anche script come downroot.


Se non sai come usare direttamente openvpn, aggiungi i dettagli della tua configurazione attuale: Tipo di connessione (es. Certificati X509), Porta gateway, compressione LZO, forza del TCP, uso del dispositivo tap, cifratura, HMAC e TLS. Indica anche le tue impostazioni IP se non sono automatiche. Per la tua privacy, lascia fuori i tuoi indirizzi reali.
Lekensteyn,

Va bene, ho deciso di utilizzare OpenVPN direttamente (e sì, ho il file .conf), ma si riconnetterà automaticamente se si perde la connessione? E come posso collegarmi automaticamente ogni volta che c'è una connessione Internet? E infine, non ho capito dove dovevo aggiungere le righe che hai citato nella risposta.
Oxwivi,

Ho ampliato la risposta da utilizzare openvpndirettamente. Durante l'impostazione di un server, ho notato che OpenVPN tenterà di riconnettersi quando il server si è spento. Non sono sicuro se OpenVPN continua a provare quando l'interfaccia di rete non funziona.
Lekensteyn,

Il mio problema non è quando l'interfaccia di rete si interrompe: tenta di riconnettersi quando si perde e si ripristina la connessione a Internet. Voglio solo collegarmi alla VPN ogni volta che ottengo una connessione Internet.
Oxwivi,

Oh, e lo script si applica a tutte le connessioni VPN? E per favore tagga @Oxwivi quando rispondi, altrimenti non riceverò una notifica.
Oxwivi,

5

Alla domanda: "Come posso associare uno script a OpenVPN in modo che venga eseguito quando la VPN è connessa correttamente?" Voglio sottolineare che Lekensteyn ha fornito una risposta eccellente . Ma, al momento in cui la sua risposta fu composta, mancava un po 'di chiarezza su come gli argomenti della riga di comando di openvpn dovevano essere forniti per avviare openvpn su una macchina Ubuntu, specialmente in modo che funzioni allo stesso modo dopo il riavvio.


Argomenti della riga di comando di Openvpn su Ubuntu:

Naturalmente, è possibile avviare openvpn da una riga di comando con qualsiasi opzione legale disponibile. Ma, su una macchina Ubuntu, se si desidera avviare openvpn con gli stessi argomenti della riga di comando dopo un riavvio, dovrebbero prendere in considerazione la modifica del file /etc/default/openvpn. Esamina le seguenti righe:

# Optional arguments to openvpn's command line
OPTARGS="" 

Dalla pagina man della community di openvpn in poi--script-security

--script-livello di sicurezza
    Questa direttiva offre un controllo a livello di policy sull'utilizzo di OpenVPN da parte di utenti esterni 
    programmi e script. I valori di livello inferiore sono più restrittivi, più alti
    i valori sono più permissivi. Impostazioni per livello:
0 - Assolutamente nessuna chiamata a programmi esterni. 
1 - (impostazione predefinita) chiama solo gli eseguibili integrati come ifconfig, ip, route,
o netsh. 
2 - Consenti la chiamata di eseguibili integrati e script definiti dall'utente. 
3 - Consentire il passaggio delle password agli script tramite variabili ambientali
(potenzialmente non sicuro).

Le versioni OpenVPN prima della v2.3 supportavano anche un flag di metodo che indicava come 
OpenVPN dovrebbe chiamare script e comandi esterni. Questo potrebbe essere o eseguire
o sistema. A partire da OpenVPN v2.3, questo flag non è più accettato. Nella maggior parte dei * nix
ambienti l'approccio execve () è stato usato senza problemi.

Alcune direttive come --up consentono di passare le opzioni allo script esterno.
In questi casi, assicurarsi che il nome dello script non contenga spazi o 
il parser di configurazione si strozzerà perché non è in grado di determinare dove si trova lo script 
il nome termina e iniziano le opzioni di script.

Combinato con una sezione abbreviata su --up

--up cmd
    Eseguire il comando cmd dopo aver aperto correttamente il dispositivo TUN / TAP (modifica UID preutente).
    cmd consiste in un percorso di script (o programma eseguibile), facoltativamente seguito
    per argomenti. Il percorso e gli argomenti possono essere tra virgolette singole o doppie e / o
    fuggito usando una barra rovesciata e dovrebbe essere separato da uno o più spazi.

Esempio:

Sul mio computer con un server.conf openpvn, ho le seguenti righe nel mio /etc/default/openvpnfile:

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

Per inciso, nat.sh imposta la traduzione dell'indirizzo di rete per instradare il traffico di rete privata dai client openvpn a Internet pubblico; che è buono per quando non si ha fiducia in un punto di accesso WIFI pubblico.


Oltre a consentire il riavvio come previsto dopo un riavvio, quando /etc/openvpn/[client or server].confe i /etc/default/openvpnfile sono configurati correttamente, openvpn può essere avviato o arrestato con:

sudo service openvpn start
sudo service openvpn stop

Altre opzioni utili disponibili per service openvpnincludere cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.


3

Dato che è un thread piuttosto vecchio, non sono sicuro che sia ancora interessante. Se desideri comunque utilizzare NetworkManager per connetterti a una VPN, puoi aggiungere una semplice regola udev come quella:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

Questo dovrebbe eseguire qualsiasi script dopo la creazione della VPN.


1

Mi sono imbattuto nella risposta nella mia ricerca per risolvere questo problema e ho scoperto che la soluzione migliore è (utilizzando il server openvpn) come segue:

Crea uno script da eseguire:

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

Aggiungi le seguenti righe nella configurazione di openvpn (di solito /etc/openvpn/server.conf). Nella risposta sopra è stato utilizzato su e giù, che vengono utilizzati all'avvio (riavvio) del server. La direttiva client-connect (e client-disconnect) viene utilizzata quando il client si connette (si disconnette).

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>

Come includeresti il ​​nome di configurazione del client nel file di registro?
callisto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.