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.
- 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.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 +xna 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
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).
openvpn@.servicewygląda plik?