Utilizzando OpenVPN con systemd


24

Ok, quindi ho cercato sul web soluzioni a questo problema senza risposte che sembrano funzionare per me. Spero che qualcuno mi possa aiutare. Sto solo cercando di configurare il client OpenVPN.

Sto correndo CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxe sono appena passato all'utilizzo systemd. Il passaggio è andato abbastanza bene, ma ora non riesco a far funzionare il mio client OpenVPN usando systemd, ho provato a seguire questi tutorial di configurazione, ma nulla funziona.

Posso far apparire il tunnel dalla riga di comando con openvpn /etc/openvpn/vpn.conf. Quindi so che il file di configurazione è buono, funzionava bene con sysvinit, quindi non sono sorpreso. Quindi tento di fare uno stato con il systemctl status openvpn@vpn.servicerisultato:

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

Mi sono reso conto che devo fare alcune impostazioni per i servizi. Voglio che mi venga richiesta una password, quindi ho seguito questa guida per creare un openvpn@.servicein /etc/systemd/system/. Ma il riavvio del servizio OpenVPN non richiede ancora una password.

$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.

I tutorial di Fedora illustrano i passaggi per la creazione di collegamenti simbolici, ma non creano alcun file .service nei walk-through.

Quale pezzo mi manca? Devo creare un openvpn@vpn.service? In tal caso, dove lo posiziono esattamente? Sento che non dovrebbe essere così difficile, ma non riesco a trovare alcuna soluzione che funzioni per me. Sono felice di fornire ulteriori informazioni necessarie.

Soluzione

-rw-r--r--  1 root root   319 Aug  7 10:42 openvpn@.service

[Unit]
Description=OpenVPN connection to %i
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target
openvpn@.service (END)

symlink:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service

Richiedi password

Ora funziona tutto, tranne per il fatto che viene richiesta una password per la connessione. Ho provato questa soluzione . Ho modificato leggermente il file dall'alto e ho aggiunto uno script Expect come nell'esempio. Funzionando come un incanto! I miei file sono qui sotto.

Linee modificate da quanto sopra /lib/systemd/system/openvpn@.service

ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --management localhost 5559 --management-query-passwords --management-forget-disconnect --config /etc/openvpn/%i.conf
ExecStartPost=/usr/bin/expect /lib/systemd/system/openvpn_pw.exp

Aspettati lo script /lib/systemd/system/openvpn_pw.exp. Assicurati di fare quanto segue:

  • chmod +x sulla sceneggiatura.
  • Hanno telnetinstallato

Codice dello script prevede:

#!/usr/bin/expect
set pass [exec /bin/systemd-ask-password "Please insert Private Key password: "]

spawn telnet 127.0.0.1 5559
expect "Enter Private Key Password:"
send "password 'Private Key' $pass\r"
expect "SUCCESS: 'Private Key' password entered, but not yet verified"
send "exit\r"
expect eof

Va notato che la soluzione di cui sopra registra la password immessa in testo normale nei seguenti accessi /var/log/sysloge/var/log/daemon.log


Come appare il openvpn@.servicefile?
Cristian Ciupitu,

Aggiornato il post con l'errore corrente
RoraΖ

Cerca in /var/log/{syslog,daemon.log} e journalctl -b -mscopri perché OpenVPN è uscito. Uno di quei posti dovrebbe contenere i messaggi di errore reali. (O anche journalctl -b -m _EXE=/usr/sbin/openvpndovrebbe dare solo messaggi OpenVPN).
derobert,

Sì, ci stavo arrivando. Stiamo riscontrando il problema con la password. Proverò questa soluzione per questo: bbs.archlinux.org/viewtopic.php?id=150440 Grazie per tutto il tuo aiuto!
RoraΖ

Risposte:


11

