systemdでOpenVPNを使用する


24

わかりましたので、私はこの問題の解決策をウェブで検索してきましたが、答えは私にはうまくいかないようです。うまくいけば誰かが私を助けることができます。OpenVPN Clientのみを構成しようとしています。

私は走っていますが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 openvpn@vpn.service結果を次のようにします。

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

サービスのセットアップを行う必要があることに気付きました。パスワードの入力を求められるので、このガイドに従ってを作成openvpn@.service/etc/systemd/system/ます。ただし、OpenVPNサービスを再起動しても、パスワードの入力は求められません。

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

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

何が欠けていますか?openvpn@vpn.serviceを作成する必要がありますか?もしそうなら、私はそれを正確にどこに置きますか?それほど難しいことではないように感じますが、私に合った解決策を見つけることはできません。必要な情報があればお知らせください。

溶液

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

シンボリックリンク:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service

パスワードの入力を求める

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

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

スクリプトを期待します/lib/systemd/system/openvpn_pw.exp。次のことを確認してください。

  • chmod +x スクリプトで。
  • しているtelnetインストール

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

上記のソリューションでは、次のログインにプレーンテキストで入力されたパスワードが記録され/var/log/syslog/var/log/daemon.log


openvpn@.serviceファイルはどのように見えますか?
クリスティアン・Ciupitu

現在のエラーとポスト更新
RoraΖ

/var/log/{syslog,daemon.log} journalctl -b -mを見て、OpenVPNが終了した理由を見つけてください。それらの場所の1つに実際のエラーメッセージが含まれている必要があります。(または、journalctl -b -m _EXE=/usr/sbin/openvpnOpenVPNメッセージだけを提供する必要があります)。
デロバート14

うん、私はそこに着いていた。パスワードの問題が発生しています。この解決策を試してみます:bbs.archlinux.org/viewtopic.php?id=150440 ご協力ありがとうございます!
ロラ

回答:


11

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

  1. /etc/systemd/system/openvpn@.service.d(ディレクトリ)を作成し、これに新しいファイルを配置します:

    [単位]
    Requires = networking.service
    After = networking.service
    ファイルを呼び出しましたlocal-after-ifup.conf。で終わる必要があります.conf。(これは現在少し壊れているビットです。)

  2. 次の内容でファイルを作成します/etc/tmpfiles.d(私はmineと呼びます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、使用しますopenvpn@foo.service

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

注:2.3.3-1以降はまだ不安定ですが、まだテスト中です。


systemctl enableは、そのようなファイルまたはディレクトリが存在しないと言って失敗します。systemd-initctlがない限り、/ lib / systemdにsysv initスクリプトが表示されませんか?
ロラ

@raz SysVスクリプトは次のようになり/etc/init.d/openvpnます。systemdは、デフォルトでsysv initと同じように実行します。それがopenvpn.serviceあなたの持っているものです。無効にする必要があります(systemctl disable)。ファイルは/lib/systemd/system/openvpn@.serviceシステムに存在しますか?
デロバート14

@razそのファイルがある場合は、マニュアルを試すことができますln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert

そのファイルはありませんが、作成できると確信しています。無効にした/etc/init.d/openvpn script.
ロラ

@raz Crunchbangに新しいOpenVPNパッケージのバックポートがあるかどうかはわかりませんが、そうでない場合は、sources.debian.net
デロベルト

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

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

  4. を実行しますservice openvpn start

私は彼らがこれを解決策として使用したと思う、なぜなら今はdebian 9ではさらに悪いから、非常に愚かなエラーが発生するとopenvpnが再起動しない...誰かがいくつかの解決策または回避策を知っているまだ実行中です!
ルチアーノアンドレスマティーニ

これは完璧でした。明らかと呼んでも、開始と停止になりますがclient.conf、これで単一の設定が実行されます。ありがとう!
ミッチェル・カリー

6

このタイプのユニットファイルは、インスタンス化されたサービスです-詳細については、こちらをご覧ください

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

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

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

systemctl start openvpn@myopenvpn.service

/usr/lib/systemd/user/ この/usr/lib/systemdレベルでは他に何もありません。
ロラ

どう/lib/systemd/system/?私のシステムには両方とも同じ内容であるようです(そしてそれらはシンボリックリンクではありません!)。
garethTheRed

そのファイルを追加し、投稿をすべて更新しました。
ロラ14

5

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

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

Arch Wikiから


$ sudoは、ユーザーのための[須藤]パスワードをopenvpn@vpn.serviceを有効systemctl:発行メソッドの呼び出しに失敗しました:そのようなファイルやディレクトリはありません
RoraΖ

設定ファイルの名前は「vpn」ですか?
カルロ

はい、/etc/openvpn/vpn.conf
ロラ14

動作しsystemctl start openvpn@vpn.serviceませんか?それはすべき ...仕事
Karlo

1
これは、Raspbian GNU / Linux 8(Debian Jessie)で動作します。ありがとう!
ノイハウス

1

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

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


0

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

これを行うには、OpenVPN 2.3.0以降が必要です。


これは、編集した投稿のExpectスクリプトが使用するものです。
ロラ14

申し訳ありませんが、その編集を見逃しました。
エリアスプロブスト14

0

新鮮なJessie_8.0.0のインストールで私がやった:

  1. wheezyから古い/etc/openvpn/cluster.conf(プラス*.keyおよび*.crt)ファイルをコピーします
  2. コメントのないAUTOSTART="all"/etc/default/openvpn、私は、これは効果がなかったと思います-
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.