web-dev-qa-db-ja.com

systemdでのOpenVPNの使用

わかりましたので、私はこの問題の解決策をウェブで検索してきましたが、答えは私には役に立たないようです。うまくいけば、誰かが私を助けることができます。私はOpenVPNクライアントのみを設定しようとしています。

CrunchBang Linux 3.2.0-4-AMD64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxを実行していますが、systemdを使用するように切り替えました。切り替えは十分スムーズに進みましたが、今ではsystemdを使用してOpenVPNクライアントを起動することができません。これらの構成チュートリアルに従ってみましたが、何も機能しません。

コマンドラインからopenvpn /etc/openvpn/vpn.confを使用してトンネルを起動できます。だから私は設定ファイルが良いことを知っています、それはsysvinitでうまく働いていたので私は驚かないでください。次に、systemctl status [email protected]でステータスを作成しようとすると、次のような結果になります。

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

サービスを設定する必要があることに気付きました。パスワードの入力を求められるので、このガイドに従って[email protected]/etc/systemd/system/に作成しました。ただし、OpenVPNサービスを再起動しても、パスワードの入力は求められません。

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

Fedoraチュートリアルでは、シンボリックリンクを作成する手順を実行しますが、ウォークスルーでは.serviceファイルを作成しません。

何が欠けていますか? [email protected]を作成する必要がありますか?もしそうなら、私はそれを正確にどこに置きますか?これは難しいことではないように思いますが、私に役立つ解決策を見つけることができません。必要な情報をさらに提供させていただきます。

解決

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

シンボリックリンク:

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

パスワードのプロンプト

接続するためのパスワードの入力を求められることを除いて、すべてが正常に機能しています。私は試みました この解決策 。ファイルを少し上から微調整し、例のように Expectスクリプト を追加しました。魅力のように働いています!私のファイルは以下です。

上記の変更された行/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

スクリプト/lib/systemd/system/openvpn_pw.expが必要です。次のことを必ず行ってください。

  • スクリプトのchmod +x
  • telnetがインストールされている

期待スクリプトのコード:

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

上記のソリューションは、プレーンテキストで入力されたパスワードを/var/log/syslogおよび/var/log/daemon.logのログに記録することに注意してください

24
RoraΖ

Systemdを使用したDebian OpenVPNセットアップは、現在少し壊れていると思います。それを私のマシンで動作させるために、私はしなければなりませんでした:

  1. /etc/systemd/system/[email protected](ディレクトリ)を作成し、その中に新しいファイルを配置します。

    [Unit] 
     Requires = networking.service 
     After = networking.service
    ファイルをlocal-after-ifup.confと呼びました。末尾は.confにする必要があります。 (これは現在少し壊れているビットです。)
  2. /etc/tmpfiles.dにファイルを作成します(私はlocal-openvpn.confと呼びます)。

    #タイプパスモードUID GID経過時間引数
     d/run/openvpn 0755 root root--
    これは Debianバグ741938 (2.3.3-1で修正済み)です。
  3. multi-user.target.wantsへのシンボリックリンクを作成します(最も簡単な方法はsystemctl enable openvpn@CONF_NAME.serviceです)。たとえば、/etc/openvpn/foo.confがある場合は、[email protected]を使用します。

  4. SystemdにSysV initスクリプトも表示されている場合は、それを無効にします。これは Debianバグ700888 (2.3.3-1で修正済み)です。

注:2.3.3-1以降は不安定ですが、 まだテスト段階ではありません です。

13
derobert
  1. すべてのopenvpn * .confファイルを/etc/openvpn/に配置します。
  2. /etc/default/openvpnを編集します。これをコメント解除:

    AUTOSTART="all"
    
  3. systemctl daemon-reloadを実行します。

  4. service openvpn startを実行します。
8

このタイプのユニットファイルは、インスタンス化されたサービスです-詳細が利用可能です ここ

以下は、CentOS 7でのopenvpnのユニットファイルです。

[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

/usr/lib/systemd/system/openvpn@serviceとして存在します。ファイルの%iは、ユニット名の@の後の文字列に置き換えられます。

構成ファイルは/etc/openvpn/myopenvpn.confにあるため、サービスは次のように開始されます。

systemctl start [email protected]
7
garethTheRed

openvpn@<configuration>.serviceを有効にして、サービスファイルを作成する必要があります。

たとえば、構成ファイルが/etc/openvpn/client.confの場合、サービス名は[email protected]です。

Arch Wikiから

5
Karlo

Openvpn @ .serviceはDebian 8と9の間で大幅に進化しました。たとえば、Jessieの元のパッケージはsystemctl reload openvpn@に失敗します。これらを修正するために、StretchバージョンはPIDFile=を含むsystemd-fileに10個の新しいディレクティブを導入し、リロードを再度機能させます。

Stretchユーザーの場合、バックポートに行くことをお勧めします。それができない場合は、少なくとも https://packages.debian.org/jessie-backports/openvpn からsystemd-fileを取得してください。 =およびdebian/[email protected]/etc/systemd/system/[email protected]に抽出し、機能とセキュリティを向上させます。

1
Jari Turkia

適切な解決策は、systemdのsystemd-ask-password/" Password Agents "を使用することです。これは、パスワード/パスフレーズをサービスに流すためのsystemd組み込み方法を提供します。

これには OpenVPN 2.3.0以降 が必要です。

0
Elias Probst

新しいJessie_8.0.0インストールで、私はしました:

  1. 古い/etc/openvpn/cluster.conf(および*.keyおよび*.crt)ファイルをwheezyからコピーします
  2. コメントなしAUTOSTART="all" in /etc/default/openvpn-これは効果がないと思います
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart [email protected]

これでトンネルが起動しました-再起動後に何が起こるかはわかりますが、この瞬間は再起動できません

0
Peter