# OpenVPNが急に繋がらなくなった!
お疲れ様です。チーム:thonk_spin.ex-large.rotate.parrot:の高山です。
OpenVPNが急に繋がらなくなった!の解答を送らせていただきます。
## 原因特定
サーバー側にログインし、`/var/log/openvpn/openvpn.log`を見たところ、
```
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 TLS: Initial packet from [AF_INET]192.168.200.20:40640, sid=358f920f 0e04a4d4
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 VERIFY OK: depth=1, CN=Easy-RSA CA
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 VERIFY ERROR: depth=0, error=certificate has expired: CN=vyos-client
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 OpenSSL: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 TLS_ERROR: BIO read tls_read_plaintext error
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 TLS Error: TLS object -> incoming plaintext read error
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 TLS Error: TLS handshake failed
Sat Aug 31 13:12:52 2019 192.168.200.20:40640 SIGUSR1[soft,tls-error] received, client-instance restarting
```
というエラーログが繰り返されていることを確認しました。
`VERIFY ERROR: depth=0, error=certificate has expired: CN=vyos-client`という記述から、クライアント側の公開鍵証明書の期限が切れたために接続が拒否されていることが原因であると特定しました。
## 問題解決
サーバー側にはEasy RSAがインストールされていますので、
```
$ pushd /easy-rsa-3.0.6/easyrsa3
$ ./easyrsa gen-req vyos-client2 nopass
(Common Nameの入力を求められたが、vyos-clientとした)
$ ./easyrsa sign-req client vyos-client2
$ scp pki/issued/vyos-client2.crt admin@192.168.0.20:~/
$ scp pki/private/vyos-client2.key admin@192.168.0.20:~/
$ popd
```
というコマンドで、クライアント側の公開鍵証明書と秘密鍵を生成し、クライアント側にコピーしました。
次に、クライアント側にログインし、`show configure`で設定を見ると、以下の記述を確認しました。
```
openvpn vtun0 {
encryption aes256
hash sha256
mode client
openvpn-option "--tls-auth /config/auth/ta.key 1"
remote-host 192.168.200.10
tls {
ca-cert-file /config/auth/ca.crt
cert-file /config/auth/vyos-client.crt
key-file /config/auth/vyos-client.key
}
}
```
よって、記述に従って、サーバー側からコピーした公開鍵証明書と秘密鍵を適切なパスに配置しました。
```
$ sudo cp vyos-client2.crt /config/auth/vyos-client.crt
$ sudo cp vyos-client2.key /config/auth/vyos-client.key
$ rm vyos-client2.crt vyos-client2.key
```
そして、少々待つと以下のように`172.25.0.1/32`に対して疎通が取れるようになり、問題が解決しました。
```
$ ping 172.25.0.1
PING 172.25.0.1 (172.25.0.1) 56(84) bytes of data.
64 bytes from 172.25.0.1: icmp_req=1 ttl=64 time=0.738 ms
64 bytes from 172.25.0.1: icmp_req=2 ttl=64 time=0.768 ms
64 bytes from 172.25.0.1: icmp_req=3 ttl=64 time=1.03 ms
64 bytes from 172.25.0.1: icmp_req=4 ttl=64 time=0.781 ms
^C
--- 172.25.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.738/0.829/1.031/0.120 ms
```