Menggunakan OpenVPN dengan systemd

24

Ok, jadi saya sudah mencari di web untuk solusi untuk masalah ini tanpa jawaban yang sepertinya bekerja untuk saya. Semoga ada yang bisa membantu saya. Saya hanya mencoba mengkonfigurasi Klien OpenVPN.

Saya sedang menjalankan CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxdan saya baru saja beralih menggunakan systemd. Pergantian berjalan cukup lancar tapi sekarang saya tidak bisa mendapatkan klien OpenVPN saya untuk datang menggunakan systemd Saya sudah mencoba mengikuti tutorial konfigurasi ini, tetapi tidak ada yang berhasil.

Saya dapat memunculkan terowongan dari baris perintah dengan openvpn /etc/openvpn/vpn.conf. Jadi saya tahu file konfigurasi itu baik, itu bekerja dengan sysvinit baik-baik saja jadi saya tidak terkejut. Saya kemudian mencoba untuk melakukan status dengan systemctl status [email protected]menghasilkan:

$ sudo systemctl status [email protected]
  [email protected]
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

Saya menyadari bahwa saya perlu melakukan beberapa pengaturan untuk layanan. Saya ingin diminta untuk password jadi saya mengikuti panduan ini untuk membuat [email protected]di /etc/systemd/system/. Tetapi memulai kembali layanan OpenVPN masih tidak meminta kata sandi.

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

Tutorial Fedora mengikuti langkah-langkah membuat tautan simbolis, tetapi jangan membuat file .service di walk-throughs.

Bagian apa yang saya lewatkan? Apakah saya perlu membuat [email protected]? Jika demikian, di mana tepatnya saya meletakkannya? Saya merasa seharusnya tidak sesulit ini, tetapi sepertinya saya tidak dapat menemukan solusi yang cocok untuk saya. Saya senang memberikan informasi lebih lanjut yang dibutuhkan.

Larutan

-rw-r--r--  1 root root   319 Aug  7 10:42 [email protected]

