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

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
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ć openvpn@.servicein /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 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

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

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


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

  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.


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/openvpn@.serviceistnieje w twoim systemie?
derobert

@raz Jeśli masz ten plik, możesz wypróbować instrukcjęln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
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.

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

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

Z Arch Wiki


$ sudo systemctl włącz openvpn@vpn.service [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 openvpn@vpn.servicenie 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/openvpn@.servicedo /etc/systemd/system/openvpn@.servicei cieszyć się lepiej funkcjonalność i bezpieczeństwo.



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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.