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/Linux
i 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.
- http://fedoraproject.org/wiki/Openvpn
- http://d.stavrovski.net/blog/how-to-install-and-set-up-openvpn-in-debian-7-wheezy
- I spojrzał na kilka innych przewodników.
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.service
wyniku 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@.service
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 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
telnet
zainstalowane
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/syslog
i/var/log/daemon.log
journalctl -b -m
dowiedz 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/openvpn
powinien podawać tylko wiadomości OpenVPN).
openvpn@.service
wygląda plik?