Help us understand the problem. What is going on with this article?

PiVPN / openvpn で急に繋がらなくなった時に確認、解決する方法

More than 1 year has passed since last update.

問題

何ヶ月も問題なくVPN接続出来ていたのに急に繋がらなくなった。そんな時はまずVPNのログを見てみる。

問題発見の流れ

PiVPNの場合、以下のようなファイル構成

ls /etc/openvpn

client  crl.pem  easy-rsa  server  server.conf  update-resolv-conf

server.conf の確認

server.confを確認してみると

cat /etc/openvpn/server.conf | grep ^\s*log

log /var/log/openvpn.log

/var/log/openvpn.logがログなので

tail -f /var/log/openvpn.log

をして試しに接続してみると、

VERIFY ERROR: depth=0, error=CRL has expired: CN=xxxxxxxxxx

こう言うようなエラーがあった場合、今回の解決方法が使える。
このエラーの意味するところはCRLが失効してて、接続が拒絶されている。

crl.pem の失効期限の確認

いつまでの期限だったのか?を確認するには以下のように確認出来る

sudo openssl crl -in /etc/openvpn/crl.pem -text

Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /CN=ChangeMe
        Last Update: Feb  5 12:20:56 2018 GMT
        Next Update: Aug  2 12:20:56 2018 GMT

Next Update: Aug 2 12:20:56 2018 GMT以降は繋がらなくなる。

解決方法

PiVPNの場合はデフォルト配置されている/etc/openvpn/crl.pemを更新する必要がある。この際、デフォルトの失効期限(180日)を延長変更しておけば、毎度毎度crl.pemの更新が必要なくなる。

easy-rsaのファイル一覧(PiVPNの場合)

ls /etc/openvpn/easy-rsa

ChangeLog  COPYING.md  doc  easyrsa  gpl-2.0.txt  openssl-1.0.cnf  
pki  README.quickstart.md  vars  vars.example  x509-types

失効期限の確認

$ENV::EASYRSA_CRL_DAYSの変数で失効期限が設定される。

cat /etc/openvpn/easy-rsa/openssl-1.0.cnf | grep EASYRSA_CRL_DAYS

default_crl_days= $ENV::EASYRSA_CRL_DAYS    # how long before next CRL

vars.exampleでデフォルトの日数を確認。

cat /etc/openvpn/easy-rsa/vars.example | grep EASYRSA_CRL_DAYS

#set_var EASYRSA_CRL_DAYS   180

varsファイルでデフォルトを上書きした実際の設定変数が確認でき、ここにEASYRSA_CRL_DAYSの設定がない。

# easy-rsaの場所(PiVPNの場合)
cat /etc/openvpn/easy-rsa/vars

if [ -z "$EASYRSA_CALLER" ]; then
    echo "Nope." >&2
    return 1
fi
set_var EASYRSA            "/etc/openvpn/easy-rsa"
set_var EASYRSA_PKI        "$EASYRSA/pki"
set_var EASYRSA_KEY_SIZE   2048
set_var EASYRSA_ALGO       rsa
set_var EASYRSA_CURVE      secp384r1

失効期限の変更

varsの末尾にEASYRSA_CRL_DAYSを追加してデフォルトの日数を変更する。
例えばこの先10年 set_var EASYRSA_CRL_DAYS 3650

...
...
set_var EASYRSA_CURVE      secp384r1
set_var EASYRSA_CRL_DAYS 3650 # 追記

crl.pem の再生成

varsを変更した後にcrl.pemの再生成を行う。

sudo /etc/openvpn/easy-rsa/easyrsa gen-crl


Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf

An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/pki/crl.pem

確認すると確かに10年後に変わっている。

sudo openssl crl -in /etc/openvpn/easy-rsa/pki/crl.pem -text

Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /CN=ChangeMe
        Last Update: Aug  5 12:20:56 2018 GMT
        Next Update: Aug  2 12:20:56 2028 GMT

ここで、生成された場所が/etc/openvpn/server.confで指定されている場所と違うと思うので、指定場所を確認の上、crl.pemを上書きコピーする

cat /etc/openvpn/server.conf | grep ^\s*crl-verify

crl-verify /etc/openvpn/crl.pem

/etc/openvpn/crl.pemなので、/etc/openvpn/easy-rsa/pki/crl.pemに出来ているファイルをコピー

sudo cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/crl.pem

openvpnを再起動

sudo systemctl restart openvpn@server.service

これでまた以前と同じようにVPNが繋がるようになる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした