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 openvpn@vpn.servicemenghasilkan:

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
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 openvpn@.servicedi /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 openvpn@vpn.service? 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 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)

Simbol:

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

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

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


openvpn@.serviceSeperti 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/openvpn@.service.d(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 openvpn@foo.service.

  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.


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/openvpn@.serviceada di sistem Anda?
derobert

@ Mad Jika Anda memiliki file itu, Anda dapat mencoba manualln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
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.

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 openvpn@myopenvpn.service

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 openvpn@client.service.

Dari Arch Wiki


$ sudo systemctl aktifkan openvpn@vpn.service [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 openvpn@vpn.serviceberhasil 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/openvpn@.serviceke dalam /etc/systemd/system/openvpn@.servicedan nikmati lebih baik fungsi dan keamanan.



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 openvpn@cluster.service

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.