Używanie OpenVPN z systemd

24

Ok, więc szukałem w Internecie rozwiązań tego problemu bez odpowiedzi, które wydają mi się skuteczne. Mam nadzieję, że ktoś może mi pomóc. Próbuję tylko skonfigurować klienta OpenVPN.

Pracuję CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxi właśnie przełączyłem się na używanie systemd. Przełączenie przebiegło wystarczająco sprawnie, ale teraz nie mogę zmusić mojego klienta OpenVPN do uruchomienia za pomocą systemd. Próbowałem wykonać te samouczki konfiguracji, ale nic nie działa.

Mogę wywołać tunel z linii poleceń za pomocą openvpn /etc/openvpn/vpn.conf. Wiem, że plik konfiguracyjny jest dobry, działał dobrze z sysvinit, więc nie jestem zaskoczony. Następnie próbuję po prostu zrobić status, w systemctl status [email protected]wyniku czego:

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

Uświadomiłem sobie, że muszę przeprowadzić konfigurację usług. Chcę zostać poproszony o hasło, więc po tej instrukcji, aby utworzyć [email protected]in /etc/systemd/system/. Jednak ponowne uruchomienie usługi OpenVPN nadal nie monituje o hasło.

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

Samouczki Fedory przechodzą przez etapy tworzenia dowiązań symbolicznych, ale nie tworzą żadnych plików .service w instrukcjach.

Jakiego kawałka mi brakuje? Czy muszę utworzyć usługę openvpn@vpn.? Jeśli tak, gdzie dokładnie go umieścić? Wydaje mi się, że nie powinno to być takie trudne, ale nie mogę znaleźć żadnego rozwiązania, które byłoby dla mnie odpowiednie. Z przyjemnością udzielę wszelkich potrzebnych informacji.

Rozwiązanie

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

Symlink:

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

Monituj o hasło

Teraz wszystko działa, oprócz monitu o podanie hasła do połączenia. Próbowałem tego rozwiązania . Ulepszyłem nieco plik z góry i dodałem skrypt Expect, jak w przykładzie. Działa jak urok! Moje pliki są poniżej.

Zmodyfikowane linie z powyższego /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

Spodziewaj się skryptu /lib/systemd/system/openvpn_pw.exp. Wykonaj następujące czynności:

  • chmod +x na skrypcie.
  • zostały telnetzainstalowane

Kod skryptu expect:

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

Należy zauważyć, że powyższe rozwiązanie rejestruje hasło wprowadzone w postaci zwykłego tekstu w następujących logach /var/log/syslogi/var/log/daemon.log

RoraΖ
źródło
Jak [email protected]wygląda plik?
Cristian Ciupitu,
Zaktualizowano wpis o bieżący błąd
RoraΖ
Zajrzyj do /var/log/{syslog,daemon.log} i journalctl -b -mdowiedz się, dlaczego OpenVPN zakończył pracę. Jedno z tych miejsc powinno zawierać prawdziwe komunikaty o błędach. (Lub nawet journalctl -b -m _EXE=/usr/sbin/openvpnpowinien podawać tylko wiadomości OpenVPN).
derobert
Tak, właśnie tam dotarłem. Występuje problem z hasłem. Spróbuję tego rozwiązania: bbs.archlinux.org/viewtopic.php?id=150440 Dziękujemy za całą pomoc!
RoraΖ

Odpowiedzi:

11

Myślę, że konfiguracja Debian OpenVPN z systemd jest obecnie nieco zepsuta. Aby to działało na moich komputerach, musiałem:

  1. Utwórz /etc/systemd/system/[email protected](katalog) i umieść w nim nowy plik z tym:

    [Jednostka]
    Wymaga = usługa sieciowa
    After = networking.service
    Zadzwoniłem do mojego pliku local-after-ifup.conf. To musi się skończyć .conf. (Jest to kawałek, który obecnie jest odrobinę zepsuty.)

  2. Utwórz plik w /etc/tmpfiles.d(nazwałem mój local-openvpn.conf) z zawartością:

    # Typ Tryb ścieżki UID GID Argument wieku
    d / run / openvpn 0755 root root - -
    To jest błąd Debiana 741938 (naprawiony w 2.3.3-1).

  3. Utwórz dowiązanie symboliczne w multi-user.target.wants(najłatwiejszy sposób systemctl enable openvpn@CONF_NAME.service) Np. Jeśli masz /etc/openvpn/foo.conf, skorzystasz [email protected].

  4. Jeśli masz także skrypt inicjujący SysV wyświetlany w systemied, wyłącz go. To jest błąd Debiana 700888 (naprawiony w 2.3.3-1).

UWAGA: 2.3.3-1 lub nowsza wersja nie jest jeszcze testowana , choć jest niestabilna.

