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


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


42
2018-03-02 15:35


origine


Nel caso del cliente, immagino? Che software stai usando? OpenVPN o un wrapper (ad esempio NetworkManager)? - Lekensteyn
@Lekensteyn, wrapper network-manger-openvpn. - Oxwivi


risposte:


network-manager-openvpn non fornisce tale funzionalità, è necessario utilizzare openvpn direttamente.

Passaggio --script-security 2 --up /path/to/your/script ad esso durante la connessione. Se stai usando 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

Dal OpenVPN manpage:

--script-livello di sicurezza [metodo]
              Questa direttiva offre un controllo a livello di policy sull'uso di OpenVPN
              di programmi e script esterni. I valori di livello inferiore sono più
              i valori restrittivi e più alti sono più permissivi. Impostazioni per
              livello:

              0 - Rigorosamente nessuna chiamata a programmi esterni.
              1 - (Predefinito) Richiama solo eseguibili incorporati come ifconfig,
              ip, route o netsh.
               2 - Consenti la chiamata di eseguibili predefiniti e definiti dall'utente
              script.
              3 - Consenti alle password di essere passate agli script tramite l'ambiente
              variabili (potenzialmente non sicure).
       --up cmd
              Comando di shell da eseguire dopo l'apertura del dispositivo TUN / TAP con successo (pre
              - cambio UID utente). Lo script up è utile per specificare
              instradare i comandi che indirizzano il traffico IP destinato al privato
              sottoreti che esistono all'altra estremità della connessione VPN in
              la galleria.
Script Ordine di esecuzione
       --up Eseguito dopo il binding del socket TCP / UDP e TUN / TAP aperto.
       --down Eseguito dopo TCP / UDP e TUN / TAP chiudi.

Ci sono altri eventi per l'esecuzione dello script, quelli possono essere trovati sul pagina di manuale.

Creare /etc/openvpn/up.she dargli i permessi di esecuzione (ad esempio, 755 o 700). Contenuto di esempio per l'aggiunta di un indirizzo IPv6 e il 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 up lo script viene eseguito come root. Se non hai specificato a User e Group impostazione, OpenVPN eseguirà script come down anche come root.


52
2018-03-02 18:36



Se non sai come usare openvpn direttamente, aggiungi i tuoi dettagli di configurazione attuali: Tipo di connessione (ad esempio certificati X509), Porta gateway, compressione LZO, forza TCP, utilizzo di dispositivo di tocco, crittografia, HMAC e TLS. Menziona anche le tue impostazioni IP se non sono automatiche. Per la tua privacy, lascia i tuoi indirizzi reali. - Lekensteyn
Ok, ho deciso di utilizzare direttamente OpenVPN (e sì, ho il file .conf), ma si ricollegherà automaticamente se la connessione viene persa? E come faccio a connetterlo automaticamente ogni volta che c'è una connessione Internet? E infine, non ho capito dove devo aggiungere le righe che hai citato nella risposta. - Oxwivi
Ho ampliato la risposta da usare openvpn direttamente. Durante la configurazione di un server, ho notato che OpenVPN proverà a riconnettersi quando il server è andato giù. Non sono sicuro che OpenVPN continui a provare quando l'interfaccia di rete non funziona. - Lekensteyn
Il mio problema non è quando l'interfaccia di rete va giù - prova a riconnettersi quando la connessione internet viene persa e recuperata. Voglio solo collegarmi alla VPN ogni volta che ottengo la connessione internet. - Oxwivi
Oh, e lo script si applica a tutte le connessioni VPN? E per favoretag @Oxwivi quando rispondi, altrimenti non ricevo la notifica. - Oxwivi


Alla domanda: "Come posso associare uno script a OpenVPN in modo che venga eseguito quando la VPN è connessa correttamente?" Voglio precisarlo Lekensteyn fornito un eccellente risposta. Ma, al momento della sua risposta, 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, soprattutto perché funzionasse 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. Esaminare le seguenti linee:

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

Dal pagina man di community openvpn sopra --script-security

--script-livello di sicurezza
    Questa direttiva offre un controllo a livello di policy sull'uso di External da parte di OpenVPN
    programmi e script. I valori di livello inferiore sono più restrittivi, più alti
    i valori sono più permissivi. Impostazioni per il livello:
0 - Rigorosamente nessuna chiamata a programmi esterni.
1 - (Predefinito) Richiama solo eseguibili incorporati come ifconfig, ip, route,
o netsh.
2 - Consenti la chiamata di eseguibili incorporati e script definiti dall'utente.
3 - Consenti alle password di essere passate agli script tramite variabili ambientali
(potenzialmente pericoloso).

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

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

Combinato con una sezione abbreviata su --up 

--up cmd
    Esegui comando cmd dopo che il dispositivo TUN / TAP ha avuto esito positivo (modifica UID pre-utente).
    cmd consiste in un percorso per lo script (o un programma eseguibile), opzionalmente seguito
    da argomenti. Il percorso e gli argomenti possono essere singoli o doppi e / o
    fuggito usando una barra rovesciata e dovrebbe essere separato da uno o più spazi.

Esempio:

Sulla mia macchina con openpvn server.conf, ho le seguenti linee nella mia /etc/default/openvpn file:

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

Indecentemente, il nat.sh imposta la conversione degli indirizzi di rete per il routing del traffico di rete privata dai client openvpn alla rete pubblica; che è utile quando non ci si fida di un punto di accesso WIFI pubblico.


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

sudo service openvpn start
sudo service openvpn stop

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


4
2017-07-12 18:21





Poiché questo è un thread piuttosto vecchio, non sono sicuro che sia ancora interessante. Se vuoi ancora utilizzare NetworkManager per connetterti a una VPN puoi aggiungere una semplice regola di udev in questo modo:

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

Questo dovrebbe eseguire qualsiasi script dopo la creazione della VPN.


1
2017-07-11 09:02





Mi sono imbattuto nella risposta alla 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 linee nella configurazione di openvpn (di solito /etc/openvpn/server.conf). Nella risposta sopra è stato utilizzato su e giù, che vengono utilizzati all'avvio del server (riavvio). La direttiva client-connect (e client-disconnect) vengono utilizzate quando il client si connette (disconnette).

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

0
2017-09-14 10:08