[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
[email protected] (END)

Simbol:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 [email protected] -> /lib/systemd/system/[email protected]

Prompt Untuk Kata Sandi

Semuanya berfungsi sekarang, kecuali diminta kata sandi untuk terhubung. Saya sudah mencoba solusi ini . Saya tweak file dari atas hanya sedikit, dan menambahkan script Harapkan seperti dalam contoh. Bekerja seperti pesona! File saya di bawah.

Baris yang dimodifikasi dari atas /lib/systemd/system/[email protected]

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

Skrip yang diharapkan /lib/systemd/system/openvpn_pw.exp. Pastikan untuk melakukan hal berikut:

  • chmod +x pada naskah.
  • Telah telnetdiinstal

Kode skrip harapan:

#!/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

Perlu dicatat bahwa solusi di atas tidak mencatat kata sandi Anda yang dimasukkan dalam plaintext di log berikut /var/log/syslogdan/var/log/daemon.log

RoraΖ
sumber
[email protected]Seperti apa file itu?
Cristian Ciupitu
Diperbarui pos dengan kesalahan saat ini
RoraΖ
Lihat di /var/log/{syslog,daemon.log} dan journalctl -b -muntuk mencari tahu mengapa OpenVPN keluar. Salah satu tempat itu harus mengandung pesan kesalahan nyata. (Atau bahkan journalctl -b -m _EXE=/usr/sbin/openvpnharus memberikan pesan OpenVPN saja).
derobert
Yap, saya sudah sampai di sana. Kami menekan masalah kata sandi. Saya akan mencoba solusi ini untuk itu: bbs.archlinux.org/viewtopic.php?id=150440 Terima kasih atas semua bantuan Anda!
RoraΖ

Jawaban:

11

Saya pikir setup OpenVPN Debian dengan systemd saat ini agak rusak. Untuk membuatnya bekerja pada mesin saya, saya harus:

  1. Buat /etc/systemd/system/[email protected](direktori), dan letakkan di dalamnya file baru dengan ini:

    [Satuan]
    Membutuhkan = networking.service
    Setelah = networking.service
    Saya menelepon file saya local-after-ifup.conf. Itu harus diakhiri dengan .conf. (Ini adalah bit yang saat ini agak rusak.)

  2. Buat file di /etc/tmpfiles.d(saya sebut milik saya local-openvpn.conf) dengan konten:

    # Ketikkan Path Mode UID GID Age Argument
    d / run / openvpn 0755 root root - -
    Ini adalah bug Debian 741938 (diperbaiki pada 2.3.3-1).

  3. Buat symlink ke multi-user.target.wants(cara termudah adalah systemctl enable openvpn@CONF_NAME.service) Misalnya, jika sudah /etc/openvpn/foo.conf, Anda akan menggunakan [email protected].

  4. Jika Anda juga memiliki skrip init SysV muncul di systemd, nonaktifkan itu. Ini adalah bug Debian 700888 (diperbaiki pada 2.3.3-1).

CATATAN: 2.3.3-1 atau lebih baru belum dalam pengujian , meskipun dalam kondisi tidak stabil.

derobert
sumber
aktifkan systemctl masih gagal mengatakan tidak ada file atau direktori tersebut. Saya tidak melihat skrip init sysv di / lib / systemd, kecuali systemd-initctl-nya?
RoraΖ
@raz Script SysV adalah /etc/init.d/openvpn; systemd secara default menjalankannya seperti sysv init. Itu yang openvpn.serviceAnda miliki; Anda harus menonaktifkannya ( systemctl disable). Apakah file /lib/systemd/system/[email protected]ada di sistem Anda?
derobert
@ Mad Jika Anda memiliki file itu, Anda dapat mencoba manualln -s /lib/systemd/system/[email protected] /etc/systemd/system/multi-user.target.wants/[email protected]
derobert
Saya tidak punya file itu, tetapi saya yakin saya bisa membuatnya. Saya menonaktifkan/etc/init.d/openvpn script.
RoraΖ
@ Mad Saya tidak yakin apakah Crunchbang memiliki backport paket OpenVPN yang lebih baru dengannya, tetapi jika tidak, Anda dapat mengambil skrip itu dari sources.debian.net/src/openvpn/2.3.3-1/debian/…
derobert
8
  1. Masukkan semua file openvpn * .conf ke dalam /etc/openvpn/.
  2. Edit /etc/default/openvpn. Batalkan komentar ini:

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

  4. Lari service openvpn start.
Aleksey Alekseev
sumber
Saya pikir mereka menggunakan ini sebagai solusi, karena sekarang bahkan lebih buruk di debian 9, openvpn tidak memulai kembali jika ada kesalahan yang sangat bodoh ... Seseorang tahu beberapa solusi atau solusi, saya menulis skrip untuk memverifikasi apakah openvpn masih berjalan!
Luciano Andress Martini
Ini sempurna. itu akan mulai dan berhenti meskipun saya menyebutnya yang sudah jelas client.conf, sekarang dengan konfigurasi tunggal saya ini hanya berjalan. Terima kasih!
Mitchell Currie
6

Jenis file unit ini adalah Layanan Instantiated - detail lebih lanjut tersedia di sini

Berikut ini adalah file unit untuk openvpnpada 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

dan itu berada sebagai /usr/lib/systemd/system/openvpn@service. Di %idalam file diganti dengan string setelah @di dalam nama unit.

Karena file konfigurasi sudah di /etc/openvpn/myopenvpn.confmaka layanan dimulai dengan:

systemctl start [email protected]
garethTheRed
sumber
Saya hanya punya /usr/lib/systemd/user/ Tidak ada yang lain di /usr/lib/systemdtingkat.
RoraΖ
Bagaimana dengan /lib/systemd/system/? Saya sepertinya memiliki keduanya di sistem saya, dengan konten yang identik (dan mereka bukan symlink!).
garethTheRed
Saya baru saja menambahkan file itu, memperbarui posting saya dengan segalanya.
RoraΖ
5

Anda perlu membuat file layanan dengan mengaktifkan openvpn@<configuration>.service.

Misalnya, jika file konfigurasi adalah /etc/openvpn/client.conf, nama layanannya [email protected].

Dari Arch Wiki

Karlo
sumber
$ sudo systemctl aktifkan [email protected] [sudo] kata sandi untuk pengguna: Gagal mengeluarkan panggilan metode: Tidak ada file atau direktori seperti itu
RoraΖ
File konfigurasi Anda disebut 'vpn'?
Karlo
Ya,/etc/openvpn/vpn.conf
RoraΖ
Tidak systemctl start [email protected]berhasil juga? Itu seharusnya bekerja ...
Karlo
1
Ini berfungsi untuk saya di Raspbian GNU / Linux 8 (Debian Jessie). Terima kasih!
neuhaus
1

Openvpn @ .service telah berkembang pesat antara Debian 8 dan 9. Paket asli untuk Jessie misalnya gagal systemctl reload openvpn@. Untuk memperbaikinya versi Peregangan memperkenalkan 10 arahan baru dalam file systemd termasuk PIDFile=untuk membuat reload berfungsi lagi.

Untuk pengguna Stretch, saya sarankan pergi untuk backport, dan jika tidak memungkinkan untuk melakukannya, setidaknya dapatkan file systemd dari https://packages.debian.org/jessie-backports/openvpn dan ekstrak debian/[email protected]ke dalam /etc/systemd/system/[email protected]dan nikmati lebih baik fungsi dan keamanan.

Jari Turkia
sumber
0

Solusi yang tepat adalah, dengan menggunakan systemd systemd-ask-password/ " Password Agents ", yang menyediakan cara systemd dibangun untuk menyalurkan kata sandi / frasa sandi ke layanan.

Anda perlu OpenVPN 2.3.0 atau yang lebih baru untuk melakukan ini.

Elias Probst
sumber
Inilah yang digunakan skrip Harapkan dalam posting yang diedit saya.
RoraΖ
Maaf, terjawab hasil edit itu.
Elias Probst
0

Pada instalasi Jessie_8.0.0 segar yang saya lakukan:

  1. salin file lama /etc/openvpn/cluster.conf(plus *.keydan *.crt) dari wheezy
  2. dihapus AUTOSTART="all"di /etc/default/openvpn- saya pikir ini tidak berpengaruh
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart [email protected]

Sekarang terowongan sudah menyala - Saya akan melihat apa yang akan terjadi setelah reboot, tetapi saya tidak bisa mem-boot ulang saat ini

Peter
sumber