5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-06

問題

何ヶ月も問題なく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が繋がるようになる。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?