derobert
źródło
systemctl enable nadal nie powie, że nie ma takiego pliku ani katalogu. Nie widzę żadnych skryptów inicjujących sysv w / lib / systemd, chyba że jest to systemd-initctl?
RoraΖ
@raz Skrypt SysV będzie /etc/init.d/openvpn; systemd domyślnie uruchamia te tak, jak sysv init. To openvpn.servicety masz; musisz go wyłączyć ( systemctl disable). Czy plik /lib/systemd/system/[email protected]istnieje w twoim systemie?
derobert
@raz Jeśli masz ten plik, możesz wypróbować instrukcjęln -s /lib/systemd/system/[email protected] /etc/systemd/system/multi-user.target.wants/[email protected]
derobert
Nie mam tego pliku, ale jestem pewien, że mógłbym go utworzyć. I wyłączył/etc/init.d/openvpn script.
RoraΖ
@raz Nie jestem pewien, czy CrunchBang ma backportu z nowszej pakietu OpenVPN z nim, ale jeśli nie, można pobrać ten skrypt od sources.debian.net/src/openvpn/2.3.3-1/debian/...
derobert,
8
  1. Umieść wszystkie pliki openvpn * .conf w /etc/openvpn/.
  2. Edit /etc/default/openvpn. Odkomentuj to:

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

  4. Uruchom service openvpn start.
Aleksey Alekseev
źródło
Myślę, że użyli tego jako rozwiązania, ponieważ teraz jest jeszcze gorzej w Debianie 9, openvpn nie uruchamia się ponownie, jeśli wystąpi błąd, który jest bardzo głupi ... Ktoś zna jakieś rozwiązanie lub obejście, piszę skrypt, aby sprawdzić, czy openvpn wciąż działa!
Luciano Andress Martini
To było idealne. zacznie się i zatrzyma, mimo że nazwałam to oczywistym client.conf, teraz z tym właśnie działa moja pojedyncza konfiguracja. Dzięki!
Mitchell Currie,
6

Ten typ pliku jednostkowego jest usługą tworzenia instancji - więcej informacji można znaleźć tutaj

Poniżej znajduje się plik jednostkowy openvpnCentOS 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

i rezyduje jako /usr/lib/systemd/system/openvpn@service. Plik %iw pliku jest zastępowany łańcuchem po nazwie @w nazwie jednostki.

Ponieważ plik konfiguracyjny jest w, /etc/openvpn/myopenvpn.confusługa jest uruchamiana z:

systemctl start [email protected]
garethTheRed
źródło
Na poziomie /usr/lib/systemd/user/ nie mam nic innego /usr/lib/systemd.
RoraΖ
Co /lib/systemd/system/? Wydaje mi się, że mam oba w moim systemie z identyczną zawartością (i nie są to dowiązania symboliczne!)
garethTheRed
Właśnie dodałem ten plik, wszystko zaktualizowałem.
RoraΖ
5

Musisz utworzyć plik usługi, włączając openvpn@<configuration>.service.

Na przykład, jeśli plik konfiguracyjny to /etc/openvpn/client.conf, nazwa usługi to [email protected].

Z Arch Wiki

Karlo
źródło
$ sudo systemctl włącz [email protected] [sudo] hasło dla użytkownika: Nie udało się wywołać metody: brak takiego pliku lub katalogu
RoraΖ
Twój plik konfiguracyjny nosi nazwę „VPN”?
Karlo,
Tak,/etc/openvpn/vpn.conf
RoraΖ
Też systemctl start [email protected]nie działa? To powinno zadziałać ...
Karlo,
1
Działa to dla mnie na Raspbian GNU / Linux 8 (Debian Jessie). Dzięki!
neuhaus,
1

Openvpn @ .service bardzo ewoluował między Debianem 8 i 9. Oryginalny pakiet dla Jessie na przykład nie systemctl reload openvpn@. Aby to naprawić, wersja Stretch wprowadza do pliku systemd 10 nowych dyrektyw, w tym PIDFile=ponowne ładowanie.

Dla użytkowników stretch, ja proponuję jechać do backport, a jeśli nie można tego zrobić, przynajmniej uzyskać Systemd plik z https://packages.debian.org/jessie-backports/openvpn i ekstraktu debian/[email protected]do /etc/systemd/system/[email protected]i cieszyć się lepiej funkcjonalność i bezpieczeństwo.

Jari Turkia
źródło
0

Właściwym rozwiązaniem byłoby skorzystanie z systemd's systemd-ask-password/ „ Password Agents ”, które zapewniają wbudowaną metodę systemowego kierowania haseł / haseł do usług.

Aby to zrobić, potrzebujesz OpenVPN 2.3.0 lub nowszej wersji .

Elias Probst
źródło
Tego właśnie używa skrypt Expect w moim edytowanym poście.
RoraΖ
Przepraszam, przegapiłem tę edycję.
Elias Probst
0

Podczas nowej instalacji Jessie_8.0.0:

  1. skopiuj stare pliki /etc/openvpn/cluster.conf(plus *.keyi *.crt) z wheezy
  2. bez komentarza AUTOSTART="all" w /etc/default/openvpn- Myślę, że to nie miało wpływu
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart [email protected]

Teraz tunel jest gotowy - zobaczę, co się stanie po ponownym uruchomieniu, ale w tej chwili nie mogę go ponownie uruchomić

Piotr
źródło