Penso che l'installazione di Debian OpenVPN con systemd sia attualmente un po 'rotta. Per farlo funzionare sui miei computer ho dovuto:

  1. Crea /etc/systemd/system/openvpn@.service.d(la directory) e inseriscici un nuovo file con questo:

    [Unità]
    Richiede = networking.service
    Dopo = networking.service
    Ho chiamato il mio file local-after-ifup.conf. Deve finire con .conf. (Questo è il bit che al momento è un po 'rotto.)

  2. Crea un file in /etc/tmpfiles.d(ho chiamato il mio local-openvpn.conf) con il contenuto:

    # Tipo Path Mode UID GID Age Argument
    d / run / openvpn 0755 root root - -
    Questo è il bug Debian 741938 (risolto in 2.3.3-1).

  3. Crea un collegamento simbolico in multi-user.target.wants(il modo più semplice è systemctl enable openvpn@CONF_NAME.service) Ad esempio, se hai /etc/openvpn/foo.conf, lo useresti openvpn@foo.service.

  4. Se hai anche lo script SysV init visualizzato in systemd, disabilitalo. Questo è il bug Debian 700888 (risolto in 2.3.3-1).

NOTA: 2.3.3-1 o successivo non è ancora in fase di test , sebbene sia instabile.


l'abilitazione di systemctl non riesce ancora a dire che tale file o directory non esiste. Non vedo alcun script init sysv in / lib / systemd, a meno che non sia systemd-initctl?
RoraΖ

@raz Lo script SysV sarebbe /etc/init.d/openvpn; systemd di default esegue quelli proprio come farebbe sysv init. Questo è quello openvpn.serviceche hai; devi disabilitarlo ( systemctl disable). Il file /lib/systemd/system/openvpn@.serviceesiste sul tuo sistema?
derobert,

@raz Se hai quel file, puoi provare un manualeln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert il

Non ho quel file ma sono sicuro di poterlo creare. Ho disabilitato il/etc/init.d/openvpn script.
RoraΖ

@raz Non sono sicuro che Crunchbang abbia un backport di un nuovo pacchetto OpenVPN con esso, ma in caso contrario, puoi prendere quello script da sources.debian.net/src/openvpn/2.3.3-1/debian/…
derobert

8
  1. Inserire tutti i file openvpn * .conf in /etc/openvpn/.
  2. Modifica /etc/default/openvpn. Rimuovi il commento:

    AUTOSTART="all"
    
  3. Corri systemctl daemon-reload.

  4. Corri service openvpn start.

Penso che abbiano usato questo come soluzione, perché ora è ancora peggio in debian 9, openvpn non si riavvia se si verifica un errore molto stupido ... Qualcuno conosce qualche soluzione o soluzione alternativa, sto scrivendo uno script per verificare se openvpn è ancora in esecuzione!
Luciano Andress Martini,

Questo è stato perfetto inizierebbe e si fermerebbe anche se l'ho chiamato ovvio client.conf, ora con questo il mio unico config funziona. Grazie!
Mitchell Currie

6

Questo tipo di file unitario è un servizio istanziato: maggiori dettagli sono disponibili qui

Di seguito è riportato il file dell'unità per openvpnsu CentOS 7:

[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=syslog.target network.target

[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf

[Install]
WantedBy=multi-user.target

e risiede come /usr/lib/systemd/system/openvpn@service. Il %inel file viene sostituito con la stringa dopo il @nel nome dell'unità.

Poiché il file di configurazione è su, /etc/openvpn/myopenvpn.confil servizio viene avviato con:

systemctl start openvpn@myopenvpn.service

Non ho /usr/lib/systemd/user/ nient'altro a /usr/lib/systemdlivello.
RoraΖ

Che dire /lib/systemd/system/? Mi sembra di avere entrambi sul mio sistema, con contenuti identici (e non sono collegamenti simbolici!).
garethTheRed,

Ho appena aggiunto quel file, aggiornato il mio post con tutto.
RoraΖ

5

È necessario creare il file di servizio abilitando openvpn@<configuration>.service.

Ad esempio, se il file di configurazione è /etc/openvpn/client.conf, il nome del servizio è openvpn@client.service.

Da Arch Wiki


$ sudo systemctl abilita openvpn@vpn.service [sudo] password per l'utente: impossibile eseguire la chiamata del metodo: nessun file o directory di questo tipo
RoraΖ

Il tuo file di configurazione si chiama 'vpn'?
Karlo,

Sì,/etc/openvpn/vpn.conf
RoraΖ

Neanche systemctl start openvpn@vpn.servicefunziona? Che dovrebbe funzionare ...
Karlo

1
Questo funziona per me su Raspbian GNU / Linux 8 (Debian Jessie). Grazie!
neuhaus,

1

Openvpn @ .service si è evoluto notevolmente tra Debians 8 e 9. Ad esempio, il pacchetto originale per Jessie non riesce systemctl reload openvpn@. Per risolvere questi problemi, la versione Stretch introduce 10 nuove direttive nel file systemd, incluso PIDFile=per far funzionare nuovamente la ricarica.

Per gli utenti Stretch, io suggerirei di andare per il backport, e se non è possibile farlo, almeno ottenere lo systemd-file da https://packages.debian.org/jessie-backports/openvpn e l'estratto debian/openvpn@.servicein /etc/systemd/system/openvpn@.servicee vivere al meglio funzionalità e sicurezza.



0

In una nuova installazione di Jessie_8.0.0 ho fatto:

  1. copia i vecchi file /etc/openvpn/cluster.conf(più *.keye *.crt) da wheezy
  2. commentate AUTOSTART="all"in /etc/default/openvpn- penso che questo non ha avuto effetto
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

Ora il tunnel è attivo: vedrò cosa accadrà dopo un riavvio, ma non posso riavviare in questo momento